当 # 符号跟在变量名后面时,它代表什么意思?例如
arrow_len#
对比arrow_len
答案1
Metafont 在由当前分辨率决定的网格中工作,并且只使用数字,而不是尺寸。在参数文件中,您可以指定尺寸pt#
,例如
ht#:=6pt#;
然后你就可以在图片中使用了ht
,说完之后
define_pixels(ht);
例如,
ht#:=6pt#; define_pixels(ht);show ht;
216
当 的值为 36 时将打印hppp
(这对应于 2602 点/英寸的分辨率,这是未指定模式时的默认值)。这样,ht
始终表示覆盖 6pt 距离所需的像素数。在绘制字符时,可以安全地说
ht:=6pt;
因为分辨率是已知的。在诸如此类的参数文件中,cmr10.mf
必须将参数指定为“清晰尺寸”,这样它们将与分辨率无关,因为无法预先知道何时设置分辨率(在设置字体参数之前或之后)。例如logo10.mf
,
% 10-point METAFONT logo
font_size 10pt#; % the "design size" of this font
ht#:=6pt#; % height of characters
xgap#:=0.6pt#; % horizontal adjustment
u#:=4/9pt#; % unit width
s#:=0; % extra space at the left and the right
o#:=1/9pt#; % overshoot
px#:=2/3pt#; % horizontal thickness of pen
input logo % now generate the font
bye % and stop.
并从设置分辨率等logo.mf
开始。mode_setup
类似地,必须“输出”的维度应该以“尖锐形式”指定;从digits.mf
我们得到
beginchar("1",9u#,fig_height#,0);
因为这会在文件中写入正确的点值gf
;但在定义角色的形状时u
使用。这有点复杂;应该记住
a#=1pt#;define_pixels(a);
将值分配1
给a#
并将的值分配hppp
给a
,这样您就始终知道何时需要以点为单位的测量值或实际像素数。
还要注意的是,改变价值a
将不是改变的值a#
,它是在函数的帮助下反过来的define_pixels
。