Bei Verwendung des Akzentpakets: Unterbetontes griechisches Symbol in der Überschrift einer Tabelle führt zu einem Fehler

Bei Verwendung des Akzentpakets: Unterbetontes griechisches Symbol in der Überschrift einer Tabelle führt zu einem Fehler

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 accentsPaket 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, \sectionund ähnlichen Befehlen) gefunden wird. Die Definition \ubarin Bezug auf \underaccentweist \ubardie 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, \protectvor 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 fixltx2ekönnen Sie Folgendes verwenden etoolbox:

\usepackage{etoolbox}

\usepackage{accents}
\robustify{\underaccent}

würde dasselbe (auf andere Weise) tun.

verwandte Informationen