キャプション内で numdef コマンドを使用しないのはなぜですか?

キャプション内で numdef コマンドを使用しないのはなぜですか?

コマンド内で\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}}}

関連情報