Implementação de "Title Case" no Bibtex

Implementação de "Title Case" no Bibtex

Como o "título" é definido no bibtex? Qual é a lista de palavrasnãocolocar em maiúscula e em qual arquivo ela está definida? É possível mudar isso? Verifiquei o .bstarquivo, mas aparentemente ele está delegado a uma função change.casecuja definição não consigo encontrar.

Responder1

Até onde eu sei, não existe biblatexum estilo BibTeX (nem qualquer) que implemente uma macro/função "converter para maiúsculas e minúsculas" (haviauma pergunta há algum tempo sobre como conseguir isso combiblatex, a resposta mostra uma maneira de começar com essa macro no biblatexBiber).

Existe, no entanto, uma função para transformar os títulos em maiúsculas e minúsculas (primeira letra da primeira palavra em maiúscula, restante em minúscula). Depende do estilo se esta função é usada ou não. Se o seu estilo aplica maiúsculas e minúsculas, você provavelmente encontrará uma linha como esta no .bstarquivo title "t" change.case$.

Portanto, as regras são fornecer os títulos em caixa de título no .bibarquivo e fazer com que o estilo da bibliografia os converta para caixa de frase, se desejado (cf.Qual é a caixa adequada a ser usada ao armazenar títulos no banco de dados bibliográfico?).

Geralmente, então, os títulos nos .bibarquivos devem sempre ser dados em maiúsculas, onde adicionalmente as palavras quesempre tem que ser maiúsculode certa forma (nomes, siglas, fórmulas etc.) são colocados entre chaves {}.

Exemplo

title = {From {Brouwer} to {Hilbert}: {The} Debate on the Foundations of Mathematics in the 1920s}
title = {{NASA} Ends Unmanned Launchings in {Florida}}

Veja tambémBibTeX perde letras maiúsculas ao criar arquivo .bbl, especialmenteResposta de Alexis.

Responder2

A change.case$função integrada é descrita na fonte ( texk/bibtex-x/bibtex-4.cno 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.)

Isso é complexo e não entendi a maior parte, mas na prática acho que o que precisa ser lembrado é que mesmo depois de pontuação caracteres como ".", "!" ou "?", as letras são convertidas para minúsculas por padrão... exceto depois de ":" (dois pontos). De fato,

title = {Test! Test? Test: Test. Test, Test}

em um arquivo .bib produz:

\newblock Test! test? test: Test. test, test.

Esta única exceção é bastante estranha e inesperada.

Responder3

Isso pode ser feito da seguinte maneira, se você desejar criar um arquivo .bst personalizado. No seu documento, você precisa das seguintes linhas:

\usepackage{titlecaps}
\Addlcwords{the of into}

onde \usepackagefaz uso do titlecapspacote que contém a \titlecapmacro. A \Addlcwordsmacro fornece uma lista de palavras que devem permanecer em letras minúsculas e não em maiúsculas.

No seu .bstarquivo, você precisa adicionar uma nova macro:

FUNCTION {titlecap}
{ duplicate$ empty$
    { pop$ "" }
    { "\titlecap{" swap$ * "}" * }
  if$
}

A única coisa que resta a fazer é usá-lo para os vários estilos de documento que você está formatando. Por exemplo, uma linha no seu estilo poderia dizer algo assim:

title ". " * output

que imprime o título, concatena um ponto final e gera o resultado. Agora, você editaria isso para dizer:

title titlecap ". " * output

que primeiro aplicará a titlecapmacro a title, antes de concatenar o período e gerar o resultado. a invocação de \titlecapna macro colocará em maiúscula a primeira letra de cada palavra, exceto aquelas da lista de exclusão. Veja a documentação do pacote emhttp://ctan.org/pkg/titlecaps.

informação relacionada