Ich möchte den im Befehl \32s16o2
definierten Befehl verwenden , aber es wird eine Fehlermeldung angezeigt: „Tex-Kapazität überschritten, tut mir leid“. Was ist das Problem?\num\def\32s16o2{S$^{16}$O$_{2}$}
\caption{}
Antwort1
Es gibt keine Umstände, unter denen Sie numdef
in einem Dokument ein Paket verwenden sollten. Ich habe es in meinem GitHub als Aufzeichnung möglicherweise interessanter Tex-Makrodefinitionen abgelegt, aber es befindet sich nicht auf Ctan und sollte nicht verwendet werden.
Wenn Sie es verwenden, erlaubt es nur Zahlen an derEndedes Namens, an keiner Stelle.
Die Definition, die Sie haben, ist im Wesentlichen die gleiche wie eine primitive Definition
\def\32s16o2{S$^{16}$O$_{2}$}
ohne numdef
überhaupt zu verwenden, und funktioniert (Definition \3
), solange dies die einzige Zeichenfolge ist, die jemals folgt \3
. Wenn Sie versuchen, zwei solcher Zeichenfolgen zu definieren, funktioniert nur eine:
\documentclass{article}
\usepackage{numdef}
\begin{document}
\num\def\32s16o2{S$^{16}$O$_{2}$}
\num\def\32g12h5{G$^{12}$H$_{5}$}
\32s16o2
\end{document}
tut nichts Nützliches und erzeugt den Fehler
! Use of \\3{2} doesn't match its definition.
Antwort2
Ich verstehe, dass Sie \s16o2
das Tippen einfacher finden als
$\mathrm{S}^{16}\mathrm{O}_{2}$
oder mit mhchem
, \ce{S^{16}O2}
.
Allerdings \num\def
istsehrzerbrechlich.
Wenn Sie auf dieser Idee bestehen, verwenden Sie \protect
„when in a“ \caption
oder ein anderes bewegendes Argument.
\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}
Das Gleiche bekommen Sie mit
\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}
Ohne mhchem
können Sie stattdessen Folgendes tun:
\definecompound{32s16o2}{\ensuremath{\mathrm{S}^{16}\mathrm{O}_{2}}}