blob: ab24297645cdba880862f8d670e537dd55ee824c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
% $Id: protcode.tex 883 2022-06-08 17:30:43Z karl $
% Public domain. Originally written by Han The THanh.
% Example \lpcode and \rpcode ("left/right protrusion code") settings
% for per-glyph tuning of protrusion, and a macro to execute them
%
% As written, this file does nothing but make definitions.
% Adapt and adjust for your needs.
%
% Much more in the LaTeX microtype package (https://ctan.org/pkg/microtype).
\def\setprotcode#1{%
% this macro works with OT1 encoding only -- mostly ASCII,
% but assumes OT1 for quotes and dashes.
\rpcode#1`\!=200
\rpcode#1`\,=700
\rpcode#1`\-=700
\rpcode#1`\.=700
\rpcode#1`\;=500
\rpcode#1`\:=500
\rpcode#1`\?=200
\lpcode#1`\`=700
\rpcode#1`\'=700
\lpcode#1 92=500 % ``
\rpcode#1 34=500 % ''
\rpcode#1 123=300 % --
\rpcode#1 124=200 % ---
\rpcode#1`\)=50
\rpcode#1`\A=50
\rpcode#1`\F=50
\rpcode#1`\K=50
\rpcode#1`\L=50
\rpcode#1`\T=50
\rpcode#1`\V=50
\rpcode#1`\W=50
\rpcode#1`\X=50
\rpcode#1`\Y=50
\rpcode#1`\k=50
\rpcode#1`\r=50
\rpcode#1`\t=50
\rpcode#1`\v=50
\rpcode#1`\w=50
\rpcode#1`\x=50
\rpcode#1`\y=50
\lpcode#1`\(=50
\lpcode#1`\A=50
\lpcode#1`\J=50
\lpcode#1`\T=50
\lpcode#1`\V=50
\lpcode#1`\W=50
\lpcode#1`\X=50
\lpcode#1`\Y=50
\lpcode#1`\v=50
\lpcode#1`\w=50
\lpcode#1`\x=50
\lpcode#1`\y=0
\adjustprotcode#1\relax
}
\newif\ifneedadjustprotcode
\newbox\boxA
\newcount\countA
\newcount\countB
\def\adjustprotcode#1{%
\needadjustprotcodefalse
\ifnum\pdftexversion = 14
\ifnum \expandafter`\pdftexrevision > `g
\needadjustprotcodetrue
\fi
\else\ifnum\pdftexversion > 14
\needadjustprotcodetrue
\fi \fi
\ifneedadjustprotcode
\countA=0
\loop
\ifcase\lpcode#1\countA\else
\adjustcp\lpcode#1\countA
\fi
\ifcase\rpcode#1\countA\else
\adjustcp\rpcode#1\countA
\fi
\advance\countA 1
\ifnum\countA < 256 \repeat
\fi
}
\def\adjustcp#1#2#3{%
\setbox\boxA=\hbox{%
\ifx#2\font\else#2\fi
\char#3}%
\countB=\wd\boxA
\multiply\countB #1#2#3\relax
\divide\countB \fontdimen6 #2\relax
#1#2#3=\countB\relax
}
|