我想要使用 biblatex 按出现顺序对数字样式的引用进行排序。
但是:我想在正文之前添加引文,例如在命名法中或在标题封底页上,而不影响排序顺序(这意味着我的标题封底引文不一定是 [1])。所有引文都将再次出现在正文中。
我可以使用 biblatex 实现该功能吗?例如,使用以下命令...
- 允许引用,但对“出现顺序”不可见,或者
- 在主要内容之前重置引用列表的命令?
MWE:(“主要内容”中的引用应为[1] ... [4])
\documentclass{article}
\usepackage[
style=numeric,
sorting=none
]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
The title picture shows the original cover of
Aristotles' poetics \cite{aristotle:poetics}. \\
Nomenclature: four --- said by Augustine \cite{augustine}. \\
Mainmatter: \\
Aksin~\cite{aksin} says one in his article.
Aristotle~\cite{aristotle:poetics} says two in his book.
Angenendt~\cite{angenendt} says three in his article.
And Augustine \cite{augustine} says four in his book.
\printbibliography
\end{document}
编辑:
发现了一个丑陋的黑客,但并不真正算作解决方案:
我插入
\makeatletter
\immediate\write\@mainaux{\@percentchar mainmatterstartshere}
\makeatother
主要内容从哪里开始,并在运行 bibtex 之前使用外部脚本杀死\citation{...}
前面的 aux 文件中的所有命令(除了这\citation{biblatex-control}
似乎不是一个好主意)。
答案1
虽然这是可以接受的答案,但使用这个答案反而
这是一个解决方案,虽然它需要一些手动干预,但它比外部脚本解决方案更少黑客攻击。此外,正如我在最后展示的那样,我们可以很容易地实现自动化。
解决方案涉及(滥用)使用\mancite
来自的命令biblatex
,该命令为使用等的方案提供了一种手动引用的方法ibid
。诀窍是,如果在您第一次编译(运行之前biber
)时在前言中使用\mancite
,那么您可以在后续编译中将其重新定义为,\cite
并使用主要内容中的正确数字。
唯一的缺点是要记住执行此操作,但由于这实际上只对文档的最终编译有影响,因此可能不是太大的问题。或者,您可以使用 来自动执行整个过程arara
。
\documentclass{article}
\usepackage[
style=numeric,
sorting=none,
]{biblatex}
\let\mancite=\cite % comment this line out for your initial compilation
\addbibresource{biblatex-examples.bib}
\begin{document}
The title picture shows the original cover of
Aristotles' poetics \mancite{aristotle:poetics}.
Nomenclature: four --- said by Augustine \mancite{augustine}.
Mainmatter:
Aksin~\cite{aksin} says one in his article.
Aristotle~\cite{aristotle:poetics} says two in his book.
Angenendt~\cite{angenendt} says three in his article.
And Augustine \cite{augustine} says four in his book.
\printbibliography
\end{document}
自动化解决方案
通过出色的自动化工具,arara
实际上可以很容易地使此解决方案更加自动化。我们使用了这个答案加上arara
来更改第一个之后的编译中的 的定义\mancite
。您需要将其替换<basename>
为源文件的名称(不带.tex
扩展名)。然后使用 编译该文件arara
。
% arara: pdflatex: { files: [ '\def\mmcite{}\input{<basename>}' ] }
% arara: biber
% arara: pdflatex: { files: [ '\def\mmcite{\let\mancite=\cite}\input{<basename>}' ] }
\documentclass{article}
\usepackage[
style=numeric,
sorting=none,
]{biblatex}
\addbibresource{biblatex-examples.bib}
\mmcite % this command is defined when pdflatex is invoked
\begin{document}
The title picture shows the original cover of
Aristotles' poetics \mancite{aristotle:poetics}.
Nomenclature: four --- said by Augustine \mancite{augustine}.
Mainmatter:
Aksin~\cite{aksin} says one in his article.
Aristotle~\cite{aristotle:poetics} says two in his book.
Angenendt~\cite{angenendt} says three in his article.
And Augustine \cite{augustine} says four in his book.
\printbibliography
\end{document}
感谢 Paulo Cereda 对arara
代码的帮助。
答案2
如果可以保证在正文之前引用的作品也会在正文中被引用,那么解决这个问题的一个快速简便的方法就是citerequest
在正文之前将布尔值设置为 false。这样biblatex
就不会将正文之前的引用发送到 Biber(意味着它们不会影响排序)。
这种方法也体现在从文档中间开始按出现顺序对参考文献进行排序,引用不计入未分类参考书目中和制作一个不修改主要参考文献顺序的预备章节。
\documentclass{article}
\usepackage[
style=numeric,
sorting=none
]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\begingroup
\boolfalse{citerequest}
The title picture shows the original cover of
Aristotles' poetics \cite{aristotle:poetics}.
Nomenclature: four --- said by Augustine \cite{augustine}.
\endgroup
Mainmatter:
Aksin~\cite{aksin} says one in his article.
Aristotle~\cite{aristotle:poetics} says two in his book.
Angenendt~\cite{angenendt} says three in his article.
And Augustine \cite{augustine} says four in his book.
\printbibliography
\end{document}