9

当使用 Org-mode 及其 LaTeX 导出时,BibTeX 或 Biblatex 通常用于处理引用。在这种情况下,LaTeX 命令\printbibliography通常包含在 org 文件中。\printbibliography放置在 LaTeX 应该写出参考列表的 org 文件中。什么\printbibliography是与参考列表一起插入一个 LaTeX 标题。在大多数情况下\printbibliography,放在 org 文件的末尾只是因为在大多数文档中,参考列表放在最后。这意味着\printbibliography将包含在 org 文件的最后一个标题下,例如

* Heading

  \printbibliography

这也意味着当该标题被折叠时,\printbibliography将被吞下:

* Heading...

但这违背了的含义,\printbibliography因为它在输出中包含了自己的标题。此外,当\printbibliography被吞下并在其后放置一个新标题时会造成混淆,因为参考列表将不再出现在文档的最后。

我怎样才能使它\printbibliography不被 Org 模式中的部分吞噬?一个额外的问题:我怎样才能使 Org-mode 不创建标题,\printbibliography除非C-Ret当光标在它之后被按下?

在寻找解决这个问题的方法时,我发现了http://comments.gmane.org/gmane.emacs.orgmode/49545

4

5 回答 5

3

此问题的解决方法是\printbibliography不返回 LaTeX 标题,以便它可以适当地放置在 Org-mode 标题下。

使用biblatex可以通过提供\printbibliography选项heading=none并将其放在适当的标题下来完成。这是一个例子:

* Heading

* References

  \printbibliography[heading=none]

这种方式可以将引用保存在自己的标题中,并且\printbibliography被标题吞下不是问题,因为它正在被自己的标题吞下。

于 2012-02-16T10:55:15.557 回答
1

一种解决方案如下:

#+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)。

于 2012-02-03T22:07:24.650 回答
1

以下内容经过了轻微测试,但适用于我使用 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))))
于 2012-02-16T08:01:14.820 回答
0

另一种解决方案是将参考书目放在名为“参考”的标题下,如下所示:

* 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函数中的正则表达式。

于 2014-11-27T07:19:04.000 回答
0
* References
  :PROPERTIES:
  :UNNUMBERED: t
  :END:

   \printbibliography[heading=none]

有一种更简单的方法可以解决这个问题。只需在标题中添加一个“未编号”属性,它就会在没有任何编号的情况下导出。

于 2017-01-20T18:18:54.227 回答