如果有人(非常不可能)决定输入并验证签名,我需要以一种消除歧义的方式呈现 ASCII 文件以供打印。
本质上,我需要一个等宽排版机,它会在遇到 CR/LF 等时排版一个“空格”符号表示空格,排版一个 CR/LF 符号(并转到下一行以便于阅读),从而可以清楚地知道在 CR/LF 之前是否有任何尾随空格,是否存在字符等。
有没有已经实现该目标的字体?*nix 实用程序?TeX 模块/包/派生系统?
这是解决此类问题的合适 SE 网站吗?你认为我在 SuperUser 上会更幸运吗?StackOverflow?
答案1
你是指这样的吗?在这种情况下,我使@
active 表示逐字逐句的每行结束,这样它既可以检测到前面的空格,也可以排版<cr>
来表示行的结束。(参见附录以供更新)
\documentclass{article}
\usepackage{verbatimbox}
\def\rlwd{.5pt}
\begin{document}
\catcode`@=\active
\def@{<cr>}
\def\tmp{\setbox2=\hbox{0}%
\def\ {\makebox[\wd2]{\rule{\rlwd}{2pt}\rule{3pt}{\rlwd}\rule{\rlwd}{2pt}}}%
}
\begin{verbnobox}[\tmp]
This is a test @
more test @
The end@
\end{verbnobox}
\catcode`@=12
\end{document}
<cr>
如果不喜欢将和 用相同的字体混淆verbatim
,可以这样修改:
\documentclass{article}
\usepackage{verbatimbox,xcolor}
\def\rlwd{.5pt}
\begin{document}
\catcode`@=\active
\def@{\textcolor{red}{{\tiny\rmfamily\bfseries$<$cr$>$}}}
\def\tmp{\setbox2=\hbox{0}%
\def\ {\makebox[\wd2]{\rule{\rlwd}{2pt}\rule{3pt}{\rlwd}\rule{\rlwd}{2pt}}}%
}
\begin{verbnobox}[\tmp]
This is a test @
more test @
The end@
\end{verbnobox}
\catcode`@=12
\end{document}
附录
自从最初提供此答案以来,我了解到verbatim
环境甚至\verb
宏都有星号变体(例如verbatim*
),它们提供可见的空间字形。因此,实际上不需要额外的包。
\documentclass{article}
\begin{document}
\catcode`@=\active
\def@{<cr>}
\begin{verbatim*}
This is a test @
more test @
The end@
\end{verbatim*}
\catcode`@=12
\end{document}
答案2
一些修改fancyvrb
允许您重新格式化行尾字符(下面我使用了\CR
):
\documentclass{article}
\usepackage{fancyvrb}
\newcommand{\CR}{<cr>}
\makeatletter
\begingroup
\catcode`\^^M=\active
\gdef\FancyVerbGetLine#1^^M{%
\@nil%
\FV@CheckEnd{#1}%
\ifx\@tempa\FV@EnvironName% % True if end is found
\ifx\@tempb\FV@@@CheckEnd\else\FV@BadEndError\fi%
\let\next\FV@EndScanning%
\else%
\def\FV@Line{#1\CR}%
\def\next{\FV@PreProcessLine\FV@GetLine}%
\fi%
\next}%
\endgroup
\makeatother
\begin{document}
\begin{Verbatim}[showspaces=true]
This is a test @
more test @
The end@
\end{Verbatim}
\end{document}
的定义\FancyVerbGetLine
直接取自fancyvrb.dtx
并修改为插入\CR
为 的定义的一部分\FV@line
。