Quantcast
Channel: Active questions tagged copy-paste - TeX - LaTeX Stack Exchange
Viewing all articles
Browse latest Browse all 70

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

$
0
0

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.


Viewing all articles
Browse latest Browse all 70

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>