将 belongspaces 重新定义为换行符

将 belongspaces 重新定义为换行符

我想排版来自不同编程语言的代码片段。我无法listings做到我想要的(一行空行占用的空间太大了),我也没办法自己定义我想要的一切。

我想定义一个新环境,其中 return 调用\newline,而空行调用\par(这个在正常文本模式下已经存在),这样我就可以区分它们。此外,插入的每个空格都应打印出来,但这已由 处理\obeyspaces

梅威瑟:

\documentclass{article}

\newenvironment{code}{
\ttfamily
\parindent=0pt\parskip=5pt
\obeyspaces\obeylines
}{}

\begin{document}
\begin{code}
text 1space  2spaces
new line

empty line before this line
\end{code}
\end{document}    

我发现

\def\obeypar{\catcode`\^^M\active \let ^^M\par }`    

并尝试定义\obeylines(LaTeX 告诉我它未定义)但由于这些是 TeX 原语(?),它们会给出错误。我可以告诉 LaTeX 这部分应该被视为 TeX 吗?

我遗漏了什么或者在哪里可以阅读到这些内容?

答案1

如果我理解了这个问题,你需要区分code环境中的空行和非空行。您可以尝试以下操作:

\def\emptyline{\hbox to\hsize{\dotfill empty line\dotfill}}
%\def\emptyline{\vskip.7\baselineskip} % ... another alternative ...
\def\printemptyline#1{\def\par{\ifvmode\emptyline\fi\endgraf}\obeylines}

\begin{code}\printemptyline
text 1space  2spaces
new line

empty line before this line
\end{code}

结果是:

空行

相关内容