我试图让方括号出现在 bibtex 中的年份字段内,但它们在输出中消失了。以下是我尝试过的方法:
year = {2000 [1939]}
year = {2000 \[1939\]}
year = {2000 {[}1939{]}}
预期输出为:
- 史密斯(2000[1939])
但我得到的却是:
- 史密斯(2000 - 1939)
我使用的是计算语言学协会 (ACL) 样式 (\bibliographystyle{acl}),它与 natbib 冲突。例如,可以在此处找到副本:
https://github.com/jonsafari/acl.bst/blob/master/acl.bst
我不确定如何提供 MWE - 我可以在这里粘贴整个 acl.bst,但它有 1300 行...抱歉,我是 tex 交换的新手!
这里有一个完整的包,其中包含一个可以重现此情况的示例文档:
http://coling2018.org/wp-content/uploads/2018/01/coling2018.zip
类似这样的条目会产生问题:
@Book{Smith2000,
title = {Some Book},
author = {W. E. Smith},
publisher = {Clarendon Press},
year = {2000 [1939]},
address = {Oxford}
}
答案1
考虑以下 MWE
\documentclass[11pt]{article}
\usepackage{coling2018}
\usepackage{times}
\usepackage{url}
\begin{filecontents}{\jobname.bib}
@Book{Smith2000,
title = {Some Book},
author = {W. E. Smith},
publisher = {Clarendon Press},
year = {2000 [1939]},
address = {Oxford}
}
\end{filecontents}
\begin{document}
\cite{Smith2000}
\bibliographystyle{acl}
\bibliography{\jobname}
\end{document}
产生.bbl
条目
\bibitem[\protect\citename{Smith}2000 1939]{Smith2000}
W.~E. Smith.
\newblock 2000 [1939].
\newblock {\em Some Book}.
\newblock Clarendon Press, Oxford.
和输出
罪魁祸首是 ll. 1100-1103acl.bst
"\protect\citename{" swap$ * "}" *
year field.or.null purify$ *
'label :=
year field.or.null purify$ *
具体来说,您看到的行为是由 引起的purify$
。该函数(第 7 页设计 BibTeX 样式)
删除除空格字符、连字符和连线(这些都会转换为空格)之外的非字母数字字符,[并且] 删除与“特殊字符”相关的控制序列中包含的某些字母字符
因此,由于您的年份字段被删除,purify$
因此它失去了括号。这意味着我们需要停止acl.bst
净化您的year
。然而,这还不够,因为使用原始年份,您最终会得到
\bibitem[\protect\citename{Smith}2000 [1939]]{Smith2000}
W.~E. Smith.
\newblock 2000 [1939].
\newblock {\em Some Book}.
\newblock Clarendon Press, Oxford.
在 中.bbl
,这将导致错误,因为我们不能在可选参数中使用不受保护的方括号,请参见] 位于可选参数内。因此我们需要为全年的比赛做好准备。
您必须修改.bst
样式才能获得所需的输出。对于纸质提交,这可能不是最好的主意,因为您可能无法发送修改后的文件,但如果将其发送或粘贴到文档中,.bst
它就会起作用。.bbl
- 复制
acl.bst
到 TeX 可以找到的位置。文档目录就可以了。 - 将文件重命名为
acl-rawyear.bst
打开文件并找到函数
FUNCTION {calc.label}
,替换其第二个块(ll. 1100-1103)"\protect\citename{" swap$ * "}" * year field.or.null purify$ * 'label := year field.or.null purify$ *
和
"\protect\citename{" swap$ * "}" * "{" * year field.or.null * "}" * 'label := label *
在文件顶部的注释中添加您的姓名和日期并解释修改。
在您的文档中使用
\bibliographystyle{acl-rawyear}
而不是。\bibliographystyle{acl}
现在
%\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Book{Smith2000,
title = {Some Book},
author = {W. E. Smith},
publisher = {Clarendon Press},
address = {Oxford},
year = {2000 [1939]},
}
@Book{elk:bronto,
title = {Bronto},
author = {Anne Elk},
publisher = {Clarendon Press},
address = {Oxford},
year = {1972},
}
@Book{elk:trice,
title = {Triceratops},
author = {Anne Elk},
publisher = {Clarendon Press},
address = {Oxford},
year = {1972},
}
@Book{elk:ptero,
title = {Pterodactylus},
author = {Anne Elk},
publisher = {Clarendon Press},
address = {Oxford},
year = {1973},
}
\end{filecontents}
\documentclass{article}
\usepackage{coling2018}
\begin{document}
\cite{Smith2000,elk:bronto,elk:trice,elk:ptero}
\bibliographystyle{acl-rawyear}
\bibliography{\jobname}
\end{document}
输出