
Ich habe eine neue Umgebung definiert, die ähnlich (aber nicht gleich) ist wie 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}
Warum \noindent
bleibt vor dem Text ein kleiner Abstand? Habe ich etwas übersehen?
Antwort1
Wenn Sie verwenden, \noindent
wird dieses Verhalten fast immer auftreten. Das Leerzeichen ist ein Wortzwischenraum, der vom Zeilenende nach der Umgebung gesetzt wird.
Sie können das Problem vermeiden, indem Sie verwenden, \ignorespacesafterend
aber das übertüncht nur die Risse. Der Fehler liegt darin, \noindent
dass mit zu früh der horizontale Modus gestartet wurde, weshalb das Zeilenende als Leerzeichen gesetzt wird. LaTeX-Umgebungen tun dies nie. Sie sollten die Umgebung mit definieren, trivlist
dann endet die Umgebung im vertikalen Modus, aber wenn keine leere Zeile folgt, wird die Einrückung unterdrückt (sie wird tatsächlich mit entfernt, \lastbox
anstatt nicht mit hinzugefügt zu werden \noindent
).
Etwa so, Längen je nach Bedarf anpassen.
\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}
Antwort2
Sie vermissen \ignorespacesafterend
, aber die Definition reicht nicht aus \obeylines
, da Sie es in eine Gruppe einschließen und seine Wirkung bei verschwindet \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}