Почему не используется команда numdef в подписи?

Почему не используется команда numdef в подписи?

Я хотел бы использовать команду, \32s16o2определенную как \num\def\32s16o2{S$^{16}$O$_{2}$}в внутри \caption{}команды, но возникает сообщение об ошибке: «Превышена емкость Tex, извините». В чем проблема?

решение1

Нет никаких обстоятельств, при которых вам следует использовать numdefpackage в документе. Я поместил его в свой 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естьоченьхрупкий.

Если вы настаиваете на этой идее, используйте \protectwhen в каком \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}}}

Связанный контент