Я создаю проекты документов в режиме org и экспортирую их в LaTeX, HTML и т. Д. По мере необходимости. Я часто использую тэг :no_export:
всякий раз, когда не хочу, чтобы определенное поддерево отображалось в выходных данных.
Я также хочу, чтобы экспорт полностью игнорировал определенные заголовки поддерева , но не игнорировал содержимое поддерева под этим заголовком. Другими словами, некоторые поддеревья должны экспортироваться так, как если бы их содержимое было просто продолжением родительского объекта, а не имело свое собственное поддерево.
Я идеально представляю себе тег как :no_title:
. Я хочу, чтобы мой контур в режиме org выглядел более или менее так, как я привык. Но я бы рассмотрел другие подходы с похожими результатами.
Для иллюстрации приведем MWE документа, созданного в режиме org.
* Chapter 1
** Section 1
*** Paragraph 1 :no_title:
First paragraph of text in the section.
*** Paragraph 2 :no_title:
Second paragraph of text in the section.
* Chapter 2
** Section 1
*** Subsection 1
**** Paragraph 1 :no_title:
First paragraph of text in the subsection.
**** Paragraph 2 :no_title:
Second paragraph of text in the subsection
Когда я экспортирую это в настоящее время, я получаю что-то вроде этого:
1 глава 1
1.1 Раздел 1
1.1.1 Пункт 1: no_title:
Первый абзац текста в разделе.
1.1.2 Пункт 2: no_title:
Второй абзац текста в разделе.
2 Глава 2
2.1 Раздел 1
2.1.1 Подраздел 1
◊ 2.1.1.1 Пункт 1: no_title:
Первый абзац текста в подразделе.
Но то, что я хочу, больше похоже на это:
1 глава 1
1.1 Раздел 1
Первый абзац текста в разделе.
Второй абзац текста в разделе.
2 Глава 2
2.1 Раздел 1
2.1.1 Подраздел 1
Первый абзац текста в подразделе.
источник
contrib/lisp
папке - см. Orgmode.org/cgit.cgi/org-mode.git/tree/contrib/lisp/ox-extra.el - в вашем конфигурационном файле emacs вам может понадобиться добавить строку вроде(add-to-list 'load-path "/path/to/contrib/lisp")
,Да , это вполне возможно. Добавьте следующий код в ваш init-файл:
Подтверждения
Этот вопрос задавался ранее в StackOverflow (с другой направленностью и формулировкой, поэтому, вероятно, вы не смогли найти его, когда искали в интернете перед публикацией здесь). Код выше является упрощенной версией кода в принятом ответе ; он работает для нового экспортера, представленного в
org-mode
8.0, и не зависит от сервера .Обновить
Как обсуждалось в комментариях, приведенный выше код приводит к тому, что содержимое записей, помеченных значком,
:no_title:
исчезает, если им предшествует запись, помеченная для исключения из экспортируемого документа. Например, при экспорте следующего документа будет создан документ с заголовком и оглавлением, но без содержимого:Причина этого заключается в том, что
org-mode
удаляет заголовок с тэгом ,:no_title:
прежде чем она удаляет запись , чей заголовок помечен:no_export:
. В результате, когда он добирается до удаленияno_export
записи, он рассматривает содержимоеno_title
записи как принадлежащее предыдущейno_export
записи. Это имеет смысл, потому что больше нет структурного элемента (заголовка), который больше разделяет содержимое исходных записей.Чтобы решить эту проблему, мы можем передать ответственность за удаление
no_export
записей наorg-remove-headlines
. Таким образом, мы уберегаем всеno_export
записи до того, как заголовки будут удалены изno_title
записей:источник
no_export
заголовком, предшествует одному, помеченному заголовкомno_title
, то содержимое второго заголовка также не экспортируется.no_export
иno_title
сестры братьями и сестрами (т.е. имеют ли они одинаковое количество ведущих звезд)? Если нет, то в каком из двух заголовков больше звезд?org-remove-headlines
это просто функция; это не очень поможет, если его никогда не вызывать откуда угодно. Так что да, вам все равно нужно оценить строку,(add-hook 'org-export-before-processing-hook #'org-remove-headlines)
чтобы включить правильное поведение. Я, вероятно, должен был быть явно об этом в редактировании моего первоначального ответа. Что касается предупреждений, которые вы видите: я не получаю те с ванильным Emacs 24.4 и версией 8.2.10 режима Org. Чтобы избавиться от предупреждения, которое вы упоминаете, вы можете попытаться сделать это(require 'org-agenda)
перед оценкойadd-hook
строки.