\documentclass{article}
\usepackage{fontspec}
\setmainfont{DejaVu Serif}
\setsansfont{DejaVu Sans}
\setmonofont{DejaVu Sans Mono}
\begin{document}
Hello World!
\textsf{Hello World!}
\texttt{Hello World!}
\end{document}
使用 XeLaTeX 编译后得到如下结果:
使用 SumatraPDF 复制输出甚至会显示字母之间的常规空格字符和单词之间的换行符:
Hello World!
Hello World!
H e l l o
W o r l d !
(但是,使用 Adobe Reader XI Win 复制时,会出现三行相同的内容。)
LuaLaTeX 不会出现此问题:
无论使用哪种 PDF 查看器,LuaLaTeX 的 OCR 层文本都是完美无缺的。
我猜这是 XeTeX 的一个错误?我能以某种方式规避它吗?
我使用的是 MiKTeX 2.9 和 DejaVu 字体 2.33 版,我认为这些字体是 Windows (7) 预装的,至少我不记得手动安装过这些字体。这个版本似乎当前版本,无论如何。
附言:如果有人能推荐另一种等宽字体,用于 a) 与 Linux Libertine 完美匹配且 b) 包含小写希腊字母的代码,那也会很有帮助。但这只是题外话:)
。
答案1
您是否尝试过更详细地指定字体?我在 MiKTeX 2.9 中测试了以下内容,没有问题。
\documentclass{article}
\usepackage{fontspec}
\defaultfontfeatures{
Extension = .ttf ,
Ligatures = TeX ,
UprightFont = * ,
ItalicFont = *-Oblique ,
BoldFont = *-Bold ,
BoldItalicFont = *-BoldOblique
}
\setmainfont[ItalicFont = *-Italic, BoldItalicFont = *-BoldItalic]{DejaVuSerif}
\setsansfont{DejaVuSans}
\setmonofont{DejaVuSansMono}
\begin{document}
Hello World!
\textsf{Hello World!}
\texttt{Hello World!}
\end{document}
您确实需要dejavu
安装该软件包。
答案2
问题其实与\setmainfont{Linux Libertine O} 使用 pfb 文件而不是 otf:XeLaTeX 甚至没有使用 Windows 字体,而是使用 texmf 树中的字体(出于某种原因,这些字体似乎存在缺陷)。解决方案与另一个问题相同:告诉 MiKTeX 不要使用这些字体。
具体操作如下:
打开localfonts2.conf
文件。你可能在不同的地方有此文件的多个版本;对我有用的版本在C:\Users\doncherry\AppData\Roaming\MiKTeX\2.9\fontconfig\config
(“Admin” MiKTeX 安装)中。文件应如下所示:
<?xml version="1.0"?>
<fontconfig>
<selectfont>
<rejectfont>
<glob>C:/Program Files (x86)/MiKTeX 2.9/fonts/type1/public/dejavu/*</glob>
</rejectfont>
</selectfont>
</fontconfig>
使用此配置,一切对我来说都正常。根据哈立德·霍斯尼,将来这个规范将不再需要,也许在 MiKTeX 3.0 中。
更新:
虽然不使用 Type1 字体可以解决该问题,但 Type 1 字体仍然有缺陷。我联系了该dejavu
软件包的作者;他指出了问题所在(Em 大小太大),并表示将在软件包的未来版本中修复该问题。