我正在编写一个文档,其中包含使用包Verbatim
中的环境排版的 XML 片段fancyvrb
。
XML 经常包含双引号字符;我不太关心它们的格式,但我确实关心有人从 PDF 复制粘贴后会得到一个直双引号字符 (U+0022)。该upquote
软件包通常可以很好地修复这个问题。
但是,此特定文档需要使用 Google Noto 系列字体进行排版,而此特定字体upquote
似乎无法正常工作。以下是演示此问题的 MWE:
\documentclass[a4paper]{article}
\usepackage{fancyvrb,upquote}
\usepackage[no-math]{fontspec}
\defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
\setmonofont{Noto Mono}
\begin{document}
\begin{Verbatim}
<?xml version="1.0"?>
\end{Verbatim}
\end{document}
如果我注释掉该\setmonofont
行,一切正常,我得到了直双引号,但 Noto Mono 字体似乎与包有冲突upquote
。我尝试过以各种方式重新排序前言,但无济于事。如果它相关,我会用它xelatex
来生成 PDF。
有人能提出解决办法吗?字体不是我选择的,恐怕没有商量余地。
答案1
upquote
据我所知,它假定为传统字体。无论如何,无论您是否设置自定义字体,它都不会在此处执行任何操作。至少,删除它对使用自定义字体设置与不使用自定义字体设置的结果没有影响。差异只是应用 TeX 连字时使用不同字体的结果。
问题在于全局使用 TeX 连字符。您不希望这些连字符应用于代码列表。要避免这种情况,只需在设置等宽字体后设置默认功能,并明确添加您需要的特殊情况所需的任何功能。
我稍微简化了原始示例。
\documentclass[a4paper]{article}
\usepackage[no-math]{fontspec}
\setmonofont{Noto Mono}[Scale=MatchLowercase]
\defaultfontfeatures{Ligatures=TeX, Scale=MatchLowercase}
\begin{document}
\begin{verbatim}
<?xml version="1.0"?>
\end{verbatim}
\end{document}