
Я обнаружил проблему при использовании 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}