Me gustaría utilizar el comando \32s16o2
definido \num\def\32s16o2{S$^{16}$O$_{2}$}
dentro del \caption{}
comando, pero se genera un mensaje de error: "Se excedió la capacidad de Tex, lo siento". ¿Cuál es el problema?
Respuesta1
No hay circunstancias en las que debas usar numdef
paquete en un documento. Lo puse en mi github como un registro de definiciones de macros de tex posiblemente interesantes, pero no está en ctan y no debería usarse.
Si lo usa, solo permite números en elfindel nombre, no en ningún momento.
La definición que tienes es esencialmente la misma que una definición primitiva.
\def\32s16o2{S$^{16}$O$_{2}$}
sin usar numdef
en absoluto, y funciona (definiendo \3
) siempre que esta sea la única cadena que sigue a \3
. Si intenta definir dos de estas cadenas, sólo una funcionará:
\documentclass{article}
\usepackage{numdef}
\begin{document}
\num\def\32s16o2{S$^{16}$O$_{2}$}
\num\def\32g12h5{G$^{12}$H$_{5}$}
\32s16o2
\end{document}
no hace nada útil y produce el error
! Use of \\3{2} doesn't match its definition.
Respuesta2
Entiendo que te resulte \s16o2
más fácil escribir que
$\mathrm{S}^{16}\mathrm{O}_{2}$
o con mhchem
, \ce{S^{16}O2}
.
Sin embargo, \num\def
esmuyfrágil.
Si insistes con esta idea, úsala \protect
cuando en uno \caption
u otro argumento conmovedor.
\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}
obtienes lo mismo con
\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}
Sin mhchem
, puedes hacerlo en su lugar
\definecompound{32s16o2}{\ensuremath{\mathrm{S}^{16}\mathrm{O}_{2}}}