我定义了一个新的环境,类似(但不等于)listings
:
\documentclass{ltxdoc}
\usepackage{lipsum}
\newenvironment{lines}
{\par\begingroup\nobreak
\vspace{3pt}\parindent0pt\hrule\kern5pt
\nobreak\obeylines\everypar{\strut}\endgroup}
{\par\begingroup\nobreak
\vspace{3pt}\parindent0pt\hrule\kern5pt
\nobreak\obeylines\everypar{\strut}\endgroup%
\noindent%
}
\begin{document}
\lipsum[1]
\begin{lines}
Some nifty code and stuffz
\end{lines}
\lipsum[2]
\end{document}
为什么我的\noindent
文本前面会留一个小空格?我是不是漏掉了什么?
答案1
如果您使用,\noindent
您几乎总是会遇到这种行为。空格是在环境之后从行尾开始排版的单词间空格。
您可以使用 来避免此问题\ignorespacesafterend
,但这只是掩盖漏洞。错误在于使用\noindent
过早启动了水平模式,这就是为什么行尾被排版为空格的原因。LaTeX 环境永远不会这样做。您应该使用 定义环境,trivlist
然后环境将以垂直模式结束,但如果后面没有空行,缩进将被抑制(实际上是使用 删除缩进,\lastbox
而不是使用 不添加缩进\noindent
。)
像这样,调整长度以适应。
\documentclass{ltxdoc}
\usepackage{lipsum}
\newenvironment{linez}
{\trivlist\nopagebreak
\parindent0pt
\vspace{3pt}%
\hrule
\vspace{-3pt}%
\item\relax\obeylines}
{\par
\nopagebreak
\vspace{3pt}%
\hrule
\vspace{3pt}%
\endtrivlist}
\begin{document}
\lipsum[1]
\begin{linez}
Some nifty code and stuffz
Some nifty code and stuffz
Some nifty code and stuffz
Some nifty code and stuffz
\end{linez}
\lipsum[2]
\end{document}
答案2
您缺少了\ignorespacesafterend
,但是定义不起作用\obeylines
,因为您将它括在一个组中并且它的效果在 处消失\endgroup
:
\documentclass{ltxdoc}
\usepackage{lipsum}
\newenvironment{linez}
{\par\nopagebreak
\vspace{3pt}
\parindent0pt
\hrule\kern5pt
\obeylines}
{\par
\nopagebreak
\vspace{3pt}
\hrule\kern5pt
\noindent\ignorespacesafterend}
\begin{document}
\lipsum[1]
\begin{linez}
Some nifty code and stuffz
Some nifty code and stuffz
Some nifty code and stuffz
Some nifty code and stuffz
\end{linez}
\lipsum[2]
\end{document}