我有一个宏用于编写 SI 单位,该单位以数字作为可选参数,但当这些宏用于 ToC 条目时,文件.toc
不会为可选参数写入右括号,从而.toc
在重新编译期间弄乱该文件。这是一个可以修复的问题吗?
分数维:
\documentclass[10pt,a4paper,twoside]{article}
\usepackage{siunitx,xstring}
\usepackage[hidelinks]{hyperref}
\ExplSyntaxOn % Used for many other macros, so keeping this would be very nice
\NewDocumentCommand \meter {o o} {
\IfValueTF{#1} {
\IfValueTF{#2} { \ensuremath{\SI{#2}{#1\meter}} }
{ \IfDecimal{#1} { \ensuremath{\SI{#1}{\meter}} } { \si{#1\meter} } }
} { \si{\meter} }
}
\ExplSyntaxOff
\begin{document}
\tableofcontents
\section[\meter[0.7]]{\meter[0.8]}
\end{document}
.toc
参赛作品:
\contentsline {section}{\numberline {1}\meter [0.7}{1}{section.1}%
答案1
只是改变
\section[\meter[0.7]]{\meter[0.8]}
到
\section[{\meter[0.7]}]{\meter[0.8]}
\meter[0.7]
即,将位于的可选参数中的表达式括\section
在一对花括号中。这样,LaTeX 就可以获得所需的帮助,以正确解析的参数\section
。