使用 unicode-math 和 newunicodechar 在数学模式之外使用 unicode 素数字符

使用 unicode-math 和 newunicodechar 在数学模式之外使用 unicode 素数字符

我正在尝试使用 unicode-math、newunicodechar 和 LuaLaTeX/XeLaTeX 来编写我的 LaTeX 代码,利用源文本中的 unicode 字符。

除了素数字符外,这可以正常工作;如果我尝试使用\newunicodechar它,如果素数超出数学模式,它会引入错误。

\documentclass{article}

\usepackage{unicode-math}
\setmathfont{XITS Math}
\usepackage{newunicodechar}
\newunicodechar{′}{any replacement character}

\begin{document}
This prime causes “Missing \$ inserted”: ′
\end{document}

不幸的是,我无法将素数字符的使用限制在数学模式中;我正在编写文学 Agda 并希望在我的代码中使用素数字符,而 Agda 生成的 LaTeX 源代码不是数学模式。

有没有什么办法可以解决这个问题?就目前情况而言,我唯一的解决方案似乎是在代码中避免使用 prime 或运行脚本来替换 Agda 生成的 LaTeX 源中的 prime 实例。

答案1

请注意(正如 Ulrike 在评论中提到的)如果您只是想在数学模式之外排版素数,您需要做的就是加载包含该字形的字体:

\documentclass{article}
\usepackage{unicode-math}
\setmainfont{texgyrepagella-regular.otf}
\begin{document}
This prime: ′
\end{document}

答案2

作为@egreg 指出,unicode-math 重新定义了文档开头的素数字符,因此包装调用\newunicodechar可以\AtBeginDocument解决问题。

需要注意的是,虽然我通常使用表格

\newunicodechar{α}{\ensuremath{\mathrm{α}}}

用于定义 unicode 字符,使用 prime 会导致崩溃。因此请确保改用单引号。

\documentclass{article}

\usepackage{unicode-math}
\setmathfont{XITS Math}
\usepackage{newunicodechar}
\AtBeginDocument{\newunicodechar{′}{\ensuremath{\mathrm{'}}}}
\AtBeginDocument{\newunicodechar{″}{\ensuremath{\mathrm{''}}}}

\begin{document}
Now I can write a prime: A′.

Double prime had the same problem, and is resolved the same way: A″.
\end{document}

相关内容