Posso criar links no modo organizacional que contenham colchetes, [ou]?

13

Existe alguma maneira de escapar de colchetes ( [e ]) para que eles possam ser incluídos na descrição de um link no modo Org? O link a seguir não funciona, por exemplo:

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

Eu esperava que o uso de uma barra invertida ( \[) funcionasse ou que houvesse uma entidade organizacional, mas esse não parece ser o caso.

Omar
fonte
1
O problema é que os links na organização são analisados ​​usando expressões regulares e essa tarefa seria equivalente a recursão, que não pode ser analisada com expressões regulares. Se você quisesse adicionar apenas um nível de recursão, isso seria possível com o patch org-make-link-regexps, mas em geral isso não pode ser feito com a configuração atual.
wvxvw
O escape pode ser feito. Você pode tentar adaptar o regexp relevante org-bracket-link-regexppara lidar com isso, embora org-insert-linkainda queira substituir os colchetes por colchetes e isso possa ter outras ramificações.
politza 29/01
Ah, eu acabei de me lembrar disso \[e \]devo dar equações exibidas (como $$), não colchetes.
Omar

Respostas:

5

Uma solução funcional, porém não tão bonita, é usar as macros do modo organizacional .

As macros abaixo são substituídas pelos códigos ASCII do [e ]ao exportar para 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}}}]]

Referência

Kaushal Modi
fonte
Obrigado, mas eu esperava convencer o modo org a renderizá-los como colchetes dentro do buffer. É claro que sua solução funciona para exportação.
Omar
Não funciona para exportação de HTML.
21418 Alex
3

Abaixo está a versão modificada da org-make-link-regexpqual permitirá um nível de aninhamento de colchetes dentro da descrição:

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

Mas, como observado acima, isso não resolve o problema de editar links (a organização ainda desejará substituir colchetes por colchetes.) Isso também pode lidar apenas com um nível de aninhamento de um grupo entre colchetes.

wvxvw
fonte