Postscript 输出

Postscript 输出

我希望这不会太离题,因为我想不出还有哪个地方有更多专家可以向我请教。背景是,我想改进我的 ASCII 艺术算法,它运行良好(这里大约 70k 个字母),但我还有一些其他想法想要实现:

在此处输入图片描述

除了算法本身的一些细节之外,我还想实现以下内容:

Postscript 输出

我想以行距与字母间距一样大的方式放置 500x500 个字母,并且自动计算字体大小,以便此矩形适合某些纸张尺寸(例如 A4)。这是我为测试而编写的一个最小的 PostScript 示例

%!PS-Adobe-2.0
%%Creator: [email protected]
%%EndComments
/Courier findfont 7.7 scalefont setfont
72 500 translate
0 0 moveto
(abcdefhikl) show
0 -5 moveto
(mnorstuvwx) show
0 -10 moveto
(zABCDEFGHI) show
0 -15 moveto
(JKLMNOPRS!) show
0 -20 moveto
(TUVWXYZ.=-) show
0 -25 moveto
showpage
%%Pages: 1

产生

在此处输入图片描述

请注意,我只是猜测字体缩放和moveto大小。

问题:如果我现在只知道有多少个字母 nx*ny,是否有可能计算字体缩放比例moveto以使矩形适合纸张?

字体亮度计算

为了获得真正好的输出,我需要尽可能精确地计算字母的亮度。在上面的 ps 文件图像中,您可以看到所有字母都被一个小的白色边框包围。这个边框在 x 方向上取决于字母间的距离,在 y 方向上取决于 font-scale/moveto值。

问题: 是否可以为每个字母创建高分辨率图像(png、tiff 等)?请注意,为了正确计算,图像中的白色边框需要与字母被其他字母包围时的大小相同。

进一步说明

我决定不采用像“Qyg”这样的字母,因为它有一个子长度因为它们非常稀少,使得线条更加分散。这使得计算正确的线条间距变得不可能。

我始终乐意听取其他建议。我选择了后脚本输出,因为我可以非常轻松地将 ascii 文本转换为表单(...) show; ... moveto。而且,我可以控制字母缩放和距离。也许有更好/更简单的方法。

答案1

下面的内容不是成品,但可以为您提供一些想法,也许可以指导您如何进行。主要特点:我使用 \texttt 只是为了快速完成,但您应该以适当的方式调用非比例字体。我将 \baselineskip 设置为某个适当的数字,它将控制垂直行间距。您的字体宽度加上 baselineskip 将决定草图中每个字母使用的框大小。最后,我使用 \scaleto 程序将结果缩放到最终所需的垂直尺寸,在本例中为 3"。我认为,调整这三个数字(字体字符宽度 [由使用的字体决定]、baselineskip 和 scaleto 大小)应该可以让您生成所需的内容。

\documentclass[12pt]{article}
\usepackage{courier}
\usepackage{scalerel}
\parindent 0ex
\begin{document}
\scaleto{
  \parbox{2in}{\baselineskip 1.5ex\texttt{%
    abcdefhikl\\
    mnorstuvwx\\
    zABCDEFGHI\\
    JKLMNOPRS!\\
    TUVWXYZ.=-
  }}
}{3in}
\end{document}

ps parbox 宽度是您需要注意的第四个数字。它必须足够大才能容纳您填充到其中的未缩放文本(这意味着它可能必须比页面宽度大得多)。但不用担心,scalerel 会将其恢复到适合页面的大小。

相关内容