如何在纯 TeX 中缩放/调整框的大小?

如何在纯 TeX 中缩放/调整框的大小?

我怎样才能调整(变形)纯 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 和最后一段之间的区别。)

相关内容