如何使用固定宽度的字符字体排版包含 ASCII 艺术的文件?

如何使用固定宽度的字符字体排版包含 ASCII 艺术的文件?

我有一个字符串,其中的文本间距精确,与我想要的显示方式一致。这有点像 ASCII 艺术项目。我想将此文本转换为 PDF,这样我就可以在当地的印刷店打印带有文本的海报。

字体需要固定宽度,并且不能有制表符或类似的东西。行以字符结尾\n。有几个空格字符。

该图像有几百个字符宽和几百个字符高。因此,它不适合放在典型页面的空间中。

在 LaTeX 中有没有简单的方法可以做到这一点?

答案1

假设你的 ASCII 艺术项目包含在一个单独的文件中,例如,artproject.asc你可以使用fancyvrb包及其命令\VerbatimInput使用“打字机”(又称等宽)字体显示文件内容。显然,有很多不同的等宽字体,因此您可能需要尝试一下并确定哪种字体最适合您的项目。

以下 MWE 显示了如何做到这一点;它假设纸张尺寸为,您希望页面四边的A0边距为,并且您将使用字体“beramono”。1in

\documentclass{article}
\usepackage[a0paper,margin=1in]{geometry}
\usepackage{fancyvrb}
\usepackage{beramono} % or whatever monospaced font you wish to employ
\begin{document}
\pagestyle{empty} % don't need to display page numbers, right?
\VerbatimInput{artproject.asc}
\end{document}

答案2

您可以导入带有一些预设参数的文本文件(部分取自硬空格):

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\usepackage{filecontents}% http://ctan.org/pkg/filecontent
\usepackage{varwidth}% http://ctan.org/pkg/varwidth
\begin{filecontents*}{asciiart.txt}
Lorem  ipsum  dolor sit  amet, consectetur  adipiscing elit. Donec sed magna risus, id  iaculis  nisi. \n
Phasellus fermentum lorem ut velit ultrices at tincidunt lacus suscipit. Maecenas sed convallis dolor. \n
Etiam  at diam velit,  quis condimentum massa.  Aenean  vel  massa mi. In id  placerat dui.  Curabitur \n
ligula  justo,  pellentesque   sed   interdum  ut,   vulputate  et  sapien.  Donec   semper,  nisi  et \n
tincidunt  vulputate,   lorem  tortor  rhoncus  dui,  sed  posuere  tellus  nisi   nec   magna.   Cras \n
sodales,  quam  at  tristique  pellentesque,   massa  orci  hendrerit  ipsum,  nec  congue  diam  elit \n
sed  urna.  Curabitur   consequat,  metus  in   accumsan  aliquam,  ligula  felis  laoreet  elit,  non \n
dapibus sapien libero eu dolor.
\end{filecontents*}
\def\n{}% Remove the functionality typically used for \n in a different language
\setlength{\parindent}{0pt}% Remove paragraph indent
\newsavebox{\asciiart}% Box storing ASCII art content
\pagestyle{empty}% Remove page header/footer (including page numbers)
\begin{document}
\begingroup
\ttfamily% Mono-spaced/typewriter font
\obeyspaces% Keep all spaces
\let =\ % Fix spaces
\obeylines% Obey line breaks
\begin{lrbox}{\asciiart}\begin{varwidth}{10\textwidth}
\input{asciiart.txt}
\end{varwidth}\end{lrbox}% Read ascii art
\resizebox{\textwidth}{!}{\usebox{\asciiart}}% Rescale and print ascii art.
\endgroup
\end{document}​

使用的软件包:

  • graphicx用于缩放内容(在我们的例子中是盒子\asciiart);
  • filecontents用于将内容写入文件而不受常规filecontents限制。您的情况可能不需要,因为您已经有了asciiart.txt
  • varwidth用于可变宽度的装箱。

geometry还可以根据自己的喜好缩放纸张尺寸。

相关内容