在我的博士论文中,我必须在 中包含几页内容,frontmatter
披露一些章节已作为论文发表,包括对论文的引用。这些引用随后显示为[1]
、[2]
等,因为它们是第一个被使用的。
因此,在我的介绍中,第一个引用以 结尾[5]
。有没有办法强制 bibtex 实际上从介绍(在 中mainmatter
)开始对我的引用进行排序,以便这些引用从 开始[1]
,而 中的引用则frontmatter
计入最后?
我使用的unsrt
没有额外包的样式和report
文档类。
答案1
你应该能够使用
{\csname @fileswfalse\endcsname\cite{aaa}}
在你的前言中,然后
\nocite{aaa}
在最后。
这会在您需要的地方进行正常引用,但会停止将 bibcite 行写入 aux 文件。然后您需要\nocite
稍后写入 aux 文件并将条目放入生成的参考书目中。
答案2
您可以frontmatter
根据mainmatter
David 的想法进行修改:
\documentclass{book}
\usepackage{letltxmacro}
\makeatletter
\LetLtxMacro\@citexOrig\@citex
\g@addto@macro\frontmatter{%
\def\@citex[#1]#2{\leavevmode
\let\@citea\@empty
\@cite{\@for\@citeb:=#2\do
{\@citea\def\@citea{,\penalty\@m\ }%
\edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
% \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
\@ifundefined{b@\@citeb}{\hbox{\reset@font\bfseries ?}%
\G@refundefinedtrue
\@latex@warning
{Citation `\@citeb' on page \thepage \space undefined}}%
{\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}%
\AtEndDocument{\nocite{#2}}%
}%
}
\g@addto@macro\mainmatter{\LetLtxMacro\@citex\@citexOrig}
\makeatother
\usepackage{lipsum}
\begin{document}
\frontmatter
frontmatter Text \cite{article-full} and \cite{article-minimal}
\mainmatter
mainmatter Text \cite{book-full} and \cite{book-minimal}
\bibliography{xampl}
\bibliographystyle{unsrt}
\end{document}
当然,你可以通过重新定义\cite
\documentclass{book}
\usepackage{letltxmacro}
\makeatletter
\LetLtxMacro\citeOrig\cite
\g@addto@macro\frontmatter{%
\renewcommand*\cite[2][]{%
\ifx\relax#1\relax {\@fileswfalse\citeOrig{#2}}\else {\@fileswfalse\citeOrig[#1]{#2}}\fi%
\AtEndDocument{\nocite{#2}}%
}%
}
\g@addto@macro\mainmatter{\LetLtxMacro\cite\citeOrig}
\makeatother
\usepackage{lipsum}
\begin{document}
\frontmatter
frontmatter Text \cite{article-full} and \cite{article-minimal}
\mainmatter
mainmatter Text \cite{book-full} and \cite{book-minimal}
\bibliography{xampl}
\bibliographystyle{unsrt}
\end{document}
这两种解决方案均基于 David 提供的想法。