在 bibtex 年份字段中获取方括号

在 bibtex 年份字段中获取方括号

我试图让方括号出现在 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.

和输出

引文如下:“(Smith, 2000 1939)”,参考书目中有“WE Smith. 2000 [1939]. ...”

罪魁祸首是 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

  1. 复制acl.bst到 TeX 可以找到的位置。文档目录就可以了。
  2. 将文件重命名为acl-rawyear.bst
  3. 打开文件并找到函数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 *
    
  4. 在文件顶部的注释中添加您的姓名和日期并解释修改。

  5. 在您的文档中使用\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}

输出

在此处输入图片描述

相关内容