Biblatex 句子大小写和数学模式不能一起工作

Biblatex 句子大小写和数学模式不能一起工作

简洁版本:如何才能使 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}
? 

并输出: 上述 MWE 的输出

请注意,如果没有括号,第一个下标$_{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 进行相同的操作,它再次产生了预期的正确结果。

相关内容