在 latex 生成的 aux 文件中,我看到以下行:
\newlabel{LastBibItem}{{30}{10}{}{}{}}
我怎样才能将 30(引用总数)拉入另一篇文档序言中的计数器中?
以下是一个示例文档:
\documentclass{article}
\usepackage[numbers]{natbib}
\usepackage{etoolbox}
\makeatletter
\apptocmd{\thebibliography}{\global\c@NAT@ctr 30\relax}{}{}
\makeatother
\begin{document}
Here we cite reference \citealp{firstCite}.
\begin{thebibliography}{99}
\bibitem{firstCite} Dow, W. \& Jones, E.A.,
{\it Wall Street Journal},
March 29, 1929.
\end{thebibliography}
\end{document}
在该文档上运行pdflatex
,句子显示“我们在此引用参考文献 31”。我怎样才能用解析其他文档中的辅助文件获取的数字替换30
行上的?(或者,有什么替代方法可以将参考计数移位另一个文档的参考书目中的项目数?)。(编辑:我觉得应该可以将的内容复制到我的文档的序言中,并且只需进行小幅更改即可在找到时增加计数器,但到目前为止,我自己还无法正确使用语法)。\apptocmd
LastBibItem
xcite.sty
\bibcite
\XC@test
我会解释为什么我尝试这样做,以防有其他解决方案或有人尝试做同样的事情时发现这一点。我正在尝试为另一份文档创建补充,该补充继续主文档的参考书目编号,但重新开始标签编号(并在标签前添加“S”)。我使用和xr
包xcite
来引用原始文档的标签和引文。我使用包中的命令etoolbox
将 natbib 参考书目编号移动到正确的起始值(我不完全理解该命令——我只是从网上的另一个答案中获取的)。所以这是我序言的相关部分:
\usepackage[numbers]{natbib}
\def\maindoc{mymaindoc}
\usepackage{xr}
\externaldocument{\maindoc}
\usepackage{xcite}
\externalcitedocument[M-]{\maindoc}
\renewcommand{\thefigure}{S\arabic{figure}}
\usepackage{etoolbox}
\makeatletter
\apptocmd{\thebibliography}{\global\c@NAT@ctr 30\relax}{}{}
\makeatother
是mymaindoc.tex
我的主文档,并且mymaindoc.aux
已经创建。这很好用,文档中的引用编号从 31 开始。我只想从辅助文件中读取 LastBibItem 编号,这样我就不必手动更新它了。我不知道这是否重要,但我希望该解决方案能够与 pdflatex、natbib 和 bibtex 一起使用,因为这些是我现在使用的。
答案1
好的,在反复尝试语法之后,我终于可以开始工作了,方法是修改代码xcite
(循环遍历辅助文件以提取所有\bibcite
项目),以便只计算\bibcite
辅助文件中的项目数量。这是我修改后的示例文档版本,在以 开头的行之间添加了代码%%
。我没有太多编写 TeX 宏的经验,因此我非常欢迎任何改进建议。
\documentclass{article}
\usepackage[numbers]{natbib}
\newcount\bibcounter
\bibcounter=0
%% start citation counting
\def \maindoc {mymaindoc}
\newread\auxfile
\openin\auxfile = \maindoc .aux
\long\def\bibcitecheck#1#2\bibcitecheckstop{%
\ifx#1\bibcite
\advance \bibcounter by 1
\fi
}
\newif\ifnoteof
\loop
\read\auxfile to \holder
\ifeof\auxfile
\noteoffalse
\else
\expandafter\bibcitecheck\holder...\bibcitecheckstop
\noteoftrue
\fi
\ifnoteof
\repeat
\closein\auxfile
%% End citation counting
\usepackage{etoolbox}
\makeatletter
\apptocmd{\thebibliography}{\global\c@NAT@ctr \bibcounter\relax}{}{}
\makeatother
\begin{document}
Here we cite reference \citealp{firstCite}.
\begin{thebibliography}{99}
\bibitem{firstCite} Dow, W. \& Jones, E.A.,
{\it Wall Street Journal},
March 29, 1929.
\end{thebibliography}
\end{document}