8

Using listings package, I am trying to write some LISP code. The issue is that LISP uses a lot of '-' in function name, and it makes the line width too large to break the boundary in two column mode.

\lstset{numbers=left, numberstyle=\tiny, stepnumber=1,firstnumber=1,
  numbersep=5pt,language=Lisp,
stringstyle=\ttfamily,
basicstyle=\footnotesize, 
showstringspaces=false
}

\begin{lstlisting}[firstnumber=1, caption=Getting labels, label=glabels] 

(defun find-symbol-between-sigma-sets (sigma-a sigma-b scan-node symbols g)
  (let* ((scan-node-set-in-sigma-a (find-scan-node sigma-a scan-node))
         (next-scan-node-set-in-sigma-b 
          (get-next-node-set-from-scan-node-set 
           scan-node-set-in-sigma-a sigma-b g))
         (union-node-set-in-sigma-a 
          (get-previous-nodes next-scan-node-set-in-sigma-b g)))
    (if 
     (and 
      (memberp union-node-set-in-sigma-a scan-node-set-in-sigma-a)
      (path-exists-between-set-a-and-set-b 
       union-node-set-in-sigma-a next-scan-node-set-in-sigma-b g))
     (car 
      (unique-get-symbols 
       union-node-set-in-sigma-a next-scan-node-set-in-sigma-b symbols))
     nil)))
\end{lstlisting} 

Any good solution?

enter image description here

2
  • While code snippets are useful in explanations, it is always best to compose a fully compilable MWE that illustrates the problem including the \documentclass and the appropriate packages so that those trying to help don't have to recreate it. Apr 30, 2013 at 2:57
  • 3
    Try the option breaklines=true. Apr 30, 2013 at 2:57

2 Answers 2

6

use as basic style a monofont or translate the hyphen to a shorter one (my second example):

\documentclass[twocolumn]{article}
\usepackage[T1]{fontenc}
\usepackage[scaled=0.85]{beramono}
\usepackage{listings}

\lstset{numbers=left,numberstyle=\tiny,numbersep=5pt,language=Lisp,
  stringstyle=\ttfamily\small,basicstyle=\ttfamily\footnotesize,
  showstringspaces=false,breaklines}

\begin{document}

\begin{lstlisting}[caption=Getting labels, label=glabels] 
(defun find-symbol-between-sigma-sets (sigma-a sigma-b scan-node symbols g)
  (let* ((scan-node-set-in-sigma-a (find-scan-node sigma-a scan-node))
         (next-scan-node-set-in-sigma-b 
          (get-next-node-set-from-scan-node-set 
           scan-node-set-in-sigma-a sigma-b g))
         (union-node-set-in-sigma-a 
          (get-previous-nodes next-scan-node-set-in-sigma-b g)))
    (if 
     (and 
      (memberp union-node-set-in-sigma-a scan-node-set-in-sigma-a)
      (path-exists-between-set-a-and-set-b 
       union-node-set-in-sigma-a next-scan-node-set-in-sigma-b g))
     (car 
      (unique-get-symbols 
       union-node-set-in-sigma-a next-scan-node-set-in-sigma-b symbols))
     nil)))
\end{lstlisting} 

\newpage

\begin{lstlisting}[caption=Getting labels,
  basicstyle=\footnotesize,literate={-}{{-}}1]
(defun find-symbol-between-sigma-sets (sigma-a sigma-b scan-node symbols g)
  (let* ((scan-node-set-in-sigma-a (find-scan-node sigma-a scan-node))
         (next-scan-node-set-in-sigma-b 
          (get-next-node-set-from-scan-node-set 
           scan-node-set-in-sigma-a sigma-b g))
         (union-node-set-in-sigma-a 
          (get-previous-nodes next-scan-node-set-in-sigma-b g)))
    (if 
     (and 
      (memberp union-node-set-in-sigma-a scan-node-set-in-sigma-a)
      (path-exists-between-set-a-and-set-b 
       union-node-set-in-sigma-a next-scan-node-set-in-sigma-b g))
     (car 
      (unique-get-symbols 
       union-node-set-in-sigma-a next-scan-node-set-in-sigma-b symbols))
     nil)))
\end{lstlisting} 

\end{document}

enter image description here

5

Adding the option breaklines=true allows for line breaking:

enter image description here

Notes:

Code:

\documentclass{article}
\usepackage{showframe}

\usepackage{listings}

\lstset{numbers=left, numberstyle=\tiny, stepnumber=1,firstnumber=1,
  numbersep=5pt,language=Lisp,
stringstyle=\ttfamily,
basicstyle=\footnotesize, 
showstringspaces=false,
breaklines=true,
}

\begin{document}

\begin{lstlisting}[firstnumber=1, caption=Getting labels, label=glabels] 

(defun find-symbol-between-sigma-sets (sigma-a sigma-b scan-node symbols g)
  (let* ((scan-node-set-in-sigma-a (find-scan-node sigma-a scan-node))
         (next-scan-node-set-in-sigma-b 
          (get-next-node-set-from-scan-node-set 
           scan-node-set-in-sigma-a sigma-b g))
         (union-node-set-in-sigma-a 
          (get-previous-nodes next-scan-node-set-in-sigma-b g)))
    (if 
     (and 
      (memberp union-node-set-in-sigma-a scan-node-set-in-sigma-a)
      (path-exists-between-set-a-and-set-b 
       union-node-set-in-sigma-a next-scan-node-set-in-sigma-b g))
     (car 
      (unique-get-symbols 
       union-node-set-in-sigma-a next-scan-node-set-in-sigma-b symbols))
     nil)))
\end{lstlisting} 
\end{document}

You must log in to answer this question.

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