![自动对特定字符后面的所有字符应用字距规则](https://linux22.com/image/375615/%E8%87%AA%E5%8A%A8%E5%AF%B9%E7%89%B9%E5%AE%9A%E5%AD%97%E7%AC%A6%E5%90%8E%E9%9D%A2%E7%9A%84%E6%89%80%E6%9C%89%E5%AD%97%E7%AC%A6%E5%BA%94%E7%94%A8%E5%AD%97%E8%B7%9D%E8%A7%84%E5%88%99.png)
我正在使用该字体编写一些文本\calligra
,在某些特定情况下,我想手动减少字母之间的字距。
请参阅下面的 MWE。我使用减小了N
和字母之间的字距。a
\kern-0.2em
\documentclass{article}
\usepackage{calligra}
\usepackage[T1]{fontenc}
\begin{document}
\calligra
Insert Name\vspace{.2cm}
Insert N\kern-0.2em ame
\end{document}
有没有办法让这个过程自动化?这样我就不用\kern
在每个之后都输入N
?
我见过这个问题这表明可以使用序言中定义的宏来实现自动字距调整规则。但是,这种情况只针对一种特定的字符组合。我想让它适用于跟在 后面的每个字符N
。我不确定该怎么做。
答案1
为了补充 Phelype 的回答:如果您正在使用pdftex
,您可以通过在序言中添加以下几行来获得相同的结果:
\usepackage[kerning=true]{microtype}
\DeclareMicrotypeSet*[kerning]{calligra}{encoding = T1, family = calligra}
\SetExtraKerning{encoding = T1, family = calligra}{N = {,-200}}
答案2
如果您可以使用 XeTeX,那么您可以使用\XeTeXinterchartoks
(ShreevatsaR 的想法)。
首先为字母 N(以及您希望的任何其他字母)创建一个“字符类”:
\newXeTeXintercharclass \mycharclassN
\XeTeXcharclass `\N \mycharclassN
然后您说 XeTeX 应该在和任何其他字符(类)\kern-0.2em
之间插入:N
0
\XeTeXinterchartoks \mycharclassN 0 = {\kern-0.2em}
那么你只需要使用以下命令激活角色间令牌:
\XeTeXinterchartokenstate = 1
\documentclass{article}
\usepackage{calligra}
\usepackage[T1]{fontenc}
\newXeTeXintercharclass \mycharclassN
\XeTeXcharclass `\N \mycharclassN
\XeTeXinterchartoks \mycharclassN 0 = {\kern-0.2em}
\begin{document}
\calligra
\parskip=0.2cm
Insert Name
Insert N\kern-0.2em ame
\XeTeXinterchartokenstate = 1
Insert Name
Na Nb Nc Nd Ne Nf Ng
Nh Ni Nj Nk Nl Nm
Nn No Np Nq Nr Ns Nt
Nu Nv Nw Nx Ny Nz
\end{document}