![使用 Fontspec 时会产生非均匀间距的 \ldots 显示。](https://linux22.com/image/445911/%E4%BD%BF%E7%94%A8%20Fontspec%20%E6%97%B6%E4%BC%9A%E4%BA%A7%E7%94%9F%E9%9D%9E%E5%9D%87%E5%8C%80%E9%97%B4%E8%B7%9D%E7%9A%84%20%5Cldots%20%E6%98%BE%E7%A4%BA%E3%80%82.png)
考虑下面我编译的代码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 引擎,字体编码都T1
将OT1
使用默认定义,即排版三个间距松散的点。
% 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}