bibtex 中如何定义“标题大小写”?单词列表是不是大写,它在哪个文件中定义?可以更改它吗?我检查了文件.bst
,但显然它被委托给了一个change.case
我找不到其定义的函数。
答案1
据我所知,没有 BibTeX(也没有任何biblatex
)样式实现“转换为标题大小写”宏/函数(有之前有一个问题,关于如何实现这一点biblatex
,答案展示了使用 Biber 开始使用此类宏的方法biblatex
。
但是,有一个函数可以将标题转换为句子大小写(第一个单词的首字母大写,其余字母小写)。是否使用此功能取决于样式。如果您的样式应用句子大小写,您可能会在文件中找到这样的.bst
一行title "t" change.case$
。
因此,规则是在文件中以标题大小写形式给出标题.bib
,并让参考书目样式将其转换为句子大小写(如果需要)(参见在参考书目数据库中存储标题时,应使用什么大小写?)。
一般来说,.bib
文件中的标题应始终采用标题大小写,另外,必须大写以某种方式(名称,缩写,公式等)括在花括号中{}
。
例子
title = {From {Brouwer} to {Hilbert}: {The} Debate on the Foundations of Mathematics in the 1920s}
title = {{NASA} Ends Unmanned Launchings in {Florida}}
也可以看看BibTeX 在创建 .bbl 文件时丢失大写字母, 尤其亚历克西斯的回答。
答案2
内置函数change.case$
在源代码中描述(texk/bibtex-x/bibtex-4.c
在 TeX Live 中):
* The |built_in| function change.case$ pops the top two (string)
* literals; it changes the case of the second according to the
* specifications of the first, as follows. (Note: The word `letters' in
* the next sentence refers only to those at brace-level~0, the top-most
* brace level; no other characters are changed, except perhaps for
* special characters, described shortly.) If the first literal is the
* string t, it converts to lower case all letters except the very
* first character in the string, which it leaves alone, and except the
* first character following any |colon| and then nonnull |white_space|,
* which it also leaves alone; if it's the string l, it converts all
* letters to lower case; if it's the string u, it converts all
* letters to upper case; and if it's anything else, it complains and
* does no conversion. It then pushes this resulting string. If either
* type is incorrect, it complains and pushes the null string; however,
* if both types are correct but the specification string (i.e., the
* first string) isn't one of the legal ones, it merely pushes the second
* back onto the stack, after complaining. (Another note: It ignores
* case differences in the specification string; for example, the strings
* t and T are equivalent for the purposes of this |built_in|
* function.)
这很复杂,我大部分都不明白,但在实践中,我认为需要记住的是,即使在“。”,“!”或“?”等标点符号之后,字母也会默认转换为小写……除了“:”(冒号)之后。确实,
title = {Test! Test? Test: Test. Test, Test}
在 .bib 文件中产生:
\newblock Test! test? test: Test. test, test.
这个唯一的例外相当奇怪且出乎意料。
答案3
如果您愿意创建自定义 .bst 文件,可以按以下方式完成。在您的文档中,您需要以下几行:
\usepackage{titlecaps}
\Addlcwords{the of into}
其中\usepackage
使用了titlecaps
包含\titlecap
宏的包。\Addlcwords
宏提供了应保持小写且不应大写的单词列表。
在您的.bst
文件中,您需要添加一个新的宏:
FUNCTION {titlecap}
{ duplicate$ empty$
{ pop$ "" }
{ "\titlecap{" swap$ * "}" * }
if$
}
剩下要做的就是将其用于您正在格式化的各种文档样式。例如,您的样式中的一行可能写着这样的内容:
title ". " * output
它会打印标题、连接句点并输出结果。现在,您可以将其编辑为:
title titlecap ". " * output
它将首先将titlecap
宏应用于title
,然后连接句点并输出结果。调用\titlecap
宏中的调用将使每个单词的首字母大写,排除列表中的单词除外。请参阅软件包文档http://ctan.org/pkg/titlecaps。