我刚刚了解到无点 i 和 j 的存在\i
- 以及\j
,这恰好是我手写它们的方式。有没有办法通过某种字符/字形替换或重新定义使所有出现的这两个字符都显示为无点,而不是数百个控制序列?根据文档,TeX Gyre Adventor 具有 Unicode 0131 和 0237。该fontspec
软件包表示DTLS
“无点形式”功能是不受支持的 OpenType 功能。TeX by Topic 似乎没有我想要的功能。我正在使用 XeLaTeX。
答案1
使用 XeTeX 可以很容易地用 和 替换所有文本和i
。您可以使用强大的 Teckit 映射引擎。j
ı
ȷ
创建以下文件dotless.map
(确保它是 UTF-8)。这是tex-text
添加了无点转换的默认地图文件。
LHSName "dotted"
RHSName "dotless"
pass(Unicode)
; replace dotted i and j with dotless versions
"i" > "ı"
"j" > "ȷ"
; ligatures from Knuth's original CMR fonts
U+002D U+002D <> U+2013 ; -- -> en dash
U+002D U+002D U+002D <> U+2014 ; --- -> em dash
U+0027 <> U+2019 ; ' -> right single quote
U+0027 U+0027 <> U+201D ; '' -> right double quote
U+0022 > U+201D ; " -> right double quote
U+0060 <> U+2018 ; ` -> left single quote
U+0060 U+0060 <> U+201C ; `` -> left double quote
U+0021 U+0060 <> U+00A1 ; !` -> inverted exclam
U+003F U+0060 <> U+00BF ; ?` -> inverted question
.tec
使用以下命令将其编译为文件:
teckit_compile -u dotless.map -o dotless.tec
现在,您可以使用此映射文件加载任何具有无点字形的字体,并且所有i
s 和j
s 都将无点。如果您加载mathspec
包,您还可以替换数学i
和j
。
% !TEX TS-program = XeLaTeX
\documentclass[12pt]{article}
\usepackage{mathspec}
\usepackage{fontspec}
\setmainfont[Mapping=dotless]{Linux Libertine O}
\newfontfamily\dottedfont{Linux Libertine O}
\setmathfont(Latin)[Mapping=dotless]{Linux Libertine O}
\begin{document}
This is a document in which all the `i' and `j' characters are dotless.
This is not a joke or a jibe, so jump in and join the high jinks!
{\dottedfont But if this gives you the jitters you can junk the dotless version.}
You can even do it with math:
\[
i = j
\]
\end{document}
答案2
在 LuaTeX 中,您可以为此定义自己的字体功能。如果您希望替换仅适用于文本或数学模式,只需在下面的定义中注释掉相应的语句即可。我还定义了反向映射,因此您可以在无点模式下恢复带点的版本。
\documentclass{article}
\pagestyle{empty}
\usepackage{luacode}
\usepackage{unicode-math}
\begin{luacode*}
fonts.handlers.otf.addfeature {
name = "dotlessij",
type = "substitution",
data = {
-- Text mode
i = "ı",
j = "ȷ",
ı = "i",
ȷ = "j",
-- Math mode