删除以问号结尾的标题后的逗号

删除以问号结尾的标题后的逗号

我使用的是经过修改的 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$函数只做了它工作所需的最低限度的事情就我而言。它可能需要更加强大,以便能够处理除“?”之外的空格和标点符号。

相关内容