xelatex:加载 unicode-math 后设置 mono 字体并修改 \parfillskip 会导致 texttt 中出现较大的空白

xelatex:加载 unicode-math 后设置 mono 字体并修改 \parfillskip 会导致 texttt 中出现较大的空白

请考虑以下示例:

\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}

但那不应该是必要的

相关内容