我不知道最近更新了哪些 LaTeX 软件包导致了这个问题,但我今天突然注意到我在\texttt{}
和verbatim
环境中的单引号没有正确缩放。我正在使用 xelatex 和\setmonofont[Scale=0.7]{Source Code Pro}
。这是之前(在 中)的单引号的样子\texttt{}
:
它们现在的样子是这样的:
它们在逐字环境中无法正确缩放:
这是我的最小示例:
\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}
答案2
upquote
来自CTAN上的描述:
该软件包将打字机字体切换为 OT1 编码的 Computer Modern Typewriter,并修改 verbatim、verbatim*、\verb 和 \verb* 的行为以“` 和 ' 方式”打印。
您的问题是,加载的任何非 cm-font textcomp
(过时的软件包)也与您的字体不匹配。因此您无法使用textcomp
,并且由于它依赖于它,您也无法使用upquote
两者。