Могу ли я сделать ссылки в режиме Org, которые содержат скобки, [или]?


13

Есть ли какой-нибудь способ избежать скобок ( [и ]), чтобы их можно было включить в описание ссылки в режиме Org? Следующая ссылка не работает, например:

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

Я надеялся, что использование обратной косой черты ( \[) сработает или будет существовать организационная сущность, но, похоже, это не так.


1
Проблема в том, что ссылки в Org анализируются с помощью регулярных выражений, и эта задача будет эквивалентна рекурсии, которую нельзя проанализировать с помощью регулярных выражений. Если вы хотите добавить только один уровень рекурсии, это можно будет сделать с помощью исправлений org-make-link-regexps, но в целом это невозможно сделать с текущей настройкой.
wvxvw

Бегство может быть сделано. Вы можете попытаться адаптировать соответствующее регулярное выражение org-bracket-link-regexpдля обработки этого, хотя org-insert-linkвсе еще хотите заменить скобки скобками, и это может иметь другие последствия.
политза

О, я только что вспомнил об этом \[и \]должен давать отображаемые уравнения (вроде $$), а не экранированные скобки.
Омар

Ответы:


5

Рабочим решением, хотя и не таким привлекательным, является использование макросов в режиме орг .

Приведенные ниже макросы заменяются кодами ASCII [и ]при экспорте в HTML или латекс.

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

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

Ссылка


Спасибо, но я надеялся убедить org-mode отобразить их в виде скобок внутри буфера. Ваше решение, конечно, работает на экспорт.
Омар

Не работает для экспорта HTML.
Алекс

3

Ниже приведена модифицированная версия, org-make-link-regexpкоторая позволит использовать один уровень вложенности квадратных скобок внутри описания:

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

Но, как отмечалось выше, это не решает проблему редактирования ссылок (Org по-прежнему захочет заменить скобки скобками.) Это также может обрабатывать только один уровень вложенности одной группы в скобках.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.