Почему этот макрос LaTeX для отображения количеств с единицами разбивается в подписи к рисункам? - PullRequest
0 голосов
/ 27 августа 2010

Я определяю макрос \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

1 Ответ

1 голос
/ 28 августа 2010

Это немного не отвечает, но для этой цели может быть полезно использовать siunitx.

Что касается того, почему что-то может пойти не так в пределах заголовков, помните, что заголовки записываются в.lof или .lot файлов, так что вам придется беспокоиться о хрупкости или иным образом макросов.Корень этой проблемы заключается в том, что макросы раскрываются перед записью, и это означает, что когда они наконец выполняются - когда они читаются из файла при следующем запуске - они нене обязательно должен вести себя так, как можно было ожидать (я был смущен этим раньше).(Я не говорю, что это определенно ваша проблема, но ваше упоминание об ошибке, когда в подвижном аргументе означает, что это то, где я бы посмотрел в первую очередь).

...