Posso creare collegamenti in modalità Org che contengono parentesi quadre, [o]?


13

Esiste un modo per sfuggire alle parentesi ( [e ]) in modo che possano essere incluse nella descrizione di un collegamento in modalità Org? Il seguente collegamento non funziona, ad esempio:

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

Speravo che usare una barra rovesciata ( \[) avrebbe funzionato o che ci sarebbe stata un'entità org, ma questo non sembra essere il caso.


1
Il problema è che i collegamenti in Org vengono analizzati utilizzando espressioni regolari e questa attività equivale alla ricorsione, che non può essere analizzata con espressioni regolari. Se si desidera aggiungere solo un livello di ricorsione, ciò sarebbe possibile mediante l'applicazione di patch org-make-link-regexps, ma in generale ciò non può essere eseguito con l'impostazione corrente.
wvxvw,

La fuga può essere fatta. Potresti provare ad adattare il regexp pertinente org-bracket-link-regexpper gestirlo, anche se org-insert-linkdesidera comunque sostituire le parentesi con parentesi graffe e potrebbe avere altre ramificazioni.
politza,

Oh, me lo sono appena ricordato \[e \]si suppone che dia equazioni visualizzate (come $$), non parentesi sfuggite.
Omar,

Risposte:


5

Una soluzione funzionante, anche se non così carina, è utilizzare la modalità organizzazione Macro .

Le macro seguenti sono sostituite dai codici ASCII del [e ]durante l'esportazione in 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}}}]]

Riferimento


Grazie, ma speravo di convincere la modalità org a renderli come parentesi all'interno del buffer. Ovviamente la tua soluzione funziona per l'esportazione.
Omar,

Non funziona per l'esportazione HTML.
Alex

3

Di seguito è riportata la versione modificata org-make-link-regexpche consentirà un livello di nidificazione di parentesi quadre all'interno della descrizione:

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

Ma come notato sopra, questo non risolve il problema della modifica dei collegamenti (l'Org vorrà comunque sostituire le parentesi con parentesi graffe.) Questo può anche gestire solo un livello di annidamento di un gruppo tra parentesi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.