En línea textual y código con comillas en modo Org


37

En el modo Org, puedo rodear texto con =o ~para colocar texto en línea literal o en modo de código.

Sin embargo, esto falla si el texto tiene comillas, y no pude encontrar una explicación o solución en la documentación .

Por ejemplo:

  • =hello= Representa como textualmente
  • ~hello~ Representa como código
  • =hello'= No se puede procesar literalmente
  • ~hello'~ No se procesa como código

La única solución que encontré hasta ahora es insertar caracteres invisibles, por ejemplo C-x 8 <RET> 200b <RET>, escribir , como se explica en esta pregunta .

¿Por qué es esto (es un error?) Y cómo puedo evitar este problema sin insertar caracteres invisibles?

Respuestas:


47

Primero que nada: esto es Emacs. ¡No es un error, es un ajuste!

En segundo lugar, @glucas tiene razón al decir que necesita modificarorg-emphasis-regexp-components para obtener lo que desea. Sin embargo, me gustaría sugerir dos modificaciones a su código (@ Malabarba) y proporcionar un poco más de contexto:

  1. No necesita copiar el valor completo de org-emphasis-regexp-componentssu archivo init para modificar un solo componente. Para su caso de uso, lo siguiente es suficiente:

    (setcar (nthcdr 2 org-emphasis-regexp-components) " \t\r\n,\"")
  2. No tiene que modificar org-emphasis-regexp-componentsantes de cargar a org-modetravés de (require 'org). Simplemente agregue la siguiente línea después de sus modificaciones:

    (org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components)

Más contexto

En caso de que desee personalizar otros aspectos de cómo funciona el marcado de énfasis org-mode, sepa esto:

El valor de org-emphasis-regexp-componentses una lista con cinco entradas.

  1. La primera entrada controla qué caracteres pueden preceder inmediatamente a los caracteres de marcado. Si desea poder tener algo como why=hello=renderizar correctamente, deberá modificar esta entrada.

    (setcar org-emphasis-regexp-components "...")
  2. La segunda entrada controla qué caracteres pueden seguir inmediatamente a los caracteres de marcado. Si desea poder tener algo como =hello=thererenderizar correctamente, deberá modificar esta entrada.

    (setcar (nthcdr 1 org-emphasis-regexp-components) "...")
  3. La tercera entrada especifica los caracteres que no están permitidos como caracteres de borde , es decir, caracteres que siguen inmediatamente a un carácter de marcado de apertura o preceden a un carácter de marcado de cierre. Tendrá que modificar esto para hacer cosas como ='hello'=renderizar correctamente.

    (setcar (nthcdr 2 org-emphasis-regexp-components) "...")
  4. La cuarta entrada enumera los caracteres que están permitidos en el cuerpo de la cadena marcada, es decir, los caracteres que aparecen entre los caracteres del borde. Raramente necesitará modificar esto; de forma predeterminada, cualquier carácter está permitido como carácter de cuerpo.

    (setcar (nthcdr 3 org-emphasis-regexp-components) "...")
  5. La quinta entrada especifica cuántas líneas nuevas se permiten dentro de una expresión marcada. Por defecto, org-modepermite una sola línea nueva. Por lo tanto, si desea poder agregar marcado al texto que abarca más de dos líneas consecutivas, deberá modificar esta entrada.

    (setcar (nthcdr 4 org-emphasis-regexp-components) N)

    ... dónde Nestá el número de líneas nuevas que desea permitir.

Artículos Relacionados

La gente parece encontrarse con este problema con bastante frecuencia. Además de la publicación que mencionó , hay al menos dos preguntas más en StackOverflow que tratan problemas muy similares:


77
Voté su respuesta pero también me gustaría felicitar por la calidad de la respuesta.
Kaushal Modi

Gracias @itsjeyd Esto funciona muy bien si ejecuto esas dos líneas de forma interactiva una vez que Emacs se ha cargado completamente con mis búferes ya abiertos. Sin embargo, y por extraño que parezca, me encuentro "Symbol's value as variable is void: org-emphasis-regexp-components"incluso si coloco esas dos líneas al final de mi .emacsarchivo. ¿Alguna idea de por qué ese podría ser el caso?
Amelio Vazquez-Reina

@ AmelioVazquez-Reina De nada :) Solo para asegurarme: ¿Está (require 'org)en su .emacsarchivo antes de hacer cualquier personalización org-emphasis-regexp-components?
itsjeyd

1
@ AmelioVazquez-Reina Me alegra que todo funcione correctamente para usted ahora :) Sus observaciones son correctas; no necesita hacerlo (require 'org)en su archivo init para poder usarlo. Si no lo hace, Emacs lo cargará automáticamente cuando: (a) abra un .orgarchivo por primera vez en la sesión actual, o (b) habilite el modo manualmente M-x org-modepor primera vez en la sesión actual, o (c ) cuando restaura un escritorio guardado que incluye al menos un .orgarchivo. (cont.)
itsjeyd

1
@ AmelioVazquez-Reina (cont.) La cuestión es : Emacs no se cargará org-modeautomáticamente solo porque incluyó algunas personalizaciones en su archivo de inicio. Es por eso que necesitas(require 'org) antes de personalizar cualquiera de sus variables. Sin cargar completamente el modo, Emacs no sabrá qué hacer con variables como org-emphasis-regexp-components; no se definen cuando Emacs los encuentra por primera vez, de ahí el Symbol's value as variable is voidmensaje.
itsjeyd

11

Hay una opción mucho más simple: usar bloques fuente en línea :

src_python{hello'}

Esto funciona sin problemas para caracteres como comillas, y proporciona resaltado de sintaxis para código en línea.

Para incluir el código fuente en línea al exportar, querrás agregar esta declaración al encabezado:

#+PROPERTY: header-args :exports code

1
¡Este es un gran consejo! ¡Muy bueno obtener resaltado de sintaxis para código en línea!
Shon

¡Esto es genial! Me recuerda a Latex (:
Chris.Q

7

Puede eliminar los caracteres de comillas org-emphasis-regexp-componentssegún lo descrito por @Malabarba en esta publicación de blog .

El código relevante de esa publicación:

;; This HAS to come before (require 'org)
(setq org-emphasis-regexp-components
      '("     ('\"{“”"
        "-   .,!?;''“”\")}/\\“”"
        "    \r\n,"
        "."
        1))

Ver la cadena de documentos para org-emphasis-regexp-components : de forma predeterminada, los caracteres de comillas se consideran:

border: los caracteres prohibidos como caracteres de borde.

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.