Существует ли эквивалент B ignoreheading в Орг-режиме для документов, не являющихся бимерами?
При использовании Org-mode для создания представления бимера можно задать свойство заголовка таким образом, чтобы экспортируемый заголовок не отображался, а только его содержимое. Например, следующее
#+title: Test
#+options: toc:nil
#+latex_class: beamer
#+startup: beamer
#+BEAMER_FRAME_LEVEL: 2
* Ignored heading :B_ignoreheading:
:PROPERTIES:
:BEAMER_env: ignoreheading
:END:
Text
Результат в рамке с "текстом" только и без заголовка. Доступна ли такая функциональность для документов, не являющихся бимерами? То есть можно ли сказать Org-mode, чтобы он экспортировал не заголовок, а только его содержимое? Например, можно ли сделать орг-режим экспортируйте следующие
#+title: Test
* Ignored heading
Text
Без экспорта заголовка "игнорируемый заголовок", но только "текст"?
Если я экспортирую
#+title: Test
*
Text
(Обратите внимание на пробел после *
) к LaTeX я получаю следующее (Я включил только соответствующую часть):
section{}
Text
, но это не то, чего я хочу. Я хочу, чтобы заголовок был полностью проигнорирован в экспорте, чтобы я получил следующее (опять же, я включаю только соответствующую часть):
Text
3 ответа:
Нет поддержки по умолчанию для того, что вы просите. Однако вы можете использовать предпроцессный крюк для получения аналогичного вывода. Вот пример экспорта латекса:
;; backend aware export preprocess hook (defun sa-org-export-preprocess-hook () "My backend aware export preprocess hook." (save-excursion (when (eq org-export-current-backend 'latex) ;; ignoreheading tag for bibliographies and appendices (let* ((tag "ignoreheading")) (org-map-entries (lambda () (delete-region (point-at-bol) (point-at-eol))) (concat ":" tag ":")))))) (add-hook 'org-export-preprocess-hook 'sa-org-export-preprocess-hook)
Это фрагмент из моей настройки режима организации. Вы можете увидеть оригинал на github . Приведенный выше код игнорирует заголовки, помеченные
ignoreheading
, например* Heading 1 * Heading 2 :ignoreheading: + Some text + an item
Экспортируется как:
\section{Heading 1} \label{sec-1} \begin{itemize} \item Some text \item an item \end{itemize}
Предостережение: существует известная проблема с этим решением. Оно не работает, когда вы пробуете это на самом первом заголовок. Я не поймите, почему это так, надеюсь, когда-нибудь у меня будет время, чтобы исследовать.
Обходной путь к оговорке: вышеуказанное ограничение может быть обход для экспорта LaTeX с помощью строки, подобной этой, После организации заголовок файла:
\include{preamble.tex}
Файл
preamble.tex
может содержать такие разделы, как реферат или выражение благодарности. Однако вы должны заметить, что это делает ваш файл организации очень тесно связан с экспортным бэкэндом. Это стало бы нетривиальным, чтобы экспортируйте один и тот же файл организации в Например, HTML.Примечание: для аналогичной настройки с новой структурой экспорта (Org 8.0 или выше), используйте следующее:
(defun sa-ignore-headline (contents backend info) "Ignore headlines with tag `ignoreheading'." (when (and (org-export-derived-backend-p backend 'latex 'html 'ascii) (string-match "\\`.*ignoreheading.*\n" (downcase contents))) (replace-match "" nil nil contents))) (add-to-list 'org-export-filter-headline-functions 'sa-ignore-headline)
Я нашел простое решение для Emacs 24.4.1 и Org-mode 8.2.10 на Debian Jessie, которое удаляет помеченные заголовки перед обработкой, поэтому он удаляет и их структурные узлы, а не только текст.
;; ignore_heading tag in Org mode, based on the manual and func docs (defun ignored-headlines-removal (backend) "Remove all headlines with tag ignore_heading in the current buffer. BACKEND is the export back-end being used, as a symbol." (org-map-entries (lambda () (delete-region (point) (progn (forward-line) (point)))) "ignore_heading")) (add-hook 'org-export-before-parsing-hook 'ignored-headlines-removal)
Я не делал его экспортным бэкендом, поскольку он не должен быть. Я также использовал тег
ignore_heading
, чтобы убедиться, что тегignoreheading
в Beamer export сохраняет свою функцию.Вот как я это обнаружил:
- я посмотрел документацию по крюку в Advanced раздел confuguration в руководстве по организации. Он содержит пример крючка, который игнорирует все заголовки, почти то, что мне нужно, но я должен был найти способ удалить только заголовки с тегом
ignore_heading
.- я просмотрел документацию функции
org-map-entries
(набравC-h f org-map-entries RET
в Emacs) и обнаружил, что ее необязательный второй аргументMATCH
является строкой соответствия в стиле повестки дня, которая также может соответствовать тегам.Этот опыт еще раз показал мне, что Emacs действительно является расширяемым редактор-документалист. РТФМ США.