我在用化学宏指令在我的论文中存在以下问题:
在或中使用\mbox{}
within会导致在运行标题中打印“@x”。此外,还会产生以下错误消息:\iupac{}
\section{}
\subsection{}
未定义的控制序列。\end{document}
缺少数字,视为零。\end{document}
但是,\mbox{}
除了\iupac{}
没有任何错误消息之外,其他都运行正常。
这是我的 MWE:
\documentclass[twoside,open=right]{scrreprt}
\usepackage[automark]{scrpage2}
\pagestyle{scrheadings}
\usepackage{chemmacros}
\begin{document}
\section{It works fine here: awe\mbox{-}some}
\cleardoublepage
\section{It does not work here: \iupac{2,2,6,6\mbox{-}Tetramethylpiperidine}}
\end{document}
为什么这如此重要?复合名称在数字后不应该有换行符。但是,在我的论文中,有些非常长的名称有时会像这样拆分:
...1,1'-
联苯...
我感谢您的帮助!
问候,
basseur
答案1
虽然\mbox
通常不被认为是易碎的,但在这种情况下,由于所做的处理,它是易碎的\iupac
。
您可能使用\protect\mbox{-}
,但我不推荐这样做。最好为这个连字符定义一个新的宏:
\documentclass[twoside,open=right]{scrreprt}
\usepackage[automark]{scrpage2}
\pagestyle{scrheadings}
\usepackage{chemmacros}
\NewDocumentCommand{\nbh}{}{\mbox{-}\nobreak\hspace{0pt}}
\begin{document}
\section{It works here: \iupac{2,2,6,6\protect\mbox{-}Tetramethylpiperidine}}
\section{It works here: \iupac{2,2,6,6\nbh Tetramethylpiperidine}}
\parbox[t]{0pt}{It works here: \iupac{2,2,6,6\protect\mbox{-}Tetramethylpiperidine}}
\hfill
\parbox[t]{0pt}{It works here: \iupac{2,2,6,6\nbh Tetramethylpiperidine}}
\hfill\mbox{}
\end{document}
正如您从零宽度框(在所有可行点强制连字)中看到的那样,它\mbox{-}
后面不允许换行,而\nbh
允许。
正如软件包作者所建议的,还可以添加简写:
\NewChemIUPACShorthand{=}{\nbh}
允许输入化合物作为2,2,2,6=Tetramethylpiperidine
。
完整示例:
\documentclass[twoside,open=right]{scrreprt}
\usepackage[automark]{scrpage2}
\pagestyle{scrheadings}
\usepackage{chemmacros}
\NewDocumentCommand{\nbh}{}{\mbox{-}\nobreak\hspace{0pt}}
\NewChemIUPACShorthand{=}{\nbh}
\begin{document}
\section{It works here: \iupac{2,2,6,6=Tetramethylpiperidine}}
\parbox[t]{0pt}{It works here: \iupac{2,2,6,6=Tetramethylpiperidine}}
\end{document}