Proteção de case com ênfase em biblatex

Proteção de case com ênfase em biblatex

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-chicagoaté 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{}\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:

insira a descrição da imagem aqui

Existem inúmeros problemas. Se mkbibquoteou mkbibemphforem 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 mkbibquoteou 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, biblatexa 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>\endfoosintaxe). 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}

Autor, A. (1990). Este é um título com algo entre “aspas que deveriam ser diminuídas”. //Autor, A. (2000). “Mas se o título começar entre aspas” fica todo em maiúsculas.//Autor, A. (2001). E se o título começa com ênfase também passa para letras maiúsculas e não aplica ênfase.//Autor, A. (2010). Uma discussão sobre o livro Meu novo livro: Deve manter a primeira palavra em maiúscula.//Autor, A. (2011). E se “está incluída uma sigla AAEE”, como preservá-la?

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.

informação relacionada