bibtex acm 风格:如果缺少年份,可能会出现双句号

bibtex acm 风格:如果缺少年份,可能会出现双句号

正在运行latexbibtex循环

\documentclass{article}
\pagestyle{empty}
\begin{filecontents}[overwrite]{mwe.bib}
@article{Types,
  author={Abra K. Dabra},
  title={Types in Programming: {Bool}, {Char}, {Int}},
  journal={Int. J. Comp.},
  OPTyear=2000
}
\end{filecontents}
\showoutput
\begin{document}
\cite{Types}
\bibliographystyle{acm}
\bibliography{mwe}
\end{document}

产量

[1]

参考

[1] Dᴀʙʀᴀ,AK 编程中的类型:Bool,Char,Int。国际计算机杂志

倒数第二个句号是斜体,最后一个句号是直立的。这个不太明显。acm如果缺少年份,有什么方法可以修复样式以删除最后一个句号?这个类很老了,是 1986 年的,最后一次更正是在 2010 年,所以可能有一个标准修复。

答案1

条目末尾的句号(与参考书目中的大多数其他句号一样)由 生成add.period$

根据驯服野兽 add.period$

在字符串 S 的末尾添加一个句点,除非 S 已经以句点、感叹号或问号结尾(删除右括号后);

但不幸的是,使用函数acm打印,该函数定义为journalemphasizeic

FUNCTION {emphasizeic}
{ duplicate$ empty$
    { pop$ "" }
    { "{\em " swap$ * "\/}" * }
  if$
}

因此,即使删除任何右括号,堆栈中的字符{\em Int. J. Comp.\/}也不会以句号结尾。这意味着add.period$会添加另一个句号。

幸运的是,大约三十年来一直有一个解决方案:使用\emph{...}而不是{\em ...}

因此,我将修改一份副本acm.bst来替换所有类似

"{\em " ... * "\/}"

或者

"{\em " ... * "}"

类似于

"\emph{" ... * "}"

对于本例来说,只有一个这样的实例很重要,即 中的那个emphasizeic,但我们既然已经这样做了,不妨改变其他的。这是diff原始的acm.bstacm-emph.bst

--- acm.bst 2010-12-09 04:09:07.000000000 +0100
+++ acm-emph.bst    2024-02-25 09:45:26.932302800 +0100
@@ -1,3 +1,7 @@
+%%%% ACM with \emph{...} instead of {\em ...}
+%%%% 2024-02-25 MW
+%%%% for https://tex.stackexchange.com/q/710339/35864
+%%%% replace instances of "{\em " ... * "\/}" with "\emph{" ... * "}"
 % Copyright (C) 1986, 1988, 2010 Howard Trickey and Oren Patashnik.
 % Unlimited copying and redistribution of this file are permitted as long as
 % it is unmodified.  Modifications (and redistribution of modified versions)
@@ -167,14 +171,14 @@
 FUNCTION {emphasize}
 { duplicate$ empty$
     { pop$ "" }
-    { "{\em " swap$ * "}" * }
+    { "\emph{" swap$ * "}" * }
   if$
 }
 
 FUNCTION {emphasizeic}
 { duplicate$ empty$
     { pop$ "" }
-    { "{\em " swap$ * "\/}" * }
+    { "\emph{" swap$ * "}" * }
   if$
 }
 
@@ -546,7 +550,7 @@
           warning$
           ""
         }
-        { "In {\em " journal * "\/}" * }
+        { "In \emph{" journal * "}" * }
       if$
     }
     { "In " key * }
@@ -589,7 +593,7 @@
               crossref * warning$
               "" *
             }
-            { "{\em " * series * "\/}" * }
+            { "\emph{" * series * "}" * }
           if$
         }
         { key * }
@@ -610,7 +614,7 @@
               crossref * warning$
               ""
             }
-            { "In {\em " booktitle * "\/}" * }
+            { "In \emph{" booktitle * "}" * }
           if$
         }
         { "In " key * }

acm-emph.bst

\documentclass{article}
\pagestyle{empty}
\begin{filecontents}{\jobname.bib}
@article{Types,
  author={Abra K. Dabra},
  title={Types in Programming: {Bool}, {Char}, {Int}},
  journal={Int. J. Comp.},
  OPTyear=2000,
}
\end{filecontents}
\begin{document}
\cite{Types}
\bibliographystyle{acm-emph}
\bibliography{\jobname}
\end{document}

生产

[1] Dabra, AK 编程中的类型:Bool、Char、Int。Int. J. Comp.

相关内容