考虑以下 MWE:
\documentclass{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\usepackage{mathtools, amsthm}
\usepackage{unicode-math}
\setdefaultlanguage{english}
\theoremstyle{remark}
\newtheorem*{remark}{Remark}
\theoremstyle{definition}
\newtheorem{definition}{Definition}
\theoremstyle{plain}
\newtheorem{theorem}{Theorem}
\newtheorem{lemma}{Lemma}
\begin{document}
\begin{lemma}
This is an \emph{example lemma}.
\end{lemma}
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-engine: luatex
%%% TeX-master: t
%%% End:
我期望“This is an”按照“普通”定理样式以斜体显示,而“example lemma”通过命令变为直立\emph
。然而,这并没有发生,“example lemma”也保持斜体显示。
请注意,使用纯 LaTeX 不会发生这种情况,但使用 LuaLaTeX 和 XeLaTeX 都会发生这种情况。
答案1
这与 的重新定义有关,它不考虑上下文,而只考虑\em
内部的嵌套。fontspec
\em
\em
下面的解决方法应该有效:
\documentclass{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\usepackage{mathtools, amsthm}
\usepackage{unicode-math}
\setdefaultlanguage{english}
\theoremstyle{remark}
\newtheorem*{remark}{Remark}
\theoremstyle{definition}
\newtheorem{definition}{Definition}
\theoremstyle{plain}
\newtheorem{theorem}{Theorem}
\newtheorem{lemma}{Lemma}
\ExplSyntaxOn
\cs_set:cpn {th@plain} { \int_zero:N \l__fontspec_em_int \em }
\ExplSyntaxOff
\begin{document}
\begin{lemma}
This is an \emph{example lemma}.
\end{lemma}
\end{document}
的默认\th@plain
扩展为\itshape
;使其扩展为\em
可实现嵌套同步。
与此相关向 `fontspec 发出报告。
如果您希望\em
上下文中出现的语句以直立方式排版,请\int_zero:N \l__fontspec_em_int
从 的重新定义中删除该部分\th@plain
。