Избегайте проглатывания \ printbibliography заголовками в режиме Org - PullRequest
9 голосов
/ 04 февраля 2012

При использовании Org-режима и его экспорта в LaTeX BibTeX или Biblatex часто используются для обработки ссылок.В этом случае команда LaTeX \printbibliography часто включается в файл org.\printbibliography помещается в файл org, где LaTeX должен выписать список ссылок.\printbibliography делает вставку заголовка LaTeX вместе со списком ссылок.В большинстве случаев \printbibliography помещается в конец файла org просто потому, что в большинстве документов список ссылок должен быть последним.Это означает, что \printbibliography будет включен под последним заголовком в файле org, например,

* Heading

  \printbibliography

Это также означает, что при сложении этого заголовка \printbibliography будет проглочен:

* Heading...

Но это идет вразрез со значением \printbibliography, поскольку оно включает в себя собственный заголовок в выходных данных.Кроме того, это будет сбивать с толку, когда \printbibliography проглатывается и после него помещается новый заголовок, потому что тогда список ссылок больше не будет отображаться последним в документе.

Как сделать так, чтобы \printbibliographyне проглатывается разделами в орг-режиме?Дополнительный вопрос: как сделать так, чтобы режим Org не создавал заголовки после \printbibliography, если только C-Ret не нажата, когда курсор находится после него?

В поискеЯ нашел решение этой проблемы http://comments.gmane.org/gmane.emacs.orgmode/49545.

Ответы [ 5 ]

3 голосов
/ 16 февраля 2012

Обходной путь для этой проблемы - заставить \printbibliography не возвращать заголовок LaTeX, чтобы его можно было соответствующим образом поместить под заголовок режима Org.

С biblatex это можно сделать, указав \printbibliography с опцией heading=none и поместив ее под соответствующим заголовком. Вот пример:

* Heading

* References

  \printbibliography[heading=none]

Таким образом, ссылки могут храниться в отдельном заголовке, и \printbibliography проглатывание заголовком не является проблемой, поскольку оно проглатывается собственным заголовком.

1 голос
/ 16 февраля 2012

Следующее слегка протестировано, но работает для меня, используя tab и shift-tab для скрытия и отображения вещей. Это единственные команды скрытия и отображения, которые я использую, поэтому, если вы используете другие команды, их, возможно, придется посоветовать или исправить каким-либо другим способом.

Вы, конечно, можете изменить org-footer-regexp на что угодно. Я надеялся, что мне не придется использовать какой-либо совет, но без указания org-end-of-subtree последний заголовок никогда не циклически повторяется с табуляцией, потому что он думает, что он не скрыт, поэтому он скрывает его, а затем org-cycle-hook показывает его. Он вызывает org-end-of-subtree перед запуском org-pre-cycle-hook, так что это тоже не вариант.

(defvar org-footer-regexp "^\\\\printbibliography\\[.*\\]$"
  "Regexp to match the whole line of the first line of the footer which should always be shown.")

(defun show-org-footer (&rest ignore)
  (save-excursion
    (goto-char (point-max))
    (when (re-search-backward org-footer-regexp nil t)
      (outline-flag-region (1- (point)) (point-max) nil))))

(add-hook 'org-cycle-hook 'show-org-footer)
(add-hook 'org-occur-hook 'show-org-footer)

(defadvice org-end-of-subtree (after always-show-org-footer
                                     ()
                                     activate)
  (when (>= (point) (1- (point-max)))
    (re-search-backward org-footer-regexp nil t)
    (setq ad-return-value (point))))
1 голос
/ 04 февраля 2012

Одним из решений будет следующее:

#+macro: printbiblio        (add extra spaces here, but cannot add comment)

* Test 2
  This is a test

* {{{printbiblio}}}
  Test text
  \printbibliography
* 
  asdf

Таким образом, вы получите пустой заголовок внизу документа.Макрос расширяется до пустого блока текста, поэтому вы получаете

\section{Test 2}
\label{sec-1}

This is a test
\section{}

Test text
\printbibliography
\section{}

asdf

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

0 голосов
/ 20 января 2017
* References
  :PROPERTIES:
  :UNNUMBERED: t
  :END:

   \printbibliography[heading=none]

Существует более простой способ решить эту проблему. Просто добавьте «ненумерованные» свойства в заголовок, и он будет экспортирован без нумерации.

0 голосов
/ 27 ноября 2014

Другим решением было бы поместить библиографию под заголовком «Ссылки» следующим образом:

* Heading
Some text
* References
\printbibliography

и удалите \section{References} из полученного латексного файла, добавив его в файл инициализации emacs

(defun org-export-latex-remove-references-heading (contents backend info)
    (if (not (eq backend 'latex))
        contents
      (replace-regexp-in-string "\\\\section\\*?{References}\\s-*\\\\label{.*?}" "" contents)
      ))

(add-hook 'org-export-filter-final-output-functions 'org-export-latex-remove-references-heading)

Обратите внимание, что это предполагает, что у вас есть только один заголовок с именем "Ссылки", поскольку он заменяет все его вхождений. Также предполагается, что разделы имеют следующий формат:

\section{References}
\label{<any_string>}
\printbibliography

Для других форматов вам нужно изменить регулярное выражение в функции org-export-latex-remove-references-heading.

...