¿Cómo puedo escapar del * en modo org para evitar la fuente en negrita?


12

Si escribo algo así como *shrug*en modo org, se fuente automáticamente como texto en negrita . ¿Cómo puedo evitar eso, es decir, haber *shrug*aparecido literalmente al exportar?

Editar:

Todavía quiero poder usar la fuente en negrita (sin tener que cambiar la sintaxis de estrella predeterminada para el texto en negrita), y no debería importar a qué formato de archivo se exporta mi archivo de organización, por ejemplo, debería funcionar para Markdown y HTML exportar.

Esto es algo importante , por eso está escrito en negrita. Pero para otra cosa, no tengo idea * encogerse de hombros *.


1
Si está exportando esto a LaTeX más tarde, podría probar \ast{}shrug\ast{}o \star{}shrug\star{}, de manera similar, con HTML podría usar la codificación de entidad: &#2a;o si agregar espacios antes o después del asterisco es una opción, eso también funcionaría.
wvxvw

Parece que la respuesta de suvayu de envolverlo en marcadores textuales es lo que quieres. Alternativamente, puede modificar org-énfasis-lista para que otro carácter se use para texto en negrita.
user2699

No exactamente. = * encogimiento de hombros * = da como resultado que el HTML exportado se codeenvuelva en una etiqueta, y en el marcado tiene retrocesos. Quiero que no esté formateado de ninguna manera.
timor

Pregunta editada para reflejar que cambiar org-énfasis-lista no es realmente una opción. No quiero cambiar todo en negrita que ya existe en mi archivo .org.
Timor

2
Lo \ast{}shrug\ast{}mencionado por wvxvw es probablemente su mejor opción. exporta a html como ∗shrug∗y a latex como $\ast$shrug$\ast$usando las entidades de caracteres apropiadas. org-toggle-pretty-entitieslos muestra como caracteres UTF8 en el búfer de organización.
mutbuerger

Respuestas:


9

Esta respuesta está inspirada después de sugerencias colectivas en la lista GNU de emacs-org-mode para usar los caracteres org-entity( C-h i g (org) Special symbols) en \ast{}lugar de espacios de ancho cero (que sugerí en mi otra respuesta aquí ).

A continuación se muestra una solución genérica en la que el usuario no necesita recordar las entidades orgánicas para varios símbolos. Inserta la entidad de organización (si está disponible) cuando el usuario lo hace C-u SYMBOL; que funciona para C-u *, C-u /, C-u =, etc.

(defun modi/org-entity-get-name (char)
  "Return the entity name for CHAR. For example, return \"ast\" for *."
  (let ((ll (append org-entities-user
                    org-entities))
        e name utf8)
    (catch 'break
      (while ll
        (setq e (pop ll))
        (when (not (stringp e))
          (setq utf8 (nth 6 e))
          (when (string= char utf8)
            (setq name (car e))
            (throw 'break name)))))))

(defun modi/org-insert-org-entity-maybe (&rest args)
  "When the universal prefix C-u is used before entering any character,
    insert the character's `org-entity' name if available.

    If C-u prefix is not used and if `org-entity' name is not available, the
    returned value `entity-name' will be nil."
  ;; It would be fine to use just (this-command-keys) instead of
  ;; (substring (this-command-keys) -1) below in emacs 25+.
  ;; But if the user pressed "C-u *", then
  ;;  - in emacs 24.5, (this-command-keys) would return "^U*", and
  ;;  - in emacs 25.x, (this-command-keys) would return "*".
  ;; But in both versions, (substring (this-command-keys) -1) will return
  ;; "*", which is what we want.
  ;; http://thread.gmane.org/gmane.emacs.orgmode/106974/focus=106996
  (let ((pressed-key (substring (this-command-keys) -1))
        entity-name)
    (when (and (listp args) (eq 4 (car args)))
      (setq entity-name (modi/org-entity-get-name pressed-key))
      (when entity-name
        (setq entity-name (concat "\\" entity-name "{}"))
        (insert entity-name)
        (message (concat "Inserted `org-entity' "
                         (propertize entity-name
                                     'face 'font-lock-function-name-face)
                         " for the symbol "
                         (propertize pressed-key
                                     'face 'font-lock-function-name-face)
                         "."))))
    entity-name))

;; Run `org-self-insert-command' only if `modi/org-insert-org-entity-maybe'
;; returns nil.
(advice-add 'org-self-insert-command :before-until #'modi/org-insert-org-entity-maybe)

Entonces, cuando el usuario escribe C-u *, \ast{}se inserta y se muestra el siguiente mensaje en el área de eco,

Se insertó 'org-entity' \ ast {} para el símbolo *.

Si org-pretty-entitiesse establece en tarriba, el insertado \ast{}se mostrará como *.

Si org-entityno existe un para un carácter X y si el usuario hace C-u X , X simplemente se inserta 4 veces (como C-usuele ocurrir).


1
Esto se ve muy conveniente. El único drwaback (en mi opinión) que queda, es que el archivo .org, que no contiene ninguna construcción LaTeX hasta ahora, ahora tiene bits de sintaxis sin modo de organización (LaTeX) dispersos por todo el archivo. Por cierto, ¿hay alguna razón para que no \*thisisnotbold\*exista una construcción como esta ?
Timor

1
Esta es también la sintaxis de la organización. Echa un vistazo a la org-entitiesdocumentación.
Kaushal Modi

8

Uso del espacio unicode de espacio de ancho cero

Puede fallar el análisis de énfasis en negrita agregando un carácter de espacio de ancho cero (indicado por [ZWS] en los fragmentos a continuación) antes del primer asterisco o después del segundo asterisco.

Los dos fragmentos a continuación se exportaron bien a HTML en mis pruebas:

  • [ZWS] antes del primer asterisco

    This is some *bold* test and this is ​[ZWS]*not bold*.
    
  • [ZWS] después del segundo asterisco

    This is some *bold* test and this is *not bold*​[ZWS].
    

Puede ingresar el ESPACIO DE ANCHO CERO (nombre unicode) haciendo C-x 8 RET 200b RET.
Lo uso muy a menudo, así queC-x 8 0 lo he vinculado .


Actualizar

Según la discusión en la lista de correo emacs-org-mode , no se recomienda el uso de caracteres no ASCII para escapar; en su lugar org-entitiesdebe usarse si corresponde. También estuve de acuerdo con eso y se me ocurrió esta otra solución que hace que la inserción sea org-entitiesrealmente fácil ( C-u *en este caso).


Técnicamente, esa es una forma bastante rápida de resolver el problema. ¿Se basa en el modo org que no interpreta el ZWS como espacio en blanco? Además, me temo que la solución no es Obvius para otros usuarios que modifican el archivo org ...
Timor

@timor He mencionado esta discusión en la emacs-orgmode@gnu.orglista de correo. Si está interesado, puede seguir / agregar a la discusión aquí .
Kaushal Modi

@timor, no es obvio, pero de todas las soluciones dadas aquí, es la única que funciona sin modificar la configuración de emacs, por lo que es la más obvia si desea compartir sus archivos.
user2699

@ user2699 FWIW, el uso de entidades de organización en los archivos funcionará de inmediato sin ninguna configuración de usuario ... es solo el uso de ASCII simple \ast{}en los archivos. Mi otra solución simplemente hace que ingresar sea \ast{}más rápido y fácil de recordar.
Kaushal Modi

3

Al pie de la letra, si realmente quiere decir usar algún marcado en el LaTeX exportado, entonces puede usarlo =*shrug*=. Sin embargo, si solo desea que se exporte como *shrug*y desea hacerlo todo el tiempo, le recomendaría filtros . Sin embargo, si solo necesita esto para algunos casos *shrug*, debe usar la alternativa sugerida por @wvxvw. Podrías hacer esto limpiamente usando macros . Algunos ejemplos siguen.

Filtros

(defun my-bold (contents backend info)
  (when (org-export-derived-backend-p backend 'latex)
    (replace-regexp-in-string "\\`\\\\textbf{\\(.+\\)}"
                              "\\\\ast{}\\1\\\\ast{}" contents)))

(add-to-list 'org-export-filter-bold-functions 'my-bold)

Esencialmente, el filtro anterior busca el \textbf{..}marcado en la cadena transcodificada y lo reemplaza \ast{}..\ast{}sin cambiar lo que haya dentro {..}. No he probado la expresión regular y la cadena de reemplazo, por lo que podría haber errores, pero se entiende la idea. De manera similar para cubrir otros backends, uno puede incluir fragmentos adicionales como este:

(when (org-export-derived-backend-p backend 'html)
   (replace-regexp-in-string "<b>\\(.+\\)</b>" "\&#2a;\\1\&#2a;" contents))

La misma advertencia se cumple para la expresión regular anterior.

Macros

Fuente de la organización:

#+macro: nobold @@latex:\ast{}$1\ast{}@@ @@html:&#2a;$1&#2a;@@

This text is *bold* this is nobold{{{not}}}

exporta a LaTeX como:

This text is \textbf{bold} this is \ast{}not\ast{}

y a HTML como:

This text is <b>bold</b> this is  &#2a;not&#2a;

Por supuesto, puede agregar tantos backends como desee a la macro.

Editar: como Kaushal señala en los comentarios, el fragmento de exportación para látex es opcional en este caso. Sin embargo, prefiero usarlos cuando se trata de látex desnudo, ya que me resulta bastante difícil hacer un seguimiento de la lista org-entitiesy las reglas específicas detrás de la identificación de látex desnudo en la fuente Org.

Nota:

  • los ejemplos de filtro no han sido probados,
  • No sé ninguno HTML, por lo que puede haber algunos errores en los bits respectivos.

¿No debería ser suficiente esta definición macro #+macro: nobold \ast{}$1\ast{}? astes uno de los miembros de org-entitiesla lista, que las exportaciones especifica lo que el látex, HTML, ASCII, etc debe ser similar a: ("ast" "\\ast" t "&lowast;" "*" "*" "*"). El orden de los elementos en esa lista es "nombre, reemplazo de LaTeX, matemática de LaTeX, reemplazo de HTML, reemplazo de ASCII, reemplazo de Latin1, reemplazo de utf-8".
Kaushal Modi

@kaushalmodi Sí, lo sería, sin embargo, dado que ya sabemos que es LaTeX, no hay ningún daño en ponerlo dentro de un fragmento de látex. En mi experiencia, el uso de fragmentos es mucho más robusto debido a su falta de ambigüedad.
Quarky

-1

Esto está controlado por la variable org-énfasis-alista, y puede modificarse fácilmente.

  • Coloque el punto sobre el texto en negrita, use el comando what-cursor-position C-u C-x =para encontrar la cara, tenga en cuenta que tiene propiedad org-emphasis.
  • Llama customize-groupy busca org-énfasis
  • org-énfasis-alista debería aparecer, con varias opciones para marcar texto.
  • Eliminar la entrada correspondiente a *
  • Aplicar cambios y reiniciar org-mode o emacs
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.