¿Por qué \noindent no funciona correctamente aquí?

¿Por qué \noindent no funciona correctamente aquí?

Definí un nuevo entorno, similar (pero no igual) a 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}

¿Por qué dejo \noindentun pequeño espacio antes del texto? ¿Me he perdido algo?

Respuesta1

Si lo usa, \noindentcasi siempre obtendrá este comportamiento. El espacio es un espacio entre palabras que se escribe desde el final de la línea después del entorno.

Puedes evitar el problema usando \ignorespacesafterendpapel para tapar las grietas. El error es usar \noindentcuál ha iniciado el modo horizontal prematuramente y es por eso que el final de la línea está escrito como un espacio. Los entornos LaTeX nunca hacen esto. Debe definir el entorno usando, trivlistentonces el entorno terminará en modo vertical, pero si no hay una línea en blanco después, se suprimirá la sangría (en realidad se elimina usando \lastboxen lugar de no agregarse usando \noindent).

Algo como esto, ajusta las longitudes a tu medida.

ingrese la descripción de la imagen aquí

\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}

Respuesta2

Te falta \ignorespacesafterend, pero la definición no sirve \obeylines, porque la estás encerrando en un grupo y su efecto desaparece en \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}

ingrese la descripción de la imagen aquí

información relacionada