为什么不在标题中使用 numdef 命令?

为什么不在标题中使用 numdef 命令?

我想在命令中使用 中\32s16o2定义的命令,但出现错误消息:“Tex 容量超出,抱歉”。问题是什么?\num\def\32s16o2{S$^{16}$O$_{2}$}\caption{}

答案1

在任何情况下都不应该numdef在文档中使用包。我把它放在我的 github 中作为可能有趣的 tex 宏定义的记录,但它不在 ctan 上,不应该使用。

如果你使用它,它只允许数字结尾名称,在任何时候都不存在。

您的定义本质上与原始定义相同

 \def\32s16o2{S$^{16}$O$_{2}$} 

numdef根本不使用,并且\3只要这是唯一跟在后面的字符串,就可以工作(定义)\3。如果您尝试定义两个这样的字符串,则只有一个会起作用:

\documentclass{article}

\usepackage{numdef}

\begin{document}

\num\def\32s16o2{S$^{16}$O$_{2}$} 
\num\def\32g12h5{G$^{12}$H$_{5}$} 

\32s16o2

\end{document}

没有任何用处并产生错误

! Use of \\3{2} doesn't match its definition.

答案2

我知道你觉得\s16o2打字比

$\mathrm{S}^{16}\mathrm{O}_{2}$

或者,使用mhchem\ce{S^{16}O2}

\num\def然而,非常脆弱的。

如果你坚持这个想法,请\protect\caption或其他动议中采用。

\documentclass{article}
\usepackage{numdef}

\num\def\s16o2{\ensuremath{\mathrm{S}^{16}\mathrm{O}_{2}}}

\begin{document}

\s16o2 is nice

\begin{figure}

\caption{\protect\s16o2 is nice}

\end{figure}

\end{document}

在此处输入图片描述

你也可以得到同样的

\documentclass{article}
\usepackage{etoolbox}
\usepackage[version=4]{mhchem}

\newcommand{\definecompound}[2]{\csdef{cmp@#1}{#2}}
\newrobustcmd{\cmp}[1]{\csuse{cmp@#1}}


\definecompound{32s16o2}{\ce{S^{16}O2}}

\begin{document}

\cmp{32s16o2} is nice

\begin{figure}

\caption{\cmp{32s16o2} is nice}

\end{figure}

\end{document}

如果没有mhchem,你可以这样做

\definecompound{32s16o2}{\ensuremath{\mathrm{S}^{16}\mathrm{O}_{2}}}

相关内容