LINUX.ORG.RU

Emacs org-mode. Заморочки с символами , и ~

 ,


1

1

Есть такие проблемные места при выделении некоторых фраз:

  • ~,~ и =,= - не экспортируются и не подсвечиваются в емаксе и гитхабе нормально
  • ~~/.local/bin/run_it~ - не подсвечивается в емаксе и гитхабе нормально. В html экспортируется.

Сравните с ~.~, =.= и ~vim ~/.local/bin/run_it~, которые и экспортируются и подсвечиваются нормально.

Как пофиксить проблемные места? Очень раздражает эта неоднородность

Deleted

Use entities, Luke!

info '(org) Special symbols'

tl;dr: можно вставлять специальные символы, используя LaTeX-подобный синтаксис. Чтобы вставить тильду, нужно ввести \tilde{}, запятую — \sbquo{}. Список всех специальных символов находится в переменной org-entities.

Можно включить отображение entities в виде символов UTF-8, выполнив команду C-c C-x \. Также можно включить такое отображение по умолчанию с помощью переменной org-pretty-entities либо для отдельного Org-файла с помощью #+STARTUP опции entitiespretty.

Спонсор этого ответа — запрос google://orgmode+markup+escape+characters.

theNamelessOne ★★★★★
()
Ответ на: Use entities, Luke! от theNamelessOne

Убавь гонора,

Text in the code and verbatim string is not processed for Org mode specific syntax, it is exported verbatim.

Не катит, попробуй сам. Например, \tilde тупо не раскрывается внутри code и verbatim

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)

Это трындец. http://lists.gnu.org/archive/html/emacs-orgmode/2010-04/msg00330.html

U200B (ZERO WIDTH SPACE) - юникодный невидимый символ нам поможет

C-x 8 RET 200b RET, в разные места, и у меня заработало

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

У кого еще мысли есть на этот счет, может?

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

С запятой помог этот ответ: внутри code или verbatim окружаешь запятую ZERO WIDTH SPACE. Увы, тильду внутри code так ввести не получится.

Однако, следующий ответ в той же теме натолкнул на лучшее решение: можно написать фильтр, который будет преобразовывать entities при экспорте:

(require 'ox)
(require 'ox-ascii)
(require 'rx)

(defconst PtiCa:entity-regex
  (rx "\\"
      (group (one-or-more word))
      (or "{}" word-boundary)))

(defvar PtiCa:backend-entity-position-alist
  '((latex . 1)
    (html . 3)
    (ascii . 4)
    (latin1 . 5)
    (utf-8 . 6)))

(defun PtiCa:export-entities-in-code/verbatim (contents backend info)
  (when (eq backend 'ascii)
    (setf backend (or (plist-get info :ascii-charset)
                      org-ascii-charset)))
  (let* ((pos (cdr (assq backend PtiCa:backend-entity-position-alist)))
         (rep (lambda (match)
                (let* ((entity (match-string 1 match))
                       (entity-spec (assoc entity org-entities))
                       (replacement (nth pos entity-spec)))
                  (or replacement match)))))
    (replace-regexp-in-string PtiCa:entity-regex rep contents t t)))

(add-to-list 'org-export-filter-code-functions
             #'PtiCa:export-entities-in-code/verbatim)
(add-to-list 'org-export-filter-verbatim-functions
             #'PtiCa:export-entities-in-code/verbatim)

Особо не проверял, но этот код должен работать для html-, ascii-, latex-бэкендов + его можно расширить для кастомных бэкендов, модифицируя PtiCa:backend-entity-position-alist и org-entities.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)
Ответ на: комментарий от theNamelessOne

Спасибо!

Кстати, ~<U+200B>~<U+200B>~ - такая конструкция у меня работает.

можно написать фильтр, который будет преобразовывать

О, погляжу , интересно

Deleted
()
Ответ на: комментарий от theNamelessOne

:) ход мысли совпадает. Уже добавлена

Deleted
()
Ответ на: комментарий от Deleted

Кстати, ~<U+200B>~<U+200B>~ - такая конструкция у меня работает.

Да, действительно, у меня тоже работает. Когда я пробовал в первый раз, наверное, что-то не так сделал.

theNamelessOne ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.