Почему \noindent здесь не работает должным образом?

Почему \noindent здесь не работает должным образом?

Я определил новую среду, похожую (но не равную) на 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}

введите описание изображения здесь

Связанный контент