Puis-je créer des liens en mode organisation contenant des crochets, [ou]?

13

Existe-t-il un moyen d'échapper les crochets ( [et ]) afin qu'ils puissent être inclus dans la description d'un lien en mode Org? Le lien suivant ne fonctionne pas, par exemple:

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

J'espérais que l'utilisation d'une barre oblique inverse ( \[) fonctionnerait ou qu'il y aurait une entité organisationnelle, mais cela ne semble pas être le cas.

Omar
la source
1
Le problème est que les liens dans Org sont analysés à l'aide d'expressions régulières, et cette tâche serait équivalente à la récursivité, qui ne peut pas être analysée avec des expressions régulières. Si vous vouliez ajouter un seul niveau de récursivité, ce serait faisable en corrigeant org-make-link-regexps, mais en général cela ne peut pas être fait avec la configuration actuelle.
wvxvw
L'évasion peut être effectuée. Vous pouvez essayer d'adapter l'expression rationnelle appropriée org-bracket-link-regexppour gérer cela, même si vous org-insert-linksouhaitez toujours remplacer les crochets par des accolades et cela peut avoir d'autres ramifications.
politza
Oh, je viens de m'en souvenir \[et je suis \]censé donner des équations affichées (comme $$), pas des parenthèses échappées.
Omar

Réponses:

5

Une solution de travail, pas si jolie cependant, consiste à utiliser les macros en mode org .

Les macros ci-dessous sont remplacées par les codes ASCII de [et ]lors de l'exportation vers html ou 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}}}]]

Référence

Kaushal Modi
la source
Merci, mais j'espérais convaincre le mode organisationnel de les rendre sous forme de crochets à l'intérieur du tampon. Votre solution fonctionne bien sûr pour l'exportation.
Omar
Ne fonctionne pas pour l'exportation HTML.
Alex
3

Ci-dessous est la version modifiée org-make-link-regexpqui permettra un niveau d'imbrication de crochets dans la description:

(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 "\\)")))

Mais comme indiqué ci-dessus, cela ne résout pas le problème de l'édition des liens (Org voudra toujours remplacer les crochets par des accolades.) Cela ne peut également gérer qu'un niveau d'imbrication d'un groupe entre crochets.

wvxvw
la source