我想使用命令中\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
中使用when 。\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}}}