[Tex/LaTex] Using listings package for documenting LISP code in two column mode

listingstwo-column

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

Best Answer

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

Related Question