我正在使用 multibib 包来区分不同类型的参考文献。在我的文档中,第一个参考文献列表中有大约 50 个参考文献,第二个参考文献列表中有大约 70 个参考文献。参考文献的编号工作正常,但格式会随着参考文献编号 100 而改变。我创建了一个 MWE 来隔离主要问题:最大标签长度似乎仅由一个参考文献列表中的元素数量提取。
在这个例子中,一切正常,因为我在第二个参考文件中有 100 个参考:
\documentclass[12pt]{scrbook}
\usepackage{cite}
\usepackage{multibib}
\usepackage[fixlanguage]{babelbib}
\usepackage[german]{babel}
\selectbiblanguage{german}
\newcites{mine}{FooBar}
\begin{document}
\citemine{A1}
\cite{A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,A30,A31,A32,A33,A34,A35,A36,A37,A38,A39,A40,A41,A42,A43,A44,A45,A46,A47,A48,A49,A50,A51,A52,A53,A54,A55,A56,A57,A58,A59,A60,A61,A62,A63,A64,A65,A66,A67,A68,A69,A70,A71,A72,A73,A74,A75,A76,A77,A78,A79,A80,A81,A82,A83,A84,A85,A86,A87,A88,A89,A90,A91,A92,A93,A94,A95,A96,A97,A98,A99,A100}
\bibliographystylemine{babplain-Customized}
\bibliographymine{references}
\bibliographystyle{babplain-Customized}
\bibliography{references}
\end{document}
结果如下
在这个例子中我遇到了一个问题,因为第二个参考文件中的参考文献少于 100 个:
\documentclass[12pt]{scrbook}
\usepackage{cite}
\usepackage{multibib}
\usepackage[fixlanguage]{babelbib}
\usepackage[german]{babel}
\selectbiblanguage{german}
\newcites{mine}{FooBar}
\begin{document}
\citemine{A1}
\cite{A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,A30,A31,A32,A33,A34,A35,A36,A37,A38,A39,A40,A41,A42,A43,A44,A45,A46,A47,A48,A49,A50,A51,A52,A53,A54,A55,A56,A57,A58,A59,A60,A61,A62,A63,A64,A65,A66,A67,A68,A69,A70,A71,A72,A73,A74,A75,A76,A77,A78,A79,A80,A81,A82,A83,A84,A85,A86,A87,A88,A89,A90,A91,A92,A93,A94,A95,A96,A97,A98,A99,A100}
\bibliographystylemine{babplain-Customized}
\bibliographymine{references}
\bibliographystyle{babplain-Customized}
\bibliography{references}
\end{document}
结果如下
我的辅助文件看起来不错,据我对 bst 文件的理解,我预计最长的标签(即 100)会被识别。但从 MWE 来看,条目似乎是经过计数来确定最长标签的。
有谁知道如何欺骗 bibtex 来获得漂亮且干净的参考列表格式吗?
您将找到 bst 文件这里
您将找到参考文件这里
答案1
好的,我自己找到了解决方案。如果有人遇到同样的问题,以下是我的解决方案:
首先,我发现使用 plain 时会出现问题,但使用 mblain 时一切正常。关于标签宽度的确定,差异如下
在 plain.bst 中它显示
FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
number.label #1 + 'number.label :=
label width$ longest.label.width >
{ label 'longest.label :=
label width$ 'longest.label.width :=
}
'skip$
if$
}
在 mbplain.bst 中,它读取
FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
number.label #1 + 'number.label :=
label width$ longest.label.width >
label width$ longest.label.width = %% added to count the labels
or %% added to count the labels
{ label 'longest.label :=
label width$ 'longest.label.width :=
}
'skip$
if$
}
虽然 plain.bst 计算了其中一个参考书目中的实际条目数,但最终结果为两位数。mbplain.bst 仅搜索最长的标签,即三位数。
因此,在我的 bst 文件中,我只需用第二个版本替换函数 longest.label.pass ,一切就正常运行。