如何模拟9针点阵打印机的草稿模式?

如何模拟9针点阵打印机的草稿模式?

如何让 LaTeX 的输出看起来像是使用 9 针点阵打印机的草稿模式打印的,例如经典的爱普生 FX-80? 下图上半部分取自书中计算机结构与逻辑,让我对我说的话有了一些了解:

具有下述特征的点阵打印机输出示例。

基本上这意味着:

  1. 每个字符都应排版为点阵。
  2. 这些点应该明显分开,但由于墨水渗出,可能有些重叠。
  3. 点的边界应该有点模糊而不是完全清晰。
  4. 即使在它们的中心,这些点也不应完全是黑色的。
  5. 点的位置和深度应该有一些轻微的、不规则的变化。(与打字机不同,这种变化不应该是每种字母类型独有的。)

我并不特别关心图形、数学模式或非 ASCII 字符,但如果支持以下文本模式样式就更好了:

  • 假斜体(即倾斜的文字)
  • 伪上标和下标(即挤压、垂直偏移的字符)
  • 强调
  • 假粗体(即稍微偏移的双击文本)

我知道有这样的字体FX 矩阵,模拟点阵输出。但是,这些不会产生您在真实点阵打印机输出中观察到的颜色、点大小、点位置等的变化。

(这个问题是受之前一个问题的启发模拟旧打字文本

答案1

因为 OP 指出了对点状打击的特殊纹理特征(例如褪色)的可取性,所以唯一的选择就是从头开始构建它。

下面我将展示如何实现这一点。

首先,您需要设计您的点通过\dmdot。我使用了接受的答案在 TikZ 中自定义淡入淡出设计一个点状图案,其不透明度向外边缘逐渐减弱。显然,设计可以根据需要进行更改。

然后,一旦你对点满意了,你就必须将每个字母的布局设计成一个点矩阵。我仅以两个字母为例定义:“R”和“y”,它们在\dotR和中定义\doty。由于空格对于这些定义是活动的,因此任何给定点行中的前导空格必须{}以能够正确消化数据为前提。

任何给定字母的矩阵都使用宏设置\dotletter{<letter>}。但是,为了简化输入要求,我设置了一个标记循环环境\dotmatrix...\enddotmatrix,该环境获取环境中的每个字母并应用于\dotletter它。因此,此示例的用户输入是\dotmatrix RyR\enddotmatrix

例如,控制点尺寸、垂直点间距、水平点间距、垂直下基线和字母边距的参数定义为

\newcommand\dmdotsize{.025}
\newcommand\dmdotgap{1pt}
\newcommand\dmdotkern{.7pt}
\newcommand\dmdotbase{-2pt}
\newcommand\dmsidebearing{1.5pt}

这些参数可以调整,如第二种情况的 MWE 所示。MWE 显示的是点的大版本,以便人们可以看到所应用的淡入淡出效果\dmdot

\documentclass{article}
\usepackage{stackengine,tikz,tokcycle}
\usetikzlibrary{fadings} 
\pgfdeclareradialshading{tikzfadeSid}{\pgfpointorigin}{%
  color(0pt)=(pgftransparent!0); color(12.5bp)=(pgftransparent!0);
  color(25bp)=(pgftransparent!50); 
  color(37.5bp)=(pgftransparent!95); 
  color(50bp)=(pgftransparent!100)}%
\pgfdeclarefading{custom fade out}{\pgfuseshading{tikzfadeSid}}%
\newcommand\dmdot[1][\dmdotsize]{%
\begin{tikzpicture}
\fill[black,opacity=0.9,path fading=custom fade out, draw=none] (0,0) 
circle[radius=#1];
\end{tikzpicture}
}
\newcommand\dmdotsize{.025}
\newcommand\dmdotgap{1pt}
\newcommand\dmdotkern{.7pt}
\newcommand\dmdotbase{-2pt}
\newcommand\dmsidebearing{1.5pt}

\setstackEOL{\\}
\setstackgap{L}{\dmdotgap}
\renewcommand\stackalignment{l}

\bgroup
\catcode`.=\active
\gdef.{\makebox[\dmdotkern]{\dmdot}}
\catcode32=\active%
\gdef {\kern\dmdotkern}%
\gdef\dotR{. . .\\.    .\\.    .\\. . .\\.  .\\.   .\\.    .\\\\}%
\gdef\doty{.    .\\.    .\\.    .\\{} . . .\\{}     .\\{} . ..}%
\egroup
\newcommand\dotletter[1]{\kern\dmsidebearing
  \raisebox{\dmdotbase}{\expandafter\Longstack\expandafter{%
  \csname dot#1\endcsname}}}
\xtokcycleenvironment\dotmatrix
  {\addcytoks{\dotletter{##1}}}
  {\processtoks{##1}}
  {\addcytoks{##1}}
  {\addcytoks{##1}}
  {\kern 2\dimexpr\dmdotsize cm}
  {\addcytoks{\kern-\dmdotsize cm}}
\begin{document} 
\dmdot[.5]

R\dotmatrix RyR\enddotmatrix X

\renewcommand\dmdotsize{.023}
\renewcommand\dmdotgap{.9pt}
\renewcommand\dmdotkern{.5pt}
\renewcommand\dmdotbase{-1.8pt}
\renewcommand\dmsidebearing{1.4pt}

R\dotmatrix RyR\enddotmatrix X
\end{document}

在此处输入图片描述

相关内容