2010-08-27 20 views
0

Je définis the \quan macro to consistently typeset quantities (copié ci-dessous) dans mon préambule, et cela fonctionne bien ... sauf dans les légendes de figures où pdflatex se plaint d'avoir une séquence de contrôle indéfinie et de tomber en panne.Pourquoi cette macro LaTeX pour afficher des quantités avec des unités brise-t-elle les légendes des figures?

Comment puis-je modifier la macro pour qu'elle fonctionne dans l'environnement de légende?

Merci!

\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 

Répondre

1

Il est un peu un non-réponse, mais il pourrait être utile d'utiliser siunitx à cet effet à la place. Pour savoir pourquoi les choses pourraient mal tourner dans les légendes, rappelez-vous que les légendes sont écrites dans les fichiers .lof ou .lot, vous devez donc vous soucier de la fragilité des macros. La racine de ce problème est que les macros sont développées avant d'être écrites, ce qui signifie que lorsqu'elles sont finalement exécutées - lorsqu'elles sont lues à partir du fichier lors de la prochaine exécution -, elles ne se comportent pas nécessairement comme on pourrait s'attendre (j'ai été pris de manière confuse par cela avant). (Je ne dis pas que c'est vraiment votre problème, mais votre mention d'un échec quand dans un argument en mouvement signifie que c'est là que je regarderais d'abord).