单引号似乎无法用 xelatex 和 Source Code Pro 缩放

单引号似乎无法用 xelatex 和 Source Code Pro 缩放

我不知道最近更新了哪些 LaTeX 软件包导致了这个问题,但我今天突然注意到我在\texttt{}verbatim环境中的单引号没有正确缩放。我正在使用 xelatex 和\setmonofont[Scale=0.7]{Source Code Pro}。这是之前(在 中)的单引号的样子\texttt{}

old

它们现在的样子是这样的:

new

它们在逐字环境中无法正确缩放:

same

这是我的最小示例:

\documentclass[12pt]{article}
\usepackage{fontspec}
\setmonofont[Scale=0.7]{Source Code Pro}

\usepackage{upquote}
\usepackage{textcomp}

\begin{document}

\texttt{'hello world'}

\texttt{\textquotesingle{}hello world\textquotesingle{}}

\begin{verbatim}
x = 'hello world'
\end{verbatim}

\end{document}

输出(包含xelatex所有软件包的最新版本tlmgr update --self --all,以及从以下位置下载的 Source Code ProGoogle 字体):

\texttt{}因此,文字单引号在(第一行)中缩放正确,但\textquotesingle{}中的单引号verbatim有问题。

如果我不使用这个upquote包,单引号的问题verbatim将会被修复(但我希望我能保留upquote):

现在我已经没有主意了,我不知道这个问题是否是由某个软件包的某个最新更新引起的,还是 Google 字体上的 Source Code Pro 字体发生了变化。我希望\textquotesingle{}和中的单引号verbatim可以正确显示(如果可能的话,使用软件包upquote)。

答案1

问题是 fontspec 现在使用的新的 TU 编码缺少\textquotesingle和的适当定义\textasciigrave(以前存在于中xunicode),因此默认定义开始textcomp生效。如果我添加定义,一切都很好。

编辑

缺失的定义已添加到 LaTeX 代码中。因此,在下次更新 LaTeX 后,它应该可以开箱即用。

编辑2

我的示例中的代码运行良好,因为只使用了打字机字体。使用罗马字体时,情况会更复杂,因为“TeX-ligatures”会干扰。正在进行一些讨论。

\documentclass[12pt]{article}
\usepackage{fontspec}
\setmonofont[Scale=0.7]{Source Code Pro}
\DeclareTextSymbol{\textquotesingle}     \UnicodeEncodingName{"0027}
\DeclareTextSymbol{\textasciigrave}     \UnicodeEncodingName{"0060}


\usepackage{upquote}
\usepackage{textcomp}

\begin{document}

\texttt{'hello world'}

\texttt{\textquotesingle{}hello world\textquotesingle{}}

\begin{verbatim}
x = 'hello world'
\end{verbatim}

\end{document}

enter image description here

答案2

upquote来自CTAN上的描述:

该软件包将打字机字体切换为 OT1 编码的 Computer Modern Typewriter,并修改 verbatim、verbatim*、\verb 和 \verb* 的行为以“` 和 ' 方式”打印。

您的问题是,加载的任何非 cm-font textcomp(过时的软件包)也与您的字体不匹配。因此您无法使用textcomp,并且由于它依赖于它,您也无法使用upquote两者。

相关内容