0

前文で一貫してタイプセットされた数量(以下にコピー)にマクロを定義\quanますが、正常に機能します。ただし、pdflatexが未定義の制御シーケンスを持っていると文句を言ってクラッシュする図のキャプションを除きます。

マクロを変更して、キャプション環境で機能させるにはどうすればよいですか?

ありがとう!

\let\unitsep=\,     % Inserted at spaces in second arg, separates units (A s)
\let\numunitsep=\;  % Separator between number and unit (12.3 V)
\makeatletter
\def\quan#1{\ifmmode \let\@shiftmath=\relax \else \let\@shiftmath=$\fi
\@shiftmath \uppercase{\def\@quanarg{#1}}%
\expandafter\@quannum\@quanarg E\@noexp\@end \futurelet\@nextchar\@quanunit}
\def\@quannum#1E#2\@end{\@quanmant#1\@end \ifx\@noexp#2 \else \@quanexp#2\fi}
\def\@quanmant#1{\ifx#1\@end \let\@next=\relax \else
\if,#1\mathord,\else #1\fi \let\@next=\@quanmant \fi \@next}
\def\@quanexp#1E\@noexp{\times 10^{#1}}
\def\@quanunit{\if[\@nextchar
\def\@next[##1]{\numunitsep\mathrm{##1}\endgroup\@shiftmath}%
\begingroup\@quanspace \else \let\@next=\@shiftmath \fi \@next}
{\catcode`\ =\active\gdef\@quanspace{\catcode`\ =\active\let =\unitsep}}
\makeatother
4

1 に答える 1

1

少し答えはありませんが、siunitx代わりにこの目的で使用すると便利な場合があります。

キャプション内で問題が発生する理由については、キャプションが.lofまたは.lotファイルに書き込まれることを思い出してください。そのため、マクロの脆弱性などについて心配する必要があります。その問題の根本は、マクロが書き出される前に展開されることです。つまり、マクロが最終的実行されたとき、つまり次の実行時にファイルから読み込まれたとき、必ずしもマクロが正常に動作するとは限りません。期待してください(私は以前これに混乱して捕まりました)。(これが間違いなくあなたの問題であると言っているわけではありませんが、動いている議論の中で失敗について言及することは、これが私が最初に見る場所であることを意味します)。

于 2010-08-28T14:07:35.447 に答える