加载包“unicode-math”时定义环境“Question”

加载包“unicode-math”时定义环境“Question”

我使用的是 Win10,TeXLive 2020。当我使用XeLaTeX下面编译代码时

\documentclass{article}
\usepackage{unicode-math}
\newenvironment{Question}{\textbf{envname}}{}
\begin{document}
    \begin{Question}
        test
    \end{Question}
\end{document}

加载 <code>unicode-math</code> 宏包

当我更改环境名称或卸载unicode-math包时,我可以得到正确的输出

\documentclass{article}
\usepackage{unicode-math}
\newenvironment{question}{\textbf{envname}}{}
\begin{document}
    \begin{question}
        test
    \end{question}
\end{document}

我可以得到

更改环境名称

为什么会发生这种情况以及如何在不改变环境名称的情况下修复它?

答案1

解释

\Question是数学符号命令之一unicode-math。因此,在 之后\newenvivonment{Question}...,被 重新定义为文档开头的\Question双问号 ( ) 。由于默认的unicode数学字体拉丁现代数学字体不提供此符号,XeLaTeX(或LuaLaTeX)会写入U+2047\begin{document}unicode-math

Missing character: There is no ⁇ in font [lmroman10-regular]:mapping=tex-text;!

到日志中,并test在输出中在环境内容之前留有空白。遗憾的是,大多数编辑器不会过滤此错误。

如果你继续前进\newenvivonment{Question}...\begin{document}你会得到

! LaTeX Error: Command \Question already defined.
               Or name \end... illegal, see p.192 of the manual.

这提醒您这\Question已经定义好了。

解决方法

可能需要使用其他环境名称,或者\Question在文档开头重新定义

\usepackage{unicode-math}

% this must appear after unicode-math
\AtBeginDocument{
  \renewenvironment{Question}{\textbf{envname}}{}
  % or let \Question to undefined, then \newenvironment{Question}
}
``

答案2

该命令\Question被定义为表示双问号字符,以及一大堆其他 Unicode 字符映射定义(“mathtable”),在文档开头完成。您应该选择一个不冲突的环境名称。

我同意 unicode-math 没有立即定义 很烦人\Question,因此 会被 检测到\newcommand;并且 unicode-math 在定义 时不会发出有关更改定义的警告。(无法发出警告的命令是\__um_sym:nnn。)

但为什么输出中没有双问号字符?将要日志文件中出现一条警告,解释如下:

Missing character: There is no ⁇ in font [lmroman10-regular]:mapping=tex-text;!

相关内容