2

The code lines I write within a lstlisting sometimes are too long. So at the end a line break occurs. But sometimes these breaks are not well chosen and can make the code much more unreadable.

Is there a way to predefine the places where a break should appear if it is necessary?

My document:

\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}

\usepackage{listings}

\lstdefinestyle{General} {
    basicstyle=\small\ttfamily,
    breaklines=true
}

\lstset{style=General}

\begin{document}

\begin{lstlisting}
This is a very long listing which eventually needs a break at the end of this beautiful line.
\end{lstlisting}

\end{document}

In this case the line break occurs after "break". It would be great to define the break after "listing" for example. Or maybe a second one after "beautiful" if there is enough space (maybe after changing some document settings as borders or format). In that case the first one should be ignored.

2

1 Answer 1

2
  • Maybe I misunderstand your question, "sometimes these breaks are not well chosen" does not make much sense for typical listing material.
  • The content of a listing is treated a verbatim (aka: literally, as it is).
  • Therefore you can add manual line breaks where ever you want.
  • In addition, the listings package offers automatic line breaks (you enabled it). I marked the automatic line break with an $\hookrightarrow$ in addition the default indention.
  • in addition, you can change the linewidth as an option (not shown).

BTW: I do not know why I need to use \mbox in \mbox{{$\hookrightarrow$}\space}. Also ~ instead of \space caused an error.


\documentclass{book}
\usepackage{listings}

\lstdefinestyle{myListingStyle} 
    {
        basicstyle = \small\ttfamily,
        breaklines = true,
        postbreak = \mbox{{$\hookrightarrow$}\space} % See https://tex.stackexchange.com/questions/116534 for example
    }

\begin{document}

\begin{lstlisting}[
    style = myListingStyle,
    caption = {Natural/Automatic line break.}
    ]
This is a very long listing which eventually needs a break at the end of this beautiful line.
\end{lstlisting}

\begin{lstlisting}[
    style = myListingStyle,
    caption = {Manual line break.}
    ]
This is a very long listing which eventually
needs a break at the end of this beautiful line.
\end{lstlisting}

\end{document}

enter image description here

1
  • 1
    Thanks for your answer but unfortunately this does not help. To clarify: If you have a long code line with, e.g. a long mathematical term, I don't want the break to be between operation sign and variable. If it don't fit then the break should be at one point before (e.g. before beginning of the term, something I define). But I don't want to break it a priori. I just want to say: "Break here IF NECESSARY." Furthermore: A manual line break as yours creates a new line (if you enumerize the listing), the automatic before does not.
    – S-Man
    Feb 25, 2019 at 14:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .