如何保留列表中行末的空格?

如何保留列表中行末的空格?

我想在列表中显示一个 Whitespace 程序(一种深奥的编程语言)。即使使用keepspaces=true,行尾的空格也会被丢弃(程序末尾仅由空格组成的行也会被丢弃)。

我找到了一个解决方法:在每行末尾添加一些特殊字符,并通过文字设置使该字符不可见(见下文)。

但是,我不喜欢这个解决方案,因为它需要修改程序的源代码。有没有办法保留行末的所有空格字符?

\documentclass{article}
\usepackage[final]{listings}
\lstdefinelanguage{Whitespace}{
    keepspaces=true,
    showspaces=true,
    showtabs=true,
    tab=\rightarrowfill,
    tabsize=4,
    basicstyle=\ttfamily,
    literate={€}{{}}1
}
\begin{document}
\begin{lstlisting}[language=Whitespace,frame=single]
\end{lstlisting}
\end{document}

结果符合预期。但是,我想使用以下代码使其工作(请注意,不幸的是 stackexchange 也会删除代码中的空格):

\begin{lstlisting}[language=Whitespace,frame=single]


\end{lstlisting}

答案1

作为 TeX 努力实现跨不同架构移植的一部分,包括使用固定长度记录的操作系统,而不仅仅是使用行尾标记的操作系统。行尾的空格会被无条件删除,操作系统的任何行尾标记也会被删除。这是无条件发生的,您唯一可以控制的是是否插入任何字符标记来标记行尾,如果是,则插入哪个字符标记(通常是^^M

使用 luatex,我认为您可以更早地获取文件,但在经典 tex 或 xetex 中,您必须更改程序本身。

相关内容