コマンド内で\32s16o2
として定義されたコマンドを使用したいのですが、「Tex capacity exceeded, sorry」というエラー メッセージが生成されます。問題は何でしょうか?\num\def\32s16o2{S$^{16}$O$_{2}$}
\caption{}
答え1
ドキュメント内で packageを使用する必要のある状況はありませんnumdef
。興味深い可能性のある TEX マクロ定義の記録としてこれを github に置きましたが、ctan にはないので使用しないでください。
使用する場合は、終わり名前の、どの時点でもではありません。
あなたが持っている定義は、本質的には原始的な定義と同じです
\def\32s16o2{S$^{16}$O$_{2}$}
numdef
をまったく使用せず、\3
に続く唯一の文字列がこれである限り、 は機能します ( を定義します) \3
。 このような文字列を 2 つ定義しようとすると、機能するのは 1 つだけです。
\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
しかし、とても壊れやすい。
この考えに固執する場合は、またはその他の感動的な議論\protect
の中で を使用します\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}}}