Bibtex:从 btxbst.doc 编译新样式:编译错误

Bibtex:从 btxbst.doc 编译新样式:编译错误

我正在尝试关注此资源http://linuxtoosx.blogspot.com/2010/09/bibtex-styles-alpha-abbrv-alphaabbr.html为了改变alpha模式来显示缩写的作者,如F. Foo

为了做到这一点,我下载了来自 bibtex ctan 的 zip并运行cpp -P -DALPHA btxbst.doc alphaabbr.bst编译样式文件...失败:

$ mkdir /tmp/alphaabbr/ && cd /tmp/alphaabbr/
$ wget http://mirrors.ctan.org/biblio/bibtex/base.zip
$ unzip base.zip
$ cd base
$ cpp -P -DALPHA btxbst.doc alphaabbr.bst
btxbst.doc:1:16: warning: missing terminating ' character
 % BibTeX `plain' family
                ^
btxbst.doc:22:13: warning: missing terminating ' character
 % If you don't have access,

[...]

btxbst.doc:421:6: error: "'mid.sentence :=" is not a valid filename
   #1 'mid.sentence :=

[...]

知道什么地方出了问题吗?

cpp 版本:cpp (Debian 8.3.0-3) 8.3.0

PS:为了完整性,获取 alphaabbr 样式需要应用的补丁是:

+++ btxbst.doc 2010-09-16 17:14:50.000000000 +0200
@@ -95,7 +95,7 @@
 % alpha style (sorted short alphabetics)
 #   define LAB_ALPH 1
 #   define SORTED 1
-#   define NAME_FULL 1
+#   define NAME_FULL 0
 #   define ATIT_LOWER 1
 #   define MONTH_FULL 1
 #   define JOUR_FULL 1

答案1

尽管btxbst.doc确实提到使用cpp,但使用 C 预处理器对 BibTeX 代码的使用并不完全理想。手册页提到cpp以下内容:

C 预处理器仅用于 C、C++ 和 Objective-C 源代码。过去,它被滥用为通用文本处理器。它会对不遵守 C 词汇规则的输入造成阻碍。例如,撇号将被解释为字符常量的开头,并导致错误。此外,您不能依赖它保留对 C 系列语言不重要的输入特征。如果 Makefile 经过预处理,所有硬制表符都将被删除,Makefile 将无法工作。

话虽如此,你通常可以在非 C 语言上使用 cpp。其他 Algol-ish 编程语言通常是安全的(Pascal、Ada 等)。汇编语言也是如此,但需谨慎使用。-传统-cpp 模式保留了更多的空白,并且在其他方​​面更加宽容。通过编写 C 或 C++ 风格的注释而不是本机语言注释,并保持宏简单,可以避免许多问题。

因此以下工作(仍然有很多警告,但没有错误):

cpp -traditional-cpp -P -DALPHA btxbst.doc alphaabbrv.bst

请注意,在编译/预处理之前,您仍应按照博客文章中所示进行更改(NAME_FULL 0在第 98 行设置)。btxbst.doc

梅威瑟:

\documentclass{article}
\begin{filecontents}{\jobname.bib}
@article{testarta,
  author        = {Arnold Uthor and William Riter},
  title         = {A Very Interesting Article},
  journal       = {Journal of Articles},
  volume        = {7},
  pages         = {1-5},
  year          = {2010},
}

@article{testartb,
  author        = {Arnold Uthor and William Riter},
  title         = {An Uninteresting Article},
  journal       = {Journal of Articles},
  volume        = {8},
  pages         = {1-5},
  year          = {2011},
}
\end{filecontents}
\begin{document}
Some citations \cite{testarta,testartb}.

\bibliographystyle{alphaabbrv}
\bibliography{\jobname}
\end{document}

结果:

在此处输入图片描述

相关内容