Por que não usar um comando numdef em uma legenda?

Por que não usar um comando numdef em uma legenda?

Gostaria de utilizar o comando \32s16o2definido 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 numdefpackage 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 numdefnada, 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 \s16o2mais 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 \protectquando estiver em uma \captionou 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}

insira a descrição da imagem aqui

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}}}

informação relacionada