¿Puedo hacer enlaces en modo Org que contengan corchetes, [o]?

13

¿Hay alguna forma de escapar de los corchetes ( [y ]) para que puedan incluirse en la descripción de un enlace del modo Org? El siguiente enlace no funciona, por ejemplo:

[[http://mathoverflow.net/questions/195203/automorphisms-of-ideals-of-mathbbct][Automorphisms of ideals of C[t]]]

Esperaba que una barra invertida ( \[) funcionara o que hubiera una entidad organizativa, pero ese no parece ser el caso.

Omar
fuente
1
El problema es que los enlaces en Org se analizan utilizando expresiones regulares, y esta tarea sería equivalente a la recursión, que no se puede analizar con expresiones regulares. Si quisiera agregar solo un nivel de recursión, eso sería factible parcheando org-make-link-regexps, pero en general eso no se puede hacer con la configuración actual.
wvxvw
Se puede escapar. Podría intentar adaptar la expresión regular relevante org-bracket-link-regexppara manejar esto, aunque org-insert-linktodavía quiere reemplazar los corchetes con llaves y puede tener otras ramificaciones.
politza
Oh, acabo de recordar eso \[y \]se supone que deben dar ecuaciones mostradas (como $$), no corchetes escapados.
Omar

Respuestas:

5

Sin embargo, una solución de trabajo, no tan bonita, es usar las macros del modo org .

Las siguientes macros se reemplazan por los códigos ASCII de [y ]al exportar a html o latex.

# Square Bracket Open [
#+MACRO: BO @@latex:\char91@@ @@html:[@@
# Square Bracket Close ]
#+MACRO: BC @@latex:\char93@@ @@html:]@@

[[http://emacs.stackexchange.com][{{{BO}}}Emacs SE{{{BC}}}]]

Referencia

Kaushal Modi
fuente
Gracias, pero esperaba convencer al modo org para representarlos como paréntesis dentro del búfer. Su solución, por supuesto, funciona para la exportación.
Omar
No funciona para la exportación de HTML.
Alex
3

A continuación se muestra la versión modificada org-make-link-regexpque permitirá un nivel de anidamiento de corchetes dentro de la descripción:

(defun org-make-link-regexps ()
  "Update the link regular expressions.
This should be called after the variable `org-link-types' has changed."
  (setq org-link-types-re
    (concat
     "\\`\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):")
    org-link-re-with-space
    (concat
     "<?\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):"
     "\\([^" org-non-link-chars " ]"
     "[^" org-non-link-chars "]*"
     "[^" org-non-link-chars " ]\\)>?")
    org-link-re-with-space2
    (concat
     "<?\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):"
     "\\([^" org-non-link-chars " ]"
     "[^\t\n\r]*"
     "[^" org-non-link-chars " ]\\)>?")
    org-link-re-with-space3
    (concat
     "<?\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):"
     "\\([^" org-non-link-chars " ]"
     "[^\t\n\r]*\\)")
    org-angle-link-re
    (concat
     "<\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):"
     "\\([^" org-non-link-chars " ]"
     "[^" org-non-link-chars "]*"
     "\\)>")
    org-plain-link-re
    (concat
     "\\<\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):"
     (org-re "\\([^ \t\n()<>]+\\(?:([[:word:]0-9_]+)\\|\\([^[:punct:] \t\n]\\|/\\)\\)\\)"))
    ;;   "\\([^]\t\n\r<>() ]+[^]\t\n\r<>,.;() ]\\)")
    org-bracket-link-regexp
    ;; "\\[\\[\\([^][]+\\)\\]\\(\\[\\([^][]+\\)\\]\\)?\\]"
    "\\[\\[\\([^][]+\\)\\]\\(\\[\\([^[]*?\\[[^]]*?\\][^]]*?\\|[^][]+\\)\\]\\)?\\]"
    org-bracket-link-analytic-regexp
    (concat
     "\\[\\["
     "\\(\\(" (mapconcat 'regexp-quote org-link-types "\\|") "\\):\\)?"
     "\\([^]]+\\)"
     "\\]"
     "\\(\\[" "\\([^[]*?\\[[^]]*?\\][^]]*?\\|[^]]+\\)" "\\]\\)?"
     ;; "\\(\\[" "\\([^]]+\\)" "\\]\\)?"
     "\\]")
    org-bracket-link-analytic-regexp++
    (concat
     "\\[\\["
     "\\(\\(" (mapconcat 'regexp-quote (cons "coderef" org-link-types) "\\|") "\\):\\)?"
     "\\([^]]+\\)"
     "\\]"
     "\\(\\[" "\\([^]]+\\)" "\\]\\)?"
     "\\]")
    org-any-link-re
    (concat "\\(" org-bracket-link-regexp "\\)\\|\\("
        org-angle-link-re "\\)\\|\\("
        org-plain-link-re "\\)")))

Pero como se señaló anteriormente, esto no resuelve el problema de editar enlaces (Org aún querrá reemplazar los corchetes con llaves). Esto también solo puede manejar un nivel de anidamiento de un grupo entre corchetes.

wvxvw
fuente