我正在尝试关注此资源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}
结果: