我怎样才能调整(变形)纯 TeX 中框的内容大小,即赋予它新的宽度、高度和深度?
\setbox0=\hbox{Hello!}
\copy0 % output at orig. size
%
% code which resizes box 0
% ...
%
\box0 % output with altered dimensions
\bye
答案1
为了解决这个问题,以下是与之有关的事情pdftex
。
您可以更改“当前矩阵”,该矩阵指示pdftex
如何调整要打印的材料的大小。只需保存当前设置,更改矩阵并恢复即可。
\setbox0=\hbox{Abc}
X\copy0
\bigskip
X\pdfsave\pdfsetmatrix{0.87 -0.5 0.5 0.87}\rlap{\smash{\copy0}}\pdfrestore
\bigskip
X\box0
\bye
你看到问题了吗?在\pdfsave
和之间\pdfrestore
不应该有水平移动,所以你需要计算你正在转换的文本的表观尺寸。旋转时需要一些三角函数,而向任一方向缩放则更容易。你可以使用类似
\pdfsetmatrix{2 0 0 3}
在 x 方向上加倍,在 y 方向上增加三倍,并排版一个具有以下表观尺寸的空框:
\setbox0=\hbox{Abc}
X\copy0 X
\bigskip
X\pdfsave\pdfsetmatrix{2 0 0 3}\rlap{\smash{\copy0}}\pdfrestore
{\setbox2=\hbox{}\wd2=2\wd0 \ht2=3\ht0 \dp2=3\dp0 \box2}X
\bigskip
X\box0 X
\bye
请注意,为整个建筑保留了适当的空间。
如果您还想支持 XeTeX,则必须使用完全不同的方法,发出合适的\special
命令。\special
需要不同的命令latex+dvips
。
答案2
您无法直接在纯 TeX 中执行此操作,但在 METAPOST 中可以很容易地实现,从而生成可包含在文档中的图片。
如果你不了解 METAPOST,你可以从这里开始
http://www.tug.org/metapost.html
我特别喜欢André Heck 的教程,其中包含您想要执行的操作的示例。
改编自上述教程的示例:
beginfig(1);
picture pic; pic := image(
draw btex $e^{\pi i}=-1$ etex;
draw bbox currentpicture;
);
draw pic scaled 2.5;
draw pic scaled 1.5;
draw pic scaled 0.5;
endfig;
end;
结果是
答案3
使用纯 XeTeX,一种方法是创建要缩放的部分,将其放在不同的文件中,然后\XeTeXpdffile that_file_name.pdf scaled <amount>
。例如,foo.tex
要缩放其内容的文件:
\hoffset=-1in \voffset=-1in % remove 1 inch offsets
\hsize=20pc % divide \hsize by 1.5 (i.e., the amount to be scaled)
\def\strut{\vrule height.7\baselineskip depth.3\baselineskip width0pt }
\setbox0\hbox{\vbox{\strut
Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit
lobortis nisl ut aliquip ex ea commodo consequat. At vero eos et accusam et
justo duo dolores et ea rebum.
\strut}}%
\pdfpagewidth=\wd0 \pdfpageheight=\dimexpr\ht0+\dp0
\box0\bye
以及使用它的文件bar.tex
:
\hsize=30pc
Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Stet clita kasd gubergren, no sea takimata sanctus est.
\XeTeXpdffile foo.pdf scaled 1500 % 30pc divided by 1.5 (1500 here) is 20pc
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
\bye
结果是:
(我认为这是所\parskip
包含的 PDF 和最后一段之间的区别。)