
Ich verwende das Akzentpaket, um einen Balken unter mathematische Symbole zu setzen. Dies funktioniert sehr gut, wenn es in Gleichungen und auch in normalem Text verwendet wird (natürlich immer noch in der mathematischen Umgebung $...$). Derzeit erstelle ich jedoch eine Tabelle mit einer Überschrift und sie lässt sich nicht kompilieren. Ich möchte \underbar vorzugsweise nicht verwenden.
MWE
\documentclass{article}
\usepackage{accents}
\newcommand{\ubar}[1]{\underaccent{\bar}{#1}}
\begin{document}
\begin{table}
\begin{tabular}{c}
a
\end{tabular}
\caption{$\ubar{\pi}$}
\end{table}
\end{document}
ErsteFehlerbei der Verwendung von PDFTeXify in WinEdt 8.0 und MiKTeX 2.9 (ich erhalte tatsächlich 100 Fehler).
! Undefined control sequence.
\underaccent #1#2->\begingroup \def \cc@a
{#2}\cc@palette \cc@underaccent {#...
1.12 \caption{$\ubar{\pi}$}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g. `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.
Antwort1
Das accents
Paket definiert Befehle, die nicht robust sind: Zum Beispiel finden wir
\newcommand\underaccent[2]{%
\begingroup
\def\cc@a{#2}% Stores the nucleous...
\cc@palette\cc@underaccent{#1}% ...and the accent is passed
#2%
\endgroup}
Ein Befehl wie dieser wird es nicht überleben, wenn er in einem „beweglichen Argument“ (dem Argument für \caption
, \chapter
, \section
und ähnlichen Befehlen) gefunden wird. Die Definition \ubar
in Bezug auf \underaccent
weist \ubar
die gleiche Fragilität auf.
Das Paket sollte eigentlich
\DeclareRobustCommand\underaccent[2]{%
\begingroup
\def\cc@a{#2}% Stores the nucleous...
\cc@palette\cc@underaccent{#1}% ...and the accent is passed
#2%
\endgroup}
damit das Problem verschwindet.
Es gibt verschiedene Korrekturen. Die erste besteht darin, \protect
vor den Befehl zu setzen, wenn er in einem bewegten Argument erscheint:
\caption{$\protect\ubar{\pi}$}
Eine bessere Lösung wäre der Schutz vondeinBefehl
\DeclareRobustCommand{\ubar}[1]{\underaccent{\bar}{#1}}
anstatt zu verwenden \newcommand
.
Eine noch bessere Lösung wäre die Behebung des Fehlers in accents
:
\documentclass{article}
\usepackage{fixltx2e}
\usepackage{accents}
\MakeRobust{\underaccent} % make \underaccent not fragile in moving arguments
\newcommand{\ubar}[1]{\underaccent{\bar}{#1}}
\begin{document}
\begin{figure}
\caption{$\ubar{\pi}$}
\end{figure}
\end{document}
Stattdessen fixltx2e
können Sie Folgendes verwenden etoolbox
:
\usepackage{etoolbox}
\usepackage{accents}
\robustify{\underaccent}
würde dasselbe (auf andere Weise) tun.