Я хотел бы использовать команду, \32s16o2
определенную как \num\def\32s16o2{S$^{16}$O$_{2}$}
в внутри \caption{}
команды, но возникает сообщение об ошибке: «Превышена емкость Tex, извините». В чем проблема?
решение1
Нет никаких обстоятельств, при которых вам следует использовать numdef
package в документе. Я поместил его в свой 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}}}