![xelatex:加载 unicode-math 后设置 mono 字体并修改 \parfillskip 会导致 texttt 中出现较大的空白](https://linux22.com/image/474144/xelatex%EF%BC%9A%E5%8A%A0%E8%BD%BD%20unicode-math%20%E5%90%8E%E8%AE%BE%E7%BD%AE%20mono%20%E5%AD%97%E4%BD%93%E5%B9%B6%E4%BF%AE%E6%94%B9%20%5Cparfillskip%20%E4%BC%9A%E5%AF%BC%E8%87%B4%20texttt%20%E4%B8%AD%E5%87%BA%E7%8E%B0%E8%BE%83%E5%A4%A7%E7%9A%84%E7%A9%BA%E7%99%BD.png)
请考虑以下示例:
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmonofont{NewCMMono10-Regular} % any other typewriter font would do
\begin{document}
\setlength{\parfillskip}{0pt plus 10pt}
\texttt{some text with whitespaces}
\texttt{some-text-with-whitespaces}
\end{document}
XeLaTeX 的结果是:
\setmonofont
如果在加载之前写入unicode-math
或者\usepackage{unicode-math}
删除该行,则不会发生这种情况。
由于 LuaLaTeX 不会发生这种情况,我认为这不是预期的行为?那么有什么方法可以解决这个问题吗?
答案1
不清楚为什么单词间距会变得灵活。不过,你可以修复这个缺陷。
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmonofont{NewCMMono10-Regular}[
WordSpace={1,0,0},
]
\begin{document}
\setlength{\parfillskip}{0pt plus 10pt}
\texttt{some text with whitespaces}
\texttt{some-text-with-whitespaces}
\end{document}
答案2
设置空格拉伸和收缩的 fontdimen 参数 3 和 4 被设置为非零,unicode-math
这看起来像是一个错误,你可以强制它们回到 0pt,例如
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmonofont{NewCMMono10-Regular} % any other typewriter font would do
\AddToHook{cmd/ttfamily/after}{%
\fontdimen3\font=0pt\relax
\fontdimen4\font=0pt\relax}
\begin{document}
\setlength{\parfillskip}{0pt plus 10pt}
\texttt{some text with whitespaces\showthe\fontdimen3\font}
\texttt{some-text-with-whitespaces}
\end{document}
但那不应该是必要的