![删除以问号结尾的标题后的逗号](https://linux22.com/image/250052/%E5%88%A0%E9%99%A4%E4%BB%A5%E9%97%AE%E5%8F%B7%E7%BB%93%E5%B0%BE%E7%9A%84%E6%A0%87%E9%A2%98%E5%90%8E%E7%9A%84%E9%80%97%E5%8F%B7.png)
我使用的是经过修改的 bibtex 样式,但基础相当通用。它基于 utphys 2.7,而 utphys 2.7 又基于“IEEE Transactions 书目样式(1988 年 1 月 29 日版本)”
我想删除以问号结尾的标题后面的逗号。一些自动破解就可以了。(不更改 bbl)
Bibtex输入如下:
@article{EPR35,
author = {Einstein, A. and Podolsky, B. and Rosen, N.},
title = {Can Quantum-Mechanical Description of Physical Reality Be Considered Complete?}
}
相应的输出如下:
A. Einstein、B. Podolsky 和 N. Rosen,“量子力学对物理现实的描述可以被认为是完整的吗?”,Phys. Rev. 47(1935 年 5 月)777–780。5、8
Bibtex 风格http://pastebin.com/h8in9BZU
答案1
该makebst
包有一个很好的函数来测试字符串的最后一个字符是否是“!?”之一:
FUNCTION {non.stop}
{ duplicate$
"}" * add.period$
#-1 #1 substring$ "." =
}
然后你可以编写一个add.comma
函数来测试:
FUNCTION {add.comma}
{ non.stop
{ "," * }
'skip$
if$
}
add.comma
在需要条件逗号的地方使用此函数。
答案2
我认为解决方案可以通过设置来重新定义本地问号:
\catcode`?=\active
为了提供 mwe,我将您链接的 bst 文件保存为名称utphys.bst
。您应该避免在文件名中使用空格或其他特殊字符。(我认为点也是错误的)
在下面的例子中,我定义了一个新的 if 函数,该函数在问号后为真。如果此函数为真,则不会打印逗号。
未重新定义的结果:
修改后的结果:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{references.bib}
@article{EPR35,
author = {Einstein, A. and Podolsky, B. and Rosen, N.},
title = {Can Quantum-Mechanical Description of Physical Reality Be Considered Complete?}
}
\end{filecontents*}
\begin{document}
\cite{EPR35}
\begingroup
\newif\ifgobblecomma
\gobblecommafalse %default
\edef\FZ{?}
\edef\KM{,}
\catcode`?=\active
\catcode`,=\active
\def?{\FZ\gobblecommatrue}
\def,{\ifgobblecomma\gobblecommafalse\else\KM\fi}
\bibliographystyle{utphys}
\bibliography{references}
\endgroup
\end{document}
答案3
我也使用修改后的utphys.sty
样式。我用来删除标题中多余逗号的快速方法是在样式文件中定义以下函数:
INTEGERS{steps}
FUNCTION {add.comma$}
{
#-1 'steps :=
{duplicate$ steps #1 substring$ "}" =}
{steps #1 - 'steps := }
while$
duplicate$ steps #1 substring$ "?" =
{"" *} % string ended in ? so don't do anything skip$
{"," *} % string didn't end in ? so add a comma
if$
}
然后,对函数的唯一更改format.title
是插入对add.comma$
FUNCTION {format.title}
{ title empty$
{ "" }
{"``" title "t" change.case$ * add.comma$ "''" * }
if$
}
这对于我的参考书目来说已经足够好了,然而这个add.comma$
函数只做了它工作所需的最低限度的事情就我而言。它可能需要更加强大,以便能够处理除“?”之外的空格和标点符号。