If you want to typeset source code in LaTeX you’ll probably end up using the listings package. The output looks good and you have quite a few options to customize it to your taste. Some of those options deal with how long lines are wrapped. Personally, I like them to look this way:
Here, automatically wrapped lines are indicated in a number of ways, namely
- pictographs
- indentation of the wrapped lines, and
- a gap in the line numbers.
How to do it
In order to achieve this behavior you have to set a few parameters for the listings package:
\lstset{prebreak=\raisebox{0ex}[0ex][0ex]
{\ensuremath{\rhookswarrow}}}
\lstset{postbreak=\raisebox{0ex}[0ex][0ex]
{\ensuremath{\rcurvearrowse\space}}}
\lstset{breaklines=true, breakatwhitespace=true}
\lstset{numbers=left, numberstyle=\scriptsize}
The parameters prebreak and postbreak are responsible for the pictographs. Unfortunately the complicated construct using \raisebox
and \ensuremath
is required to make it work. The \space
at the end of postbreak adds, well, a space between the pictograph and the continued source code.
Setting breaklines=true enables automatic line wrapping whereas breakatwhitespace=true ensures that line breaks don’t occur inside expressions like variable names.
The last line enables line numbering using numbers=left and specifies their appearance as small numbers with numberstyle=\scriptsize.
Indentation is enabled by default and set to 20 pt. If you want to change that, use i.e. breakindent=10pt.
Finally just one more thing: The commands for the pictographs are defined in the MnSymbol package, therefore you need to load it by writing \usepackage{MnSymbol}
in the document’s preamble.
Alternative pictographs
If you’re unhappy with the pictographs I selected, the PDF version of this post contains a few alternatives.
[…] I’m using the algorithm2e package for pseudocode. I got some very long lines that needed to be wrapped. Is there a way to indent the following (breaked) lines and/or put a mark at the first line to signalize that there happened a linebreak (similar to solution for listings package) […]
[…] I’m using the algorithm2e package for pseudocode. I got some very long lines that needed to be wrapped. Is there a way to indent the following (breaked) lines and/or put a mark at the first line to signalize that there happened a linebreak (similar to solution for listings package) […]
Thank you. I am looking for line breaking in listings package.