使用 Fontspec 时会产生非均匀间距的 \ldots 显示。

使用 Fontspec 时会产生非均匀间距的 \ldots 显示。

考虑下面我编译的代码Lualatex

\documentclass{book}
%\usepackage{fontspec}
\begin{document}
\LARGE
Some words\ldots. % ellipsis and period without fontspec 
%Some words\ldots. % ellipsis and period with fontspec 
\end{document}

完美地产生了

在此处输入图片描述

但是,当我调用fontspec包并运行代码时:

\documentclass{book}
\usepackage{fontspec}
\begin{document}
\LARGE
%Some words\ldots. % ellipsis and period without fontspec 
Some words\ldots. % ellipsis and period with fontspec 
\end{document}

我明白了

在此处输入图片描述

问题:如何使用fontspec,才能产生\ldots.与不使用该包并使用 进行编译时一样好的效果lualatex

谢谢。

答案1

首先,\ldots在文本模式下使用最终会扩展为\textellipsis

然后,\textellipsis将导致非unicode引擎(如pdfTeX)和unicode引擎(如XeTeX和LuaTeX)的输出不同。

对于非 Unicode 引擎,字体编码都T1OT1使用默认定义,即排版三个间距松散的点。

% latex.ltx, line 7205:
\DeclareTextCommandDefault{\textellipsis}{%
   .\kern\fontdimen3\font
   .\kern\fontdimen3\font
   .\kern\fontdimen3\font}

对于unicode引擎,默认TU使用字体编码,这种编码方式\textellipsis会直接使用当前字体中的字符U+2026,而这个字符在默认的Latin Modern Roman字体中以三个紧密排列的点来表示。

一个快速的解决方法是将编码重新定义\textellipsis为其TU默认定义。

% compile with xelatex or lualatex
\documentclass{book}

% comment out this definition to see the default output
\DeclareTextCommand\textellipsis{TU}
  {\csname T1\string\textellipsis\endcsname}

\begin{document}
\usefont{T1}{cmr}{m}{n}
--\ldots-- % ellipsis in Computer Modern Roman

\usefont{TU}{lmr}{m}{n}
--\ldots-- % ellipsis in Latin Modern Roman
\end{document}

相关内容