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 1024int 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 1024int 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.