Проблема Biblatex-apa с mhchem

Проблема Biblatex-apa с mhchem

Я обнаружил проблему при использовании BibLaTeX' cite-style apaвместе с mhchemтем, когда bib-файл содержит химические формулы с подстрочными/надстрочными индексами. MWE - это

\documentclass{article}
\usepackage[version=4]{mhchem}
\usepackage[style=apa, backend=biber]{biblatex}
%\usepackage[style=authoryear, backend=biber]{biblatex}
\addbibresource{Bib.bib}

\begin{document}

This is a citation with only simple chemistry: \parencite{Cite1}.

This is a citation with superscript: \parencite{Cite2}.

\printbibliography
\end{document}

Cite1 содержит только простую химическую формулу и работает отлично:

@Article{Cite1,
  author       = {Author, A.},
  date         = {2020},
  journaltitle = {A Journal},
  title        = {A title with just some \ce{Mg/Ca} chemistry},
  issue        = {2},
  pages        = {1--4},
  volume       = {1},
  timestamp    = {2020-03-27},
}

Ссылка 2 содержит верхний индекс и приводит к 14 ошибкам:

@Article{Cite2,
  author       = {Author, B.},
  date         = {2020},
  journaltitle = {Another Journal},
  title        = {A title with some more complicated \ce{\delta^{18}O} chemistry and a longer title},
  issue        = {1},
  pages        = {2--6},
  volume       = {8},
  timestamp    = {2020-03-27},
}

Проблема, похоже, в том, что он BibLaTeXпереключается в математический режим, хотя \ceдолжен этого не допустить:

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

Простое \protect, например {\protect\ce{\delta^{18}O}}, решает эту проблему, но создает другую, поскольку теперь буква «О» становится строчной.

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

Мне понадобится довольно запутанная версия, {\protect\ce{\delta^{18}\MakeUppercase{O}}}чтобы в итоге получить правильный результат:

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

Поскольку настоящий bib-файл содержит много записей, я, понятное дело, не хотел бы вручную менять их все. Любопытно, что с -style все работает отлично authoryear, проблема, по-видимому, apaспецифична для -style. Я был бы очень благодарен за любые предложения по решению этой проблемы.

решение1

biblatex-apaприменяет регистр предложений с помощью \MakeSentenceCase*. Этот макрос довольно сложен и в основном может обрабатывать только обычный текст без разрыва.

Если в заголовках есть сложные макросы, их необходимо скрыть/защитить парой фигурных скобок.

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

\documentclass{article}
\usepackage[version=4]{mhchem}
\usepackage[style=apa, backend=biber]{biblatex}


\begin{filecontents}{\jobname.bib}
@Article{Cite1,
  author       = {Author, A.},
  date         = {2020},
  journaltitle = {A Journal},
  title        = {A Title with Just Some {{\ce{Mg/Ca}}} Chemistry},
  issue        = {2},
  pages        = {1--4},
  volume       = {1},
}
@Article{Cite2,
  author       = {Author, B.},
  date         = {2020},
  journaltitle = {Another Journal},
  title        = {A Title with Some More Complicated {{\ce{\delta^{18}O}}}
                  Chemistry and a Longer Title},
  issue        = {1},
  pages        = {2--6},
  volume       = {8},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
This is a citation with only simple chemistry: \parencite{Cite1}.

This is a citation with superscript: \parencite{Cite2}.

\printbibliography
\end{document}

Автор, А. (2020). Название с некоторой химией Mg/Ca. Журнал, 1, 1–4.//Автор, Б. (2020). Название с некоторой более сложной химией δ 18 O и более длинным названием. Другой журнал, 8, 2–6.

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