Skip to main content
4 of 4
edited tags
diabonas
  • 26.6k
  • 6
  • 112
  • 151

How to make listings code indentation remain unchanged when copied from PDF?

So I am using listings package for code examples. But there is a problem. When I copy the code examples from the final PDF document, they are usually not the same - the indentation is gone, there are random spaces after parenthesis, etc. Does anyone know how to make sure that the code that I copy from the final document is the same as I wrote it in the LaTeX document?

Here is what I mean. Compile this document:

\documentclass[12pt,oneside]{memoir} \usepackage{listings} \usepackage[T1]{fontenc} \usepackage{xcolor} \usepackage{textcomp} \definecolor{codebg}{HTML}{EEEEEE} \definecolor{codeframe}{HTML}{CCCCCC} \lstset{language=Awk} \lstset{backgroundcolor=\color{codebg}} \lstset{frame=single} \lstset{framesep=10pt} \lstset{rulecolor=\color{codeframe}} \lstset{upquote=true} \lstset{basicstyle=\ttfamily} \lstset{showstringspaces=false} \begin{document} This code example prints out all users on your system: \begin{lstlisting}[language=c] #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LEN 1024 int main() { char line[MAX_LINE_LEN]; FILE *in = fopen("/etc/passwd", "r"); if (!in) exit(EXIT_FAILURE); while (fgets(line, MAX_LINE_LEN, in) != NULL) { char *sep = strchr(line, ':'); if (!sep) exit(EXIT_FAILURE); *sep = '\0'; printf("%s\n", line); } fclose(in); return EXIT_SUCCESS; } \end{lstlisting} \end{document} 

Now compile it, open it, select and copy the code example and paste it in a text editor. Here is the result I get:

# include <stdio .h> # include <stdlib .h> # include <string .h> # define MAX_LINE_LEN 1024 int main () { char line [ MAX_LINE_LEN ]; FILE *in = fopen ("/ etc / passwd ", "r"); if (! in) exit ( EXIT_FAILURE ); while ( fgets (line , MAX_LINE_LEN , in) != NULL ) { char * sep = strchr (line , ':'); if (! sep ) exit ( EXIT_FAILURE ); * sep = '\0 '; printf ("%s\n", line ); } fclose (in ); return EXIT_SUCCESS ; } 

Jeez! What's this... The indentation is gone. There are spaces in included headers <stdio .h>, there are spaces after parenthesis [ MAX_LINE_LEN ].

Anyone knows how to fix this? I'd like the code examples in my book to be copy/paste-able into a text editor so people can try them out easily.

user5177