Bibtex 中「標題大小寫」的實現

Bibtex 中「標題大小寫」的實現

bibtex 中如何定義「標題大小寫」?這是單字列表不是要大寫,它是在哪個文件中定義的?可以改變嗎?我檢查了該.bst文件,但顯然它被委託給了一個change.case我找不到其定義的函數。

答案1

據我所知,沒有 BibTeX (也沒有任何biblatex)樣式實現“轉換為標題大小寫”宏/函數(有不久前有一個關於如何實現這一目標的問題biblatexbiblatex,答案顯示了一種在Biber中開始使用此類巨集的方法)。

但是,有一個功能可以將標題轉換為句子大小寫(第一個單字的第一個字母大寫,其餘小寫)。是否使用此功能取決於風格。如果您的風格應用句子大小寫,您可能會在.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

相關內容