对于教科书上的一些问题,我需要数字 0...9,就像苏联邮政信封上的邮政编码一样,
像这样
有人知道在 LaTeX 中可以使用的字体或软件包吗?谢谢
答案1
没有字体或包但是...
\documentclass{article}
\def\zz#1{%
\begin{picture}(10,20)\thicklines
\ifx7#1\else\ifx4#1\else\ifx1#1\else
\put(0,0){\line(1,0){10}}%
\fi\fi\fi
\ifx7#1\else\ifx1#1\else\ifx0#1\else
\put(0,10){\line(1,0){10}}%
\fi\fi\fi
\ifx4#1\else\ifx1#1\else
\put(0,20){\line(1,0){10}}%
\fi\fi
%
\ifx9#1\else\ifx8#1\else\ifx7#1\else\ifx6#1\else\ifx5#1\else\ifx4#1\else\ifx3#1\else\ifx2#1\else\ifx1#1\else\ifx0#1\else
\put(0,0){\line(1,1){10}}%
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
\ifx9#1\else\ifx8#1\else\ifx6#1\else\ifx5#1\else\ifx4#1\else\ifx3#1\else\ifx2#1\else\ifx0#1\else
\put(0,10){\line(1,1){10}}%
\fi\fi\fi\fi\fi\fi\fi\fi
%
\ifx9#1\else\ifx5#1\else\ifx4#1\else\ifx3#1\else\ifx1#1\else
\put(0,0){\line(0,1){10}}%
\fi\fi\fi\fi\fi
\ifx7#1\else\ifx3#1\else\ifx2#1\else\ifx1#1\else
\put(0,10){\line(0,1){10}}%
\fi\fi\fi\fi
\ifx7#1\else\ifx2#1\else
\put(10,0){\line(0,1){10}}%
\fi\fi
\ifx7#1\else\ifx6#1\else\ifx5#1\else
\put(10,10){\line(0,1){10}}%
\fi\fi\fi
\end{picture}}
\begin{document}
\zz0 \zz1 \zz2 \zz3 \zz4 \zz5 \zz6 \zz7 \zz8 \zz9
\end{document}
答案2
这是使用原始的解决方案\pdfliteral
。它与格式无关。如果您需要 10 pt 以外的其他尺寸,可以在使用前使用缩放。
\def\bA{0 0 }\def\bB{5 0 }\def\bC{0 5 }\def\bD{5 5 }\def\bE{0 10 }\def\bF{5 10 }
\def\SUdigit#1{\leavevmode\kern1pt\hbox to5pt{\vbox to 10pt{}%
\pdfliteral{q 0.9963 0 0 0.9963 0 0 cm 1 j 1 J
\ifcase#1 \bA m \bB l \bF l \bE l h S \or % 0
\bC m \bF l \bB l S \or % 1
\bE m \bF l \bD l \bA l \bB l S \or % 2
\bE m \bF l \bC l \bD l \bA l S \or % 3
\bE m \bC l \bD l S \bF m \bB l S \or % 4
\bF m \bE l \bC l \bD l \bB l \bA l S \or % 5
\bF m \bC l \bA l \bB l \bD l \bC l S \or % 6
\bE m \bF l \bC l \bA l S \or % 7
\bA m \bB l \bF l \bE l h S \bC m \bD l S \or % 8
\bA m \bD l \bF l \bE l \bC l \bD l S \fi % 9
Q}\hss}\kern1pt
}
\SUdigit 0 \SUdigit 1 \SUdigit 2 \SUdigit 3 \SUdigit 4
\SUdigit 5 \SUdigit 6 \SUdigit 7 \SUdigit 8 \SUdigit 9
\bye
答案3
答案4
当 Knuth 在 1977 年设计 TeX 时,他设计了一个名为 METAFONT 的配套系统(这实际上是他当时的主要动机:定义自己的字体)。这是一种声明性语言,其中解释如何绘制字符,这是它的优点和缺点。它直接以特定的分辨率生成像素表示,而从那时起,世界其他地方最终都朝着另一个方向发展,因此对于大多数应用程序(例如在屏幕上渲染)来说,它现在效果不佳。所以这个问题更多的是出于兴趣/好奇,而不是(唉)实用性,但尽管如此,这个问题还是一个简单演示 METAFONT 的机会。(请注意,这是我第一次使用 METAFONT,因此它可能无法说明良好的做法。)
对于这些邮政编码数字,如果您想象一下它们绘制的网格,您可以指定有趣的点的坐标并给它们命名 1 到 6(w
和h
是字符的宽度和高度):
m := 0.5*h;
z1=(0,h); z2=(w,h);
z3=(0,m); z4=(w,m);
z5=(0,0); z6=(w,0);
然后可以给每个字符一个简单的定义:例如,字符 1 可以定义为从点 3 到点 2 到(点 4 到)点 6 画一条线。这是你可以告诉 METAFONT 的内容:
draw z3--z2--z6;
begincchar
METAFONT 具有宏(如 TeX),因此使用用于定义指向z1
的宏z6
,10 位数字的定义可以简单如下:
begincchar("0"); draw z2--z1--z5--z6--cycle; endchar;
begincchar("1"); draw z3--z2--z6; endchar;
begincchar("2"); draw z1--z2--z4--z5--z6; endchar;
begincchar("3"); draw z1--z2--z3--z4--z5; endchar;
begincchar("4"); draw z1--z3--z4; draw z2--z6; endchar;
begincchar("5"); draw z2--z1--z3--z4--z6--z5; endchar;
begincchar("6"); draw z2--z3--z5--z6--z4--z3; endchar;
begincchar("7"); draw z1--z2--z3--z5; endchar;
begincchar("8"); draw z2--z1--z5--z6--cycle; draw z3--z4; endchar;
begincchar("9"); draw z4--z3--z1--z2--z4--z5; endchar;
你可以通过编程来参数化各种东西,比如宽度和高度、左右“间隙”(侧边距)、中间线的高度、字体的粗细等,以生成不同的字体。输入以下内容postaldefault.mf
:
leftgap := 0.1;
rightgap := 0.1;
penthickness := 0.08;
midlineheight := 0.5;
toplineheight := 1;
width# := 9pt#;
height# := 10pt#;
input postal
以及以下内容postalbizarre.mf
leftgap := 0.4;
rightgap := 0.1;
penthickness := 0.12;
midlineheight := 0.3;
toplineheight := 0.9;
width# := 5pt#;
height# := 8pt#;
input postal
两者都是包装公共字符定义的参数文件,位于postal.mf
:
mode_setup;
def begincchar(expr c) =
beginchar(c, width#, height#, 0);
t := toplineheight * h;
m := midlineheight * h;
a := leftgap * w; b := w - rightgap * w;
z1=(a,t); z2=(b,t);
z3=(a,m); z4=(b,m);
z5=(a,0); z6=(b,0);
pickup pencircle scaled (penthickness * w);
penlabels(1,2,3,4,5,6);
enddef;
begincchar("0"); draw z2--z1--z5--z6--cycle; endchar;
begincchar("1"); draw z3--z2--z6; endchar;
begincchar("2"); draw z1--z2--z4--z5--z6; endchar;
begincchar("3"); draw z1--z2--z3--z4--z5; endchar;
begincchar("4"); draw z1--z3--z4; draw z2--z6; endchar;
begincchar("5"); draw z2--z1--z3--z4--z6--z5; endchar;
begincchar("6"); draw z2--z3--z5--z6--z4--z3; endchar;
begincchar("7"); draw z1--z2--z3--z5; endchar;
begincchar("8"); draw z2--z1--z5--z6--cycle; draw z3--z4; endchar;
begincchar("9"); draw z4--z3--z1--z2--z4--z5; endchar;
end
现在您可以在 TeX/LaTeX 中使用这些字体:
\documentclass{article}
\begin{document}
\font\postaldefault=postaldefault
\font\postalbizarre=postalbizarre
\pagestyle{empty}
These digits {\postaldefault 0123456789} are postal.
These digits {\postalbizarre 0123456789} are postal.
\end{document}
(注意:为了获得最佳效果,不要使用 编译上述内容pdflatex
,而是使用latex
,然后使用类似dvipng -D 1200
DVI 文件上的命令。我告诉过你这个答案不是为了实用!)