![使用 accents 包时:表格标题中的 underaccent 希腊符号会出现错误](https://linux22.com/image/290168/%E4%BD%BF%E7%94%A8%20accents%20%E5%8C%85%E6%97%B6%EF%BC%9A%E8%A1%A8%E6%A0%BC%E6%A0%87%E9%A2%98%E4%B8%AD%E7%9A%84%20underaccent%20%E5%B8%8C%E8%85%8A%E7%AC%A6%E5%8F%B7%E4%BC%9A%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF.png)
我正在使用 accents 包在数学符号下放置一个横线。在方程式中以及在普通文本中使用时效果很好(显然仍然在数学环境中 $...$)。但是,目前我正在创建一个带有标题的表格,但它不想编译。我最好不要使用 \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}
第一的错误在 WinEdt 8.0 和 MiKTeX 2.9 中使用 PDFTeXify 时(我实际上收到了 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
make进行定义\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}
会做同样的事情(以不同的方式)。