我使用的是 Win10,TeXLive 2020。当我使用XeLaTeX
下面编译代码时
\documentclass{article}
\usepackage{unicode-math}
\newenvironment{Question}{\textbf{envname}}{}
\begin{document}
\begin{Question}
test
\end{Question}
\end{document}
当我更改环境名称或卸载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;!