Text Formatting ⇒ copy & paste source code inserted using "listings" package
copy & paste source code inserted using "listings" package
I am looking for the best way to create a programing toolkit manual using latex. In this manual, I will need to insert a lot of source code snippets. I found "listings" package the best way to do it, since it allows me to include syntax highlight, line numbering, etc. However, when I produce the final PDF, the source code boxes look nice, but cannot be copied and pasted back into a text editor because it messes up all the white spaces and tab indention of my original source code (python). Essentially, many blank spaces are always pasted as a single space. (I'm using acrobat reader to explore the PDF file)
I have tried "listings" options such as "columns=fullflexible" but it does not solve the problem. Actually, this seems to be an issue affecting any text in the PDF. For example, many "interword" spaces are always copied as a single black space.
Is there any way/trick to solve this?
Thanks in advance!
Jaime.
Learn LaTeX easily with newest books:
The LaTeX Beginner's Guide: 2nd edition and perfect for students writing a thesis
The LaTeX Cookbook: 2nd edition full of practical examples for mathematics, physics, chemistry, and more
LaTeX Graphics with TikZ: the first book about TikZ for perfect drawings in your LaTeX thesis
- localghost
- Site Moderator
- Posts: 9202
- Joined: Fri Feb 02, 2007 12:06 pm
copy & paste source code inserted using "listings" package
Code: Select all
\documentclass[11pt,a4paper,english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[includeheadfoot,margin=2cm]{geometry}
\usepackage{babel}
\usepackage{xcolor}
\usepackage{listings}
\lstset{%
numbers=none,
tabsize=3,
breaklines=true,
basicstyle=\small\ttfamily,
framerule=0pt,
backgroundcolor=\color{gray!25},
columns=fullflexible
}
\begin{document}
\lstinputlisting{minimal.cls}
\end{document}Best regards and welcome to the board
Thorsten
Board Rules
Avoidable Mistakes
¹ System: TeX Live 2025 (vanilla), TeXworks 0.6.10
Re: copy & paste source code inserted using "listings" package
I have tried your approach and it doesn't fix my problem... Several blank spaces are still copied as a single one in acrobat reader, which breaks the indentation of the original source code.
it sounds like something related with how PDFs handles interword spaces. Don't know if this can be changed.
Jaime.
- localghost
- Site Moderator
- Posts: 9202
- Joined: Fri Feb 02, 2007 12:06 pm
Re: copy & paste source code inserted using "listings" package
Board Rules
Avoidable Mistakes
¹ System: TeX Live 2025 (vanilla), TeXworks 0.6.10
copy & paste source code inserted using "listings" package
Try to generate the PDF, then copy and paste the source code into an editor and it should look like here.
And thanks for your time.
example.tex
Code: Select all
\documentclass[oneside,english]{book}
\renewcommand{\ttdefault}{lmtt}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{listings}
\setcounter{secnumdepth}{3}
\setcounter{tocdepth}{3}
\usepackage{babel}
\usepackage[unicode=true,
bookmarks=true,bookmarksnumbered=false,bookmarksopen=false,
breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=false]
{hyperref}
\hypersetup{pdftitle={HOLA}}
\makeatletter
\usepackage[T1]{fontenc}
\usepackage[includeheadfoot,margin=2cm]{geometry}
\usepackage{babel}
\usepackage{xcolor}
\usepackage{listings}
\lstset{%
numbers=none,
tabsize=3,
breaklines=true,
basicstyle=\small\ttfamily,
framerule=0pt,
backgroundcolor=\color{gray!25},
columns=flexible
}
\makeatother
\begin{document}
\section*{Example}
This is an example code:
\lstinputlisting{example.py}
\end{document}
Code: Select all
#!/usr/bin/env python
from ete2 import Tree
tree = Tree( '(A:1,(B:1,(C:1,D:1):0.5):0.5);' )
# Visit nodes in postorder
for n in tree.traverse("postorder"):
if n.is_leaf():
print "LEAF"
print n
elif:
print "INTERNAL NODE"
print n
# It Will visit the nodes in the following order:
# /-A
# ---------|
# | /-B
# \--------|
# | /-C
# \--------|
# \-D
# --A
# /-B
# ---------|
# | /-C
# \--------|
# \-D
# --B
# /-C
# ---------|
# \-D
# --C
# --D