正如@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}