我阅读此处如果我想自动调整标题的大小写,我可以使用
\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
并不是因为它们会引起问题,而是因为它们在那种情况下没有任何用处。