LaTeX listings package: copy-pastable listings
Asked Answered
P

1

18

Writing some docs with code snippets which I want to be copyable to run as written. These snippets may include lines with preceding spaces. The listings package formats the text fine, but the spaces are not copyable.

Let's say I have the following example:

\documentclass{article}
\usepackage{listings}
\begin{document}
\lstset{
    basicstyle=\ttfamily,
    frame=single,
    columns=fullflexible
}
\begin{lstlisting}[language=python]
def foo():
    return "bar"
\end{lstlisting}
\end{document}

If I copy and paste the listing somewhere, it becomes:

def foo():
return "bar"

which must be corrected by hand.

Is there a way to make the listings package include the original spaces? Or is there a package better suited for cases like this?

Pounds answered 20/8, 2010 at 1:27 Comment(1)
It is possible to embed JavaScript to PDF and have "copy to clipboard" buttons near codes. Just an idea, not a good solution.Doubledealing
C
4

This is (most likely) not a problem with listings (or latex at all), but with your PDF rendering software. For instance, with PDFKit-based (Preview, Skim, ...) on OSX, I get the behavior that you describe. By using Xpdf, however, the text is copied correctly.

Corrosion answered 20/8, 2010 at 9:4 Comment(2)
I do indeed see what you're saying with Xpdf, and that's good to know. However, not everyone I'm working with uses Linux, and forcing a cygwin install for Xpdf seems overkill... With Adobe Acrobat 9 for Linux, the spaces don't show up. Haven't tried the Windows version yet though.Pounds
I see the same problem with space copying if I use a verbatim block instead of listings. Same with plain TeX and "\ "'s. Perhaps this is the best I'm going to get without significant trouble. Thanks.Pounds

© 2022 - 2024 — McMap. All rights reserved.