我想排版来自不同编程语言的代码片段。我无法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}
结果是: