如何获取文本模式在一个直立数学字体与unicode-math
程序包已加载?
1. 没有unicode-math
代码:
\documentclass{article}
\begin{document}
affinity\par
$\mathrm{affinity}$\par
\end{document}
输出:
字距调整和连字文本模式。
2. 使用unicode-math
代码:
\documentclass{article}
\usepackage{unicode-math}
\begin{document}
affinity\par
$\mathrm{affinity}$\par
\end{document}
输出:
字距调整和连字数学模式.我希望文本模式这里。
答案1
unicode-math 中数学字母命令的使用有些问题,有在 github 上开放问题其中提到\mathit
但是\mathrm
一样的。
您可以重新定义\mathrm
使用罗马文本字体,如下所示:
\documentclass{article}
\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
\setmathfont[range=\mathup]{Latin Modern Roman}
\begin{document}
affinity\par
$\mathrm{affinity}$\par
\end{document}
不包含 mathit 的工作版本
\documentclass{article}
\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
\setmathfont[range=\mathup]{Latin Modern Roman}
%\setmathfont[range=\mathit]{lmroman12-italic}% affects normal math as well.
\DeclareMathAlphabet\xxmathit{EU2}{lmr}{m}{it}% EU1 for xetex EU2 for luatex
\def\xmathit#1{\xxmathit{\mathup{#1}}}% right font but ff ligature broken
\begin{document}
\showoutput
1 affinity\par
2 \textit{affinity}\par
3 $affinity$\par
4 $\mathrm{affinity}$\par
5 $\xmathit{affinity}$\par
\end{document}
答案2
为了跟进大卫卡莱尔 (David Carlisle) 对该unicode-math
软件包的回答的评论中的讨论:
在 LaTeX 中,数学模式有两种字体:
- 一个字母(变量),通常称为数学字体(最好叫数学字母字体(英文):
- 一个字,通常称为数学文本字体(最好叫数学字字体),
以及文本模式下的一种文本字体,通常称为文本字体。
这文本字体和数学文本字体可能不同:
\documentclass{article}
\renewcommand{\familydefault}{ppl} % sets Palatino as text font
\begin{document}
$\mathnormal{affinity}$\par % math letter font
$\mathit{affinity}$\par % math word font
$\textit{affinity}$\par % text font
\end{document}
这里\mathnormal
,\mathit
导致\textit
了使用三种不同的字体:分别是Latin Modern Math、Latin Modern和Palatino。
加载包后unicode-math
,输出会有所不同:
\documentclass{article}
\usepackage{unicode-math}
\setmainfont{Palatino} % sets Palatino as text font
\setmathfont{Latin Modern Math} % sets Latin Modern Math as math letter font
\begin{document}
$\mathnormal{affinity}$\par % math letter font
$\mathit{affinity}$\par % math word font
$\textit{affinity}$\par % text font
\end{document}
在这里,包重新定义\mathnormal
为无,\mathit
并数学字母字体(代替数学字字体在经典 LaTeX 中)。因此默认情况下,该unicode-math
包会破坏 LaTeX 的标准行为。这就是为什么 David Carlisle 开设了一个问题在 Github 上,正如他在回答中所说(还有另一个有趣的 Github 问题涉及同样的问题这里)。
正如 David Carlisle 在 Github 问题中所建议的那样,我首先想到的是\mathwxx
为数学引入新的数学字体命令单词包中的字体unicode-math
,以保持向后兼容性:
但最后,我想知道这些新的数学字体命令是否\mathwxx
需要,甚至它们是否有意义:事实上,我们什么时候需要使用直立数学信字体到底是什么?数学字母字体仅适用于变量,因此它们应该始终斜体, 绝不直立。我们只需要一个直立的数学字体来表示非变量,也就是数学单词字体,所以我们最好用数学公式来代替信Unicode 范围的字体\mathup
和\mathbf
数学单词字体:
\documentclass{article}
\usepackage{unicode-math}
\setmainfont{Palatino}
\setmathfont{Latin Modern Math}
\setmathfont[range=\mathup]{Latin Modern Roman} % sets a math word font instead of the default math letter font
\setmathfont[range=\mathbfup]{lmroman12-bold} % sets a math word font instead of the default math letter font
\let\mathnormal\mathit % redefines \mathnormal as before the unicode-math package
\begin{document}
\noindent
\texttt{\backslash mathup}: $\mathup{affinity}$\\
\texttt{\backslash mathbf}: $\mathbf{affinity}$\\
\texttt{\backslash mathit} or \texttt{\backslash mathnormal}: $\mathit{affinity}$ (default)\\
\texttt{\backslash mathbfit}: $\mathbfit{affinity}$\\
\end{document}
因此,通过该设置,我们获得了标准的 LaTeX 行为。