我正在使用自定义 bst 文件,它在 bbl 文件中生成如下代码:
\bibitem[Fodor(1981)]{Fodor:Representations}
\stepcounter{bibitem}
% \theperpage \lastpage % debugging code
\ifthenelse{\equal{\theperpage}{\lastpage}}
{\pageswitchfalse}{\pageswitchtrue}\ifthenelse{\isodd{0\theperpage}}
{\rule[0.5ex]{2em}{1pt}} {\ifpageswitch{Fodor, J.}\else
\rule[0.5ex]{2em}{1pt}\fi}\let\lastpage=\theperpage{}
% \theperpage \lastpage % debugging code
(1981).
\newblock {\em Representations}.
\newblock Cambridge MA, MIT Press.
这样做的目的是 (i) 当作者与上一个条目中的作者相同时,打印规则而不是作者姓名,但 (ii) 如果条目出现在偶数页的顶部,则重新打印作者姓名。(我从 comp.text.tex 上的很多人那里得到了关于此代码的帮助。)
在用于以前的图书项目(十年前)时,此代码运行良好。现在它失败了。第一个条目没有重新打印作者姓名,而是第二个条目重新打印了作者姓名。因此,我得到了第一个条目(在偶数页上)的规则,然后是第二个条目(如果有的话)中的名字。
问题是每页计数器重置得比较晚。如果我激活调试代码,它会打印出以前的页面,而不是当前的每页计数器随即更新后该条目已完成,下一个条目将打印作者的姓名,因为 \equal 测试现在失败了。
我使用 natbib 是因为这是一些论文的集合,其中一些论文相当古老,然后使用 natbib 编写。我不想把所有内容都改成 biblatex,但我很好奇这个问题在那里是否更容易解决。
谢谢你的帮助。