Seguindo a pergunta
Qual é a caixa adequada a ser usada ao armazenar títulos no banco de dados bibliográfico?Estou armazenando títulos em Title Case no arquivo .bib e {Protecting} nomes próprios, etc. Eu tenho usado biblatex-chicago
até agora e não tive problemas, já que Chicago exige Title Case de qualquer maneira.
Mas agora estou tendo problemas com biblatex-apa
– a APA prefere maiúsculas e minúsculas nas frases – com aspas e ênfase. Uma vez que \mkbibquote{}
já \mkbibemph{}
protege o que está dentro, colocá-los em um conjunto extra de chaves {\mkbibquote{}}
os protege. Mas então, estou tendo vários problemas.
Considere este MWE:
% !TEX TS-program = xelatexmk
\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage[variant=american]{english}
\usepackage{csquotes}
\usepackage[style=apa]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{bib.bib}
@book{Author2000,
Title = {This is a Title with Something in {\mkbibquote{Quotes that Should Be Downcased}}},
Author = {Author, Anton},
Date = {1990},
}
@book{Author2000a,
Title = {{\mkbibquote{But if the Title starts in Quotes}} It Turns into All Caps},
Author = {Author, Anton},
Date = {2000},
}
@book{Author2000b,
Title = {A Discussion of the Book {\mkbibemph{{My} New Book}}: It Should Keep the First Word Capitalized},
Author = {Author, Anton},
Date = {2010},
}
@book{Author2000c,
Title = {{\mkbibemph{And if the Title starts with Emphasis}} It also Turns into All Caps and Doesn't Apply the Emphasis},
Author = {Author, Anton},
Date = {2001},
}
@book{Author2000d,
Title = {And If {\mkbibquote{an Acronym {{{AAEE}}} is Included}}, How to Preserve it?},
Author = {Author, Anton},
Date = {2011},
}
\end{filecontents}
\addbibresource{bib.bib}
\begin{document}
\autocites{Author2000,Author2000a,Author2000b,Author2000c,Author2000d}
\printbibliography % print the bibliography
\end{document}
Ele fornece esta saída:
Existem inúmeros problemas. Se mkbibquote
ou mkbibemph
forem emitidos no início da string, ele transforma toda a string em MAIÚSCULAS. Também não tenho ideia de como proteger palavras específicas dentro de uma string que já está entre mkbibquote
ou mkbibemph
.
Responder1
A função de maiúsculas e minúsculas da frase biblatex
é implementada em LaTeX. A caixa de frase do BibTeX, por outro lado, é implementada diretamente no BibTeX. Isso significa que existem algumas diferenças sutis e não tão sutis entre os dois. Em particular, biblatex
a função de caso de frase tentará expandir as macros, se possível.
O principal problema aqui é que as chaves estão sobrecarregadas de significado: para o LaTeX elas servem como delimitadores de argumentos ou aplicam agrupamento; para BibTeX eles protegem strings contra mudança de maiúsculas e minúsculas e marcam macros LaTeX para caracteres não-ASCII como ä -> {\"a}
(cf.Como escrever “ä” e outros tremas e letras acentuadas na bibliografia?). Os diferentes significados entram em conflito de vez em quando; nesses casos, são necessárias soluções alternativas para resolver o problema.
Veja também o recentehttps://github.com/plk/biblatex/issues/871e questões vinculadas, bem como as adições de documentoshttps://github.com/plk/biblatex/commit/863fea969a9f1d37d7f944265cb276cf18293334ehttps://github.com/plk/biblatex/commit/a291e72a6c8ba2b896eb3f53ada6cc938c2cfa86.
Para os casos de uso mostrados no MWE, posso oferecer a seguinte solução alternativa. A ideia é contornar o uso de colchetes usando argumentos delimitados (uma espécie de \foo <argument>\endfoo
sintaxe). Argumentos delimitados apresentam seus próprios problemas quando estão aninhados, mas funcionam bem no MWE.
\documentclass{article}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=apa]{biblatex}
\protected\def\horriblemkbibquote#1\endhorriblemkbibquote{\mkbibquote{#1}}
\let\endhorriblemkbibquote\relax
\protected\def\horriblemkbibemph#1\endhorriblemkbibemph{\mkbibemph{#1}}
\let\endhorriblemkbibemph\relax
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Author2000,
title = {This is a Title with Something in {\mkbibquote{Quotes that Should Be Downcased}}},
author = {Author, Anton},
date = {1990},
}
@book{Author2000a,
title = {\horriblemkbibquote {But} if the Title starts in Quotes\endhorriblemkbibquote{} It Turns into All Caps},
author = {Author, Anton},
date = {2000},
}
@book{Author2000b,
title = {A Discussion of the Book \horriblemkbibemph{My} New Book\endhorriblemkbibemph{}: It Should Keep the First Word Capitalized},
author = {Author, Anton},
date = {2010},
}
@book{Author2000c,
title = {\horriblemkbibemph {And} if the Title starts with Emphasis\endhorriblemkbibemph{} It also Turns into All Caps and Doesn't Apply the Emphasis},
author = {Author, Anton},
date = {2001},
}
@book{Author2000d,
title = {And If \horriblemkbibquote an Acronym {AAEE} is Included\endhorriblemkbibquote{}, How to Preserve it?},
author = {Author, Anton},
date = {2011},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\autocites{Author2000,Author2000a,Author2000b,Author2000c,Author2000d}
\printbibliography % print the bibliography
\end{document}
No longo prazo, a solução desejável parece-me implementar uma nova função de mudança de maiúsculas e minúsculas que usa uma marcação diferente para especificar as strings protegidas, para que as chaves não entrem mais em conflito com elas.
A função de mudança de caso do FWIW BibTeX tem problemas semelhantes. Ele não coloca as palavras em maiúscula no início da string, portanto não sofre do problema ALL-CAPS, mas os outros dois problemas de proteção dentro de desproteção também estão presentes.