Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

How do I control how much vertical space appears before and after a verbatim environment?

With the following source (run through pdflatex):

\documentclass[varwidth]{standalone}
\begin{document}
text before verbatim
\begin{verbatim}
some verbatim text
\end{verbatim}
text after verbatim
\end{document}

I get the following:

bad behavior

I would like to be able to tweak things to get the following behavior:

good behavior

Edit:

I would also like the solution to work for verbatim environments in a list item:

\documentclass[varwidth]{standalone}
\begin{document}
\begin{itemize}
\item text before verbatim
\begin{verbatim}
some verbatim text
\end{verbatim}
text after verbatim
\end{itemize}
\end{document}

bad behavior in a list

share|improve this question
1  
If you don't need verbatim text, you can always use \ttfamily or \texttt{...} and then have the regular paragraph skip between the lines. –  Werner Feb 3 '12 at 21:30

1 Answer 1

up vote 6 down vote accepted

verbatim uses trivlist which adds above and below it the current values of \topsep and \partopsep (the latter if at the beginning of a paragraph); since the trivlist is started when a group has already been opened by verbatim, it's safe to set locally the values: the command to patch is \@verbatim, that starts with \trivlist, so we can set the parameters just before this command:

\usepackage{etoolbox}
\makeatletter
\preto{\@verbatim}{\topsep=0pt \partopsep=0pt }
\makeatother

Here's an example, where I put two minipage environments next to each other just to show the line spacing:

\documentclass{standalone}
\usepackage{etoolbox}
\makeatletter
\preto{\@verbatim}{\topsep=0pt \partopsep=0pt }
\makeatother
\begin{document}
\begin{minipage}{5cm}
text before verbatim
\begin{verbatim}
some verbatim text
\end{verbatim}
text after verbatim
\end{minipage}%
\begin{minipage}{5cm}
abc\\
def\\
ghi
\end{minipage}
\end{document}

enter image description here

share|improve this answer
    
fantastic! thank you! do you happen to have a version that works with enumitem up your sleeve? :) –  Richard Hansen Feb 3 '12 at 23:30
    
@RichardHansen It's not clear what you are asking. –  egreg Feb 3 '12 at 23:39
    
The enumitem package apparently modifies \trivlist to restore spacing to defaults. This allows it to modify the spacing for normal lists without affecting spacing for verbatim and others. Unfortunately, it means that your solution won't work if enumitem is in use. –  Richard Hansen Feb 3 '12 at 23:45
    
@RichardHansen I get identical results with enumitem; can you add an example to your question? –  egreg Feb 4 '12 at 0:11
1  
I was wrong---it's not enumitem's fault. The verbatim still has space above and below when in a list environment (see edited question). Your solution reduces that space, but there's still some there. I'm guessing something else is responsible for that space... –  Richard Hansen Feb 4 '12 at 6:24

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.