% $Id: microtype-plain-tub.tex 634 2025-05-03 22:19:18Z karl $ % Public domain. % This microtype-plain.tex file is a deficient and minimal % implementation of microtype (font expansion and protrusion) for plain % pdfTeX and plain LuaTeX. % % It operates only on the predefined \font control sequences \tenrm, % \tensl, and \tenbf. (Not \tentt, since messing with typewriter can % mess up code listings, etc.) % % It uses iftex.sty to detect the engine, and assumes normal catcodes. % % If anyone is interested in writing real support for microtype in % plain, e.g., able to use the per-font configuration files in the % microtype (LaTeX) package, that would be great. Feel free to email % tugboat@tug.org with code, questions, or suggestions, or just release it. % expansion command differs between the engines. \input iftex.sty \ifluatex \adjustspacing=2 \def\mtplntubfontexpand#1{% \mtplntubsetefcode#1\relax \expandglyphsinfont#1 20 20 1\relax} \else \pdfadjustspacing=2 \def\mtplntubfontexpand#1{% \mtplntubsetefcode#1\relax \pdffontexpand#1 20 20 1 autoexpand\relax} \fi % From Thanh's efcode.tex distributed as part of pdfTeX. % Argument is a \font control sequence, e.g., \tenrm. \def\mtplntubsetefcode#1{% \efcode#1`\2=700 \efcode#1`\3=700 \efcode#1`\6=700 \efcode#1`\8=700 \efcode#1`\9=700 \efcode#1`\A=500 \efcode#1`\B=700 \efcode#1`\C=700 \efcode#1`\D=500 \efcode#1`\E=700 \efcode#1`\F=700 \efcode#1`\G=500 \efcode#1`\H=700 \efcode#1`\K=700 \efcode#1`\M=700 \efcode#1`\N=700 \efcode#1`\O=500 \efcode#1`\P=700 \efcode#1`\Q=500 \efcode#1`\R=700 \efcode#1`\S=700 \efcode#1`\U=700 \efcode#1`\W=700 \efcode#1`\Z=700 \efcode#1`\a=700 \efcode#1`\b=700 \efcode#1`\c=700 \efcode#1`\d=700 \efcode#1`\e=700 \efcode#1`\g=700 \efcode#1`\h=700 \efcode#1`\k=700 \efcode#1`\m=700 \efcode#1`\n=700 \efcode#1`\o=700 \efcode#1`\p=700 \efcode#1`\q=700 \efcode#1`\s=700 \efcode#1`\u=700 \efcode#1`\w=700 \efcode#1`\z=700 } % enable for the basic ten-point fonts. Italics is too different. \mtplntubfontexpand\tenrm \mtplntubfontexpand\tensl \mtplntubfontexpand\tenbf % protrusion, from Thanh's protcode.tex distributed as part of pdfTeX. % This macro works with OT1 encoding only -- mostly ASCII, % but assumes OT1 for quotes and dashes. See protcode.tex for more macros. \def\mtplntubsetprotcode#1{% \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 } \mtplntubsetprotcode\tenrm % protrusion on slanted and bold seems potentially troublesome. % See microtype-plain-test.tex for a test file.