Реализация «Заглавных букв» в Bibtex

Реализация «Заглавных букв» в Bibtex

Как определяется "заглавный регистр" в bibtex? Какой список словнетдля заглавных букв, и в каком файле это определено? Можно ли это изменить? Я проверил файл .bst, но, по-видимому, это делегировано функции change.case, определение которой я не могу найти.

решение1

Насколько мне известно, BibTeX не существует (и вообще не существует).biblatex стиля BibTeX (или любого другого), который бы реализовывал макрос/функцию «преобразовать в заглавные буквы» (былвопрос некоторое время назад о том, как этого добиться сbiblatex, ответ показывает способ начать работу с таким макросом в biblatexBiber).

Однако есть функция для перевода заголовков в регистр предложений (первая буква первого слова заглавная, остальные строчные). Использование этой функции зависит от стиля. Если ваш стиль применяет регистр предложений, вы, вероятно, найдете такую ​​строку в .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.

Связанный контент