简洁版本:如何才能使 biblatex 中的数学/下标与标题大小写配合使用而不出现错误?
这个问题及其答案描述使用 biblatex 制作句子大小写标题(当您的 .bib 文件从多个来源整理时非常方便)。代码的重要部分位于下面的我的 MWE 中。
文章(等)标题中的数学模式涵盖这个答案——基本上将$math$包裹在一对额外的括号中。
在我的案例中,将两者结合起来会导致错误:
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{a_paper,
author = "N. E. Body and A. N. Other",
title = "An article about {Al}$_x${Ga}$_{1-x}${N}, {GaN}, {In}{$_x$}{Ga}{$_{1-x}$}{N} and other compounds with Annoying Names {$\omega$}",
journal = "Journal of tricky examples"
}
\end{filecontents*}
\documentclass{article}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
%sentence case for biblatex
\DeclareFieldFormat{sentencecase}{\MakeSentenceCase{#1}}
\renewbibmacro*{title}{%
\ifthenelse{\iffieldundef{title}\AND\iffieldundef{subtitle}}
{}
{\ifthenelse{\ifentrytype{article}\OR\ifentrytype{inbook}%
\OR\ifentrytype{incollection}\OR\ifentrytype{inproceedings}%
\OR\ifentrytype{inreference}}
{\printtext[title]{%
\printfield[sentencecase]{title}%
\setunit{\subtitlepunct}%
\printfield[sentencecase]{subtitle}}}%
{\printtext[title]{%
\printfield[titlecase]{title}%
\setunit{\subtitlepunct}%
\printfield[titlecase]{subtitle}}}%
\newunit}%
\printfield{titleaddon}}
\begin{document}
Test the complete \texttt{.bib} file: \nocite{*}.
\printbibliography
\end{document}
(感谢这个答案)给出
! Missing { inserted.
<to be read again>
}
l.35 \end
{document}
?
! Missing } inserted.
<inserted text>
}
l.35 \end
{document}
?
并输出:
请注意,如果没有括号,第一个下标$_{1-x}$
将不起作用,因此它们绝对是必需的。保护元素符号大小写的括号也不是问题 - 没有它们,我也会得到相同的错误(但当然我会得到不正确的输出)。没有错误$\omega$
($_x$
事实上也没有错误)。问题似乎是括号内的数学括号。
尽管有错误,输出还是正常的,但我真的不想跳过所有错误,以防万一,所以如何使 biblatex 中的数学/下标与标题大小写兼容?
让我达到这一点的几个要求是:
我需要句子大小写的内容,或者手动编辑 200 多个条目以使它们一致 - 期刊出版商的 .bib 输出不仅在期刊之间不一致,而且与期刊自身的格式也不一致。
显然,标题中的下标正确是必要的。
真正奇怪的是,直到最近我才确信这是可行的 - 我通常使用以批处理模式运行的 shell 脚本进行编译,但出现错误时会中止。昨天在另一台机器上的编辑没有影响任何相关的 bib 条目或序言,并且编译得很好。
答案1
使用该语法,LaTeX 在处理句子大小写时会感到困惑。如果我\errorcontextlines=100
在文档顶部添加以下内容,就可以发现错误的真正来源:
(./chrisbib.aux) (./chrisbib.bbl)
! Missing { inserted.
<to be read again>
}
\blx@tempa ...ercase {$_x$}{Ga}\MakeLowercase {$_}
{1-x}\MakeLowercase {$}{N}...
<argument> ...{\csname abx@field@title\endcsname }
\blx@endunit
\@secondoftwo #1#2->#2
<argument> \printfield [sentencecase]{title}
\setunit {\subtitlepunct }\print...
这至少清楚地显示了 LaTeX 的缺陷。
如果我将 bib 条目更改为
@article{a_paper,
author = "N. E. Body and A. N. Other",
title = "An article about {Al$_x$Ga$_{1-x}$N}, {GaN}, {In$_x$Ga$_{1-x}$N}
and other compounds with Annoying Names {$\omega$}",
journal = "Journal of tricky examples"
}
我没有得到任何错误。规则是,带括号的材料不受大小写变化的影响,而且这种风格似乎不会影响biblatex
。
我尝试使用 BibTeX 进行相同的操作,它再次产生了预期的正确结果。