Bibtex 中“标题大小写”的实现

Bibtex 中“标题大小写”的实现

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

相关内容