Gostaria de utilizar o comando \32s16o2
definido como \num\def\32s16o2{S$^{16}$O$_{2}$}
dentro do \caption{}
comando, mas é gerada uma mensagem de erro: "Capacidade Tex excedida, desculpe". Qual é o problema?
Responder1
Não há circunstâncias em que você deva usar numdef
package em um documento. Coloquei-o no meu github como um registro de definições de macro tex possivelmente interessantes, mas não está no ctan e não deve ser usado.
Se você usá-lo, ele só permitirá números nofimdo nome, em nenhum momento.
A definição que você tem é essencialmente a mesma que uma definição primitiva
\def\32s16o2{S$^{16}$O$_{2}$}
sem usar numdef
nada, e funciona (definindo \3
) desde que esta seja a única string que segue \3
. Se você tentar definir duas dessas strings, apenas uma funcionará:
\documentclass{article}
\usepackage{numdef}
\begin{document}
\num\def\32s16o2{S$^{16}$O$_{2}$}
\num\def\32g12h5{G$^{12}$H$_{5}$}
\32s16o2
\end{document}
não faz nada de útil e produz o erro
! Use of \\3{2} doesn't match its definition.
Responder2
Eu entendo que você acha \s16o2
mais fácil digitar do que
$\mathrm{S}^{16}\mathrm{O}_{2}$
ou com mhchem
, \ce{S^{16}O2}
.
No entanto, \num\def
émuitofrágil.
Se você insiste com essa ideia, use \protect
quando estiver em uma \caption
ou outra discussão comovente.
\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}
Você consegue o mesmo com
\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}
Sem mhchem
, você pode fazer em vez disso
\definecompound{32s16o2}{\ensuremath{\mathrm{S}^{16}\mathrm{O}_{2}}}