При использовании пакета акцентов: подстрочный греческий символ в заголовке таблицы приводит к ошибке

При использовании пакета акцентов: подстрочный греческий символ в заголовке таблицы приводит к ошибке

Я использую пакет акцентов, чтобы поместить черту под математическими символами. Это работает очень хорошо при использовании в уравнениях, а также в обычном тексте (очевидно, все еще в математической среде $...$). Однако в настоящее время я создаю таблицу с заголовком, и она не хочет компилироваться. Я предпочитаю не использовать \underbar.


МВЭ

\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}

Первыйошибкапри использовании PDFTeXify в WinEdt 8.0 и MiKTeX 2.9 (фактически я получаю 100 ошибок).

! 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.

решение1

Пакет accentsопределяет команды, которые не являются надежными: например, мы находим

\newcommand\underaccent[2]{%
  \begingroup
    \def\cc@a{#2}% Stores the nucleous...
    \cc@palette\cc@underaccent{#1}% ...and the accent is passed
    #2%
  \endgroup}

Такая команда не выживет, если ее найти в «движущемся аргументе» (аргументе к \caption, \chapter, \sectionи подобных командах). Определение \ubarв терминах \underaccentделает \ubarих такими же хрупкими.

Пакет действительно должен быть

\DeclareRobustCommand\underaccent[2]{%
  \begingroup
    \def\cc@a{#2}% Stores the nucleous...
    \cc@palette\cc@underaccent{#1}% ...and the accent is passed
    #2%
  \endgroup}

так что проблема исчезнет.

Есть несколько исправлений. Первое — это поместить \protectперед командой, когда она появляется в движущемся аргументе:

\caption{$\protect\ubar{\pi}$}

Лучшим решением было бы обеспечение защитытвойкоманда

\DeclareRobustCommand{\ubar}[1]{\underaccent{\bar}{#1}}

Вместо того, чтобы использовать \newcommand.

Еще лучшим решением было бы устранить ошибку в 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}

Вместо fixltx2eможно использовать etoolbox:

\usepackage{etoolbox}

\usepackage{accents}
\robustify{\underaccent}

сделал бы то же самое (по-другому).

Связанный контент