Защита корпуса с акцентом на библатексе

Защита корпуса с акцентом на библатексе

После вопроса Какой регистр следует использовать при сохранении названий в библиографической базе данных?Я сохраняю заголовки с заглавной буквы в файле .bib и {защищаю} имена собственные и т. д. Я использовал их biblatex-chicagoдо сих пор, и у меня не возникло никаких проблем, так как в Чикаго в любом случае требуется использование заглавных букв.

Но теперь у меня проблемы с biblatex-apa— APA предпочитает обрамление предложений — с кавычками и ударением. Поскольку \mkbibquote{}и \mkbibemph{}уже защищают то, что внутри, заключение их в дополнительный набор скобок {\mkbibquote{}}снимает защиту от регистра. Но тогда у меня есть ряд проблем.

Рассмотрим этот 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}

Это дает следующий результат:

введите описание изображения здесь

Есть множество проблем. Если mkbibquoteили mkbibemphиспользуются в начале строки, то вся строка становится ВСЕМИ ЗАГЛАВНЫМИ. Также я понятия не имею, как защитить определенные слова в строке, которая уже заключена в mkbibquoteили mkbibemph.

решение1

Функция case предложения для biblatexреализована в LaTeX. С другой стороны, case предложения BibTeX реализован в BibTeX напрямую. Это означает, что между ними есть некоторые тонкие и не очень тонкие различия. В частности, biblatexфункция case предложения попытается расширить макросы, если это возможно.

Основная проблема здесь в том, что фигурные скобки перегружены смыслом: в LaTeX они служат разделителями аргументов или применяют группировку; в BibTeX они защищают строки от изменения регистра и размечают макросы LaTeX для символов, не входящих в набор ASCII, таких как ä -> {\"a}(ср.Как писать «ä» и другие умлауты и буквы с ударениями в библиографии?). Время от времени различные значения конфликтуют, в таких случаях для решения проблемы необходимы обходные пути.

См. также недавниеhttps://github.com/plk/biblatex/issues/871и связанные с ними вопросы, а также дополнения к документамhttps://github.com/plk/biblatex/commit/863fea969a9f1d37d7f944265cb276cf18293334иhttps://github.com/plk/biblatex/commit/a291e72a6c8ba2b896eb3f53ada6cc938c2cfa86.

Для случаев использования, которые вы показываете в MWE, я могу предложить следующий обходной путь. Идея состоит в том, чтобы обойти использование фигурных скобок, используя разделенные аргументы (своего рода \foo <argument>\endfooсинтаксис). Разделенные аргументы имеют свои собственные проблемы, когда они вложены, но они достаточно хорошо работают в 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}

Автор, А. (1990). Это заголовок с чем-то в «кавычках, которые следует перевести в нижний регистр».//Автор, А. (2000). «Но если заголовок начинается с кавычек», он превращается в заглавные буквы.//Автор, А. (2001). А если заголовок начинается с ударения, он также превращается в заглавные буквы и не применяет ударение.//Автор, А. (2010). Обсуждение книги Моя новая книга: первое слово в ней должно быть написано заглавными буквами.//Автор, А. (2011). А если «включена аббревиатура AAEE», как ее сохранить?

В долгосрочной перспективе мне кажется желательным решением реализовать новую функцию изменения регистра, которая использует другую разметку для указания защищенных строк, чтобы фигурные скобки больше с ней не конфликтовали.

FWIW Функция изменения регистра BibTeX имеет похожие проблемы. Она не делает слова в начале строки заглавными, поэтому не страдает от проблемы ВСЕХ ЗАГЛАВНЫХ БУКВ, но две другие проблемы защиты-внутри-снятия защиты также присутствуют.

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