以下代码会引发错误。
\documentclass{amsart}
\usepackage{accents}
\usepackage{tikz}
\usepackage{soul}
\def\ubar#1{\underaccent{\bar}{#1}}
\begin{document}
$\ubar{x}$
\hl{$\bar{x}$}
\hl{$\ubar{x}$}
\end{document}
\hl{$\bar{x}$}
如果注释掉该行,它就会运行良好,从而将问题隔离在\hl
命令与\ubar
命令之间的交互中。有没有简单的解决方法?
答案1
作为第 22 条的变体soul
文档,您可以在突出显示/下划线之前将内容放入保存框中。这意味着换行符将不起作用,但除此之外它工作正常。
\hlu
MWE,显示手动保存盒和执行盒子操作的新命令:
\documentclass{amsart}
\usepackage{accents}
\usepackage{soul}
\newsavebox{\ubarbox}
\def\ubar#1{\underaccent{\bar}{#1}}
\def\hlu#1{\savebox{\ubarbox}{#1}\hl{{\usebox\ubarbox}}}
\begin{document}
\savebox{\ubarbox}{$\ubar{x}$}
\noindent ubar: $\ubar{x}$\\
hl bar: \hl{$\bar{x}$}\\
hl usebox: \hl{abc {\usebox\ubarbox}}\\
hlu: \hlu{$\ubar{x}$}\\
\end{document}
结果: