我想在列表中显示一个 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 中,您必须更改程序本身。