为什么 MakeSentenceCase 不适用于参考书目标题中的转义数学重音符号?

为什么 MakeSentenceCase 不适用于参考书目标题中的转义数学重音符号?

阅读此处如果我想自动调整标题的大小写,我可以使用 \DeclareFieldFormat[article]{titlecase}{\MakeSentenceCase{#1}}。然而这会破坏编译。

这是一个非常简单的例子

\documentclass{article}
\usepackage{biblatex}
\usepackage{accents}
\DeclareFieldFormat[article]{titlecase}{\MakeSentenceCase{#1}} %%% <- offending line
\usepackage{filecontents}
\begin{filecontents}{test.bib}
@article{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha: {$Q_t=H\left(\underaccent{\leftarrow}S,\underaccent{\leftarrow}R,\Delta_t\right)A$}},
  journaltitle = {Some journ.}
}
\end{filecontents}
\addbibresource{test.bib}

\begin{document}
Can it survive titlecase \autocite{A01}?

\printbibliography
\end{document}

如果有问题的行没有被注释掉,那么根本就不会生成 PDF。

编辑于 2014 年 6 月 8 日

真是失态。我在移动东西时打错了。我有两行,但我想我在做一个最小示例时搞混了。原始代码仍然会产生一些“抽象”错误Undefined control sequence和类似 的错误Illegal parameter number in definition of \@tempa。我想“暂停”这个问题,直到我弄清楚情况。我怀疑这是因为标题中的数学,它也包含在 中{}

编辑于 2014 年 6 月 9 日

我更新了示例代码。它编译正常,除非我取消注释该行标题大小写。请注意,数学包含在花括号内。

编辑 2014/6/10

根据评论中的要求,示例简洁明了,没有不必要的内容。

答案1

它能生存下来吗?是的,它可以,只要你简化你的输入:你应该绝不\underaccent{\leftarrow}{S}在文档中明确写入,但为其定义一个宏。由于biblatex加载etoolbox,我们有\newrobustcmd可用,这解决了问题。

\documentclass{article}
\usepackage{biblatex}
\usepackage{accents}

\newrobustcmd{\ula}[1]{\underaccent{\leftarrow}{#1}}

\DeclareFieldFormat[article]{titlecase}{\MakeSentenceCase{#1}} %%% <- offending line
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha: {$Q_t=H(\ula{S},\ula{R},\Delta_t)A$}},
  journaltitle = {Some journ.}
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
Can it survive titlecase \autocite{A01}?

\printbibliography
\end{document}

我还删除了它们\left\right并不是因为它们会引起问题,而是因为它们在那种情况下没有任何用处。

在此处输入图片描述

相关内容