![书目中化学元素名称的排版](https://linux22.com/image/384666/%E4%B9%A6%E7%9B%AE%E4%B8%AD%E5%8C%96%E5%AD%A6%E5%85%83%E7%B4%A0%E5%90%8D%E7%A7%B0%E7%9A%84%E6%8E%92%E7%89%88.png)
这是针对我发现的已接受解决方案的一个怪癖的澄清请求排版化学元素名称
如果我尝试使用这样的解决方案,并且我定义了几个新的宏作为
\newcommand{\chem}[1]{\ensuremath{\mathrm{#1}}}
\newcommand{\AlO}{\chem{Al_{2}O_{3}}}
在参考书目中使用后者(通过 Biblatex + Biber 后端管理)会出现很多此类错误:
! Missing } inserted.
<inserted text>
}
l.835
?
! Extra }, or forgotten \endgroup.
\MakeLowercase ... {\lowercase {#1}}\reserved@a }
l.835
?
! LaTeX Error: \mathrm allowed only in math mode.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.835
?
! Missing $ inserted.
<inserted text>
$
l.835
其余文本似乎运行良好。我对 Latex 还比较陌生,我做错了什么吗?
答案1
\AlO
当您在条目标题中使用将参考书目样式转换为句子大小写时,就会出现类似的错误\MakeSentenceCase*
。
@book{hacker,
author = {James Hacker},
title = {On the Properties of \AlO and More},
date = {1980},
}
您需要使用双花括号来防止\AlO
操作\MakeSentenceCase*
和大小写转换。
请注意,由于花括号用作宏的参数分隔符,并且作为句子大小写的保护,您可能需要使用比最初想象的更多的括号对,括号的最小数量也可能取决于所涉及宏的定义。
为了防止某些单词(如专有名词)的大小写变化,请参阅BibTeX 在创建 .bbl 文件时丢失大写字母. 相关内容在参考书目数据库中存储标题时,应使用什么大小写?,Biblatex 更改标题的大小写和编译时 Biblatex-apa 出现错误消息。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=phys, backend=biber]{biblatex}
\newcommand{\chem}[1]{\ensuremath{\mathrm{#1}}}
\newcommand{\AlO}{\chem{Al_{2}O_{3}}}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{hacker,
author = {James Hacker},
title = {On the Properties of {{\AlO}} and More},
date = {1980},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{hacker}
\printbibliography
\end{document}