gb4e 破坏了 \caption 中的数学下标

gb4e 破坏了 \caption 中的数学下标

正如@egreg 指出的那样这个答案无法使用 biblatex 和 gb4e 一起编译 XeLaTeX 文档,该包gb4e激活了_^,这样就可以在普通文本中使用下标和上标,而无需切换到数学模式。不出所料,这可能会导致问题,这就是为什么该包gb4e有一种方法可以使用 来关闭此行为\noautomath

\noautomath鉴于此,除非取消注释,否则以下 MWE 不会编译。

\documentclass{article}

\usepackage{mwe}
\usepackage{graphicx}

\usepackage{gb4e}
%\noautomath

\begin{document}

\begin{figure}
\centering
\includegraphics{example-image-a}
\caption[$F_{0}$]{$F_{0}$}
\end{figure}

\end{document}

但是,让 MWE 编译并保留\noautomath注释的另一种方法是将该行更改\caption为类似的内容\caption[No subscript here]{F$_{0}$}

我的问题是:为什么使_主动状态中断其使用吗\caption

答案1

作为主动角色的定义_是脆弱的,因此它不能出现在移动论证中。

如果不想使用\noautomath,则必须记住在移动参数中将放在\protect前面,或者使用:_\sb

\caption[$F\protect_{0}$]{$F_{0}$}
\caption[$F\sb{0}$]{$F_{0}$}

请注意,如果指定了移动参数,则它是可选的。

如果包\automath中用\DeclareRobustCommand_[1]{...}而不是 来定义\def_##1{...},则不会有问题。所以这可能是对包维护者的一个建议。

另一个解决方法是借助\robustify以下主动角色etoolbox

\documentclass{article}

\usepackage{etoolbox}
\usepackage{graphicx}

\usepackage{gb4e}

\AtBeginDocument{%
  \begingroup\lccode`~=`_ \lowercase{\endgroup\robustify~}%
  \begingroup\lccode`~=`^ \lowercase{\endgroup\robustify~}%
}

\begin{document}

x_y x^y_z

\begin{figure}
\centering
\includegraphics{example-image-a}
\caption[$F_{0}$]{$F_{0}$}
\end{figure}

\end{document}

相关内容