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