我最终屈服并转而使用 LuaLaTeX,这样我就可以在任何地方正确使用 UTF-8,当然,还可以使用\usepackage{fontspec}
:
\usepackage{fontspec}
\setmainfont[Numbers={OldStyle, Proportional}, Ligatures={TeX}]{Minion Pro}
我的问题是:那些常见的“TeX-Ligatures”在哪里定义,我该如何修改(阅读:添加)它们?(请注意,我并不反对破解一些核心(Lua)(La)TeX 文件。)
-- 变成 n 破折号,--- 变成 m 破折号:这些都很好并且恰当,但还有其他一些,最紧迫的是 ... (三个点)变成...(适当的省略号)。
答案1
它实际上并不是可见的,但如果你复制粘贴,你就会看到它有效:
\documentclass{article}
\usepackage{fontspec}
\directlua{
fonts.handlers.otf.addfeature{
name = "dotlig",
type = "ligature",
data = {
[0x2026] = { ".", ".", "." },
},
}
}
\setsansfont{texgyreheros}[RawFeature=+dotlig;]
\setmainfont{texgyretermes}[RawFeature=+dotlig;]
\begin{document}
some text .... some text
\sffamily
some text .... some text
\end{document}
答案2
有几种方法可以实现您的目标。其中一种方法——我相信其他读者会发布更多方法——是使用 LuaTeX 的process_input_buffer
回调将所有 实例替换为...
。\dots
这种方法可确保在文本模式下使用文本样式的省略号,在数学模式下使用数学样式的省略号。如果您希望整个文档都使用文本模式省略号,则应替换
s = s:gsub ( '%.%.%.', '\\dots{}' )
和
s = s:gsub ( '%.%.%.', '\\char"2026{}' )
在下面显示的Lua函数中。
这种基于预处理器的方法的优点是,您只需为整个文档运行一次代码。但潜在的缺点是,您无法选择性地对某些字体禁用或启用此功能,而对其他字体则不行。
\documentclass{article}
\usepackage{fontspec} % 'Ligatures={TeX,Common}' is enabled by default
\setmainfont{Minion Pro}[Numbers={OldStyle,Proportional}]
\setsansfont{Myriad Pro}[Numbers={OldStyle,Proportional}, Scale=MatchLowercase]
\usepackage{luacode}
\begin{luacode}
function dots2ellipsis ( s )
s = s:gsub ( '%.%.%.', '\\dots{}' )
return s
end
\end{luacode}
\AtBeginDocument{\directlua{luatexbase.add_to_callback (
"process_input_buffer" , dots2ellipsis , "dots2ellipsis" )}}
\begin{document}
abc123 -- --- ... | $...$
\sffamily
abc123 -- --- ... | $...$
\end{document}