如何使所有 i 和 j 无点,字形替换

如何使所有 i 和 j 无点,字形替换

我刚刚了解到无点 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

现在,您可以使用此映射文件加载任何具有无点字形的字体,并且所有is 和js 都将无点。如果您加载mathspec包,您还可以替换数学ij

% !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
        

相关内容