\emph 在 amsthm 的“普通”样式中使用 XeLaTeX 或 LuaLaTeX 时效果不佳

\emph 在 amsthm 的“普通”样式中使用 XeLaTeX 或 LuaLaTeX 时效果不佳

考虑以下 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

在此处输入图片描述

相关内容