Editor di testo per la stampa di codice C ++


34

Sto cercando un editor per stampare (su carta) il codice C ++. Sono attualmente alla scuola di ingegneria e l'istruttore ci ha chiesto di inviare il codice su carta.

Vuole nome + cognome, il numero di classe (nell'intestazione), il numero di pagina in fondo e le parole riservate in grassetto per ogni pagina!

Su Windows può essere fatto con notepadd++. Ma sono su Linux e non ho trovato un IDE o un editor di testo che funzioni. (Ho già provato SCITE, gedite Syntaxic)


4
a2ps è tuo amico. Prenditi il ​​tuo tempo per configurarlo.
Satō Katsura,

5
Per richieste come questa, potresti prendere in considerazione softwarerecs.stackexchange.com
Eric Renouf,

30
sembra che il tuo insegnante abbia investito nel settore del disboscamento.
Anthon,

10
Il tuo insegnante vuole il codice ... sulla carta ?!
Corse di leggerezza con Monica il

8
@ loi219 Un insegnante di "vecchia scuola" o un vecchio "insegnante di scuola", o entrambi? ;-)
user800

Risposte:


76

Bene, se vuoi fare il possibile, fallo in LaTeX e fornisci un file PDF di livello professionale. Non hai menzionato la tua distribuzione, quindi darò istruzioni per i sistemi basati su Debian. La stessa idea di base può essere fatta su qualsiasi Linux.

  1. Installa un sistema LaTeX e i pacchetti necessari

    sudo apt-get install texlive-latex-extra latex-xcolor texlive-latex-recommended
    
  2. Crea un nuovo file (chiamalo report.tex) con i seguenti contenuti:

    \documentclass{article}
    \usepackage{fancyhdr}
    \pagestyle{fancy}
    %% Define your header here. 
    %% See http://texblog.org/2007/11/07/headerfooter-in-latex-with-fancyhdr/
    \fancyhead[CO,CE]{John Doe, Class 123}
    
    \usepackage[usenames,dvipsnames]{color}  %% Allow color names
    
    %% The listings package will format your source code
    \usepackage{listings}
    \lstdefinestyle{customasm}{
      belowcaptionskip=1\baselineskip,
      xleftmargin=\parindent,
      language=C++,
      breaklines=true, %% Wrap long lines
      basicstyle=\footnotesize\ttfamily,
      commentstyle=\itshape\color{Gray},
      stringstyle=\color{Black},
      keywordstyle=\bfseries\color{OliveGreen},
      identifierstyle=\color{blue},
      xleftmargin=-8em,
      showstringspaces=false
    }        
    \begin{document}
    
    \lstinputlisting[style=customasm]{/path/to/your/code.c}
    
    \end{document}
    

    Assicurati solo di cambiare /path/to/your/code.cla penultima riga in modo che punti al percorso effettivo del tuo file C. Se hai più di un file da includere, aggiungi a \newpagee quindi un nuovo \lstinputlistingper l'altro file.

  3. Compila un PDF (questo crea report.pdf)

    pdflatex report.tex    
    

Ho provato questo sul mio sistema con un file di esempio che ho trovato qui e crea un PDF simile al seguente:

prima pagina del pdf creato

Per un esempio più completo che troverà automaticamente tutti i file .c nella cartella di destinazione e creerà un file PDF indicizzato con ciascuno in una sezione separata, vedere la mia risposta qui .


17
Non appena inizi con LaTeX non puoi lasciarti andare! Vorrei conoscere TeX al liceo ... (o lo insegnerebbero in alternativa alla parola).
Kyslik,

2
Penso che LaTex verrebbe installato di default sulla maggior parte dei sistemi, specialmente in una scuola di ingegneria. Digita "which latex" al prompt dei comandi: se restituisce un percorso, in genere / usr / bin / latex, puoi saltare il passaggio 1. Inoltre, se il tuo editor preferito ha un linguaggio macro decente, puoi eseguire questo script dall'interno dell'editor, usando ad esempio "gv --watch" per visualizzare l'output live.
jamesqf,

4
@jamesqf Non ho mai visto un sistema con LaTeX installato per impostazione predefinita. Sì, il personale IT di alcune scuole potrebbe averlo installato e potrebbero esserci distribuzioni Linux specializzate che lo hanno di default, ma la stragrande maggioranza dei sistemi no.
terdon

3
@terdon - Non ho mai visto un'installazione in un dipartimento di ingegneria senza LaTeX. È piuttosto essenziale per chiunque debba produrre stampe stampabili.
Toby Speight,

1
@terdon: 'Default' o selezionato al momento dell'installazione. Non ricordo di aver fatto nulla di speciale per ottenere LaTeX sui miei sistemi (OpenSuSE), ma è passato un po 'di tempo dall'ultima installazione. In entrambi i casi, il controllo è semplice.
jamesqf,

29

Di solito userei l'encript: qualcosa del genere

$ enscript --highlight=cpp
           --header='|Real Name|Class 101'
           --footer='|Page $% of $=|'
           -poutput.ps *.cpp

sarà un inizio: questo scrive l'output di Postscript in output.psmodo da poter visualizzare in anteprima e sovrascriverlo mentre si armeggia con la configurazione e quindi stamparlo quando si è soddisfatti. Vedi la pagina man per le opzioni più estese.

EDIT far funzionare correttamente il piè di pagina è un po 'una seccatura con l'iscrizione - non l'ho mai notato perché non l'ho mai richiesto. Se si salva questo file in ~/.enscript/so.hdr(probabilmente è necessario creare la directory), si otterrà effettivamente l'output richiesto con

$ enscript --highlight=cpp
           --header='|Real Name|Class 101'
           --footer='|Page $% of $=|'
           --fancy-header=so
           -poutput.ps *.cpp

dando

inserisci qui la descrizione dell'immagine


approssimativamente,

  • LaTeχ è la migliore qualità e il maggior lavoro da impostare,
  • enscript o a2ps sono intermedi sia nella qualità che nel lavoro,
  • Il :hardcopycomando di Vim è semplice ma non così flessibile, e
  • fare l'evidenziazione manuale della sintassi in un editor senza codice è un grande sforzo per un ritorno scadente.

Questo è assolutamente quello che sto cercando. Grazie mille!
loi219,

Io secondo emscript. Ha un sacco di opzioni e dà ottimi risultati.
rubik,

9

Puoi usare il :TOhtmlcomando in vim. Questo rende ciò che vedi (ovvero l'evidenziazione della sintassi) come html. Da lì, un browser web che può stampare in pdf funziona, poiché di solito puoi personalizzare il contenuto dell'intestazione / piè di pagina.

Questo è probabilmente simile al :hardcopycomando menzionato da Inutile, ma non posso verificare sul mio sistema in questo momento.

Un'altra possibilità è quella di stampare da QtCreator, tuttavia non sembra esserci un modo per impostare le intestazioni / i piè di pagina.


4

Geany è un semplice IDE che ti offre molte opzioni per ciò che si trova nell'intestazione.

Le parole riservate possono essere manipolate nel menu delle opzioni, ma l'evidenziazione del codice lo fa per lo stile notepad ++. (potrebbe essere necessario copiare / scaricare le combinazioni di colori nella cartella "/home/$USER_NAME/.config/geany/colorschemes/" per ottenere quella desiderata)

Molto semplice e personalmente mi piacciono molto i numeri di riga e il formato che stampa.

Geany funziona anche su Windows e Linux.

Pagina 1

Pagina 2

Pagina 3


2

Dato che chiedi un editor , puoi stampare direttamente da Emacs, usando ps-print-buffer.

Le intestazioni e i piè di pagina si trovano nel gruppo Personalizza chiamato ps-print-headers.

Supponendo che usi il blocco dei caratteri, probabilmente hai l'evidenziazione della sintassi richiesta. Può essere regolato, se necessario, utilizzando la ps-extend-facefunzione.


Detto questo, consiglierei comunque di utilizzare uno strumento di 'grind' adeguato come a2ps, enscript o elenchi LaTeX +.


1

Per completezza, e sebbene non consiglierei questa soluzione, il lpprogramma ha -o prettyprintun'opzione che può fare l'evidenziazione della sintassi.

Puoi usarlo in questo modo per esempio:

lp -t "Name Surname | Class" -o document-format=application/x-csource -o prettyprint path/to/code.cpp

Qui ho usato l' -topzione (titolo) per impostare l'intestazione. Tuttavia, non posso modificare il piè di pagina (ma il numero di pagina appare in alto). Puoi impostare il tipo di file con l'opzione -o document-format (l'elenco del valore accettabile dovrebbe essere in /usr/share/cups/mime/mime.typeso forse /etc/cups/mime/mime.types) ma se il tuo file ha l'estensione corretta, non dovrebbe essere necessario. Inoltre, l'evidenziazione della sintassi è lungi dall'essere perfetta.


1

Hai solo bisogno di LibreOffice Writer .

Incolla il tuo codice C / C ++.

Trova le parole e rendi grassetto tutte le parole chiave C ++.

Puoi trovarli qui: http://en.cppreference.com/w/cpp/keyword

Per trovare una parola Premi Ctrl + F. Seleziona "Corrispondenza" e fai clic su Trova tutto (come mostrato nella schermata).

inserisci qui la descrizione dell'immagine

Dopo di che hai bisogno di un'intestazione e piè di pagina con il tuo nome e numero di pagina.

EDIT: ( Christophe Strobbe ha commentato :)

Esiste un'estensione di LibreOffice per la colorazione del codice: Code Colorizer Formatter . (Non l'ho ancora testato.)


41
Eww, evidenziazione della sintassi manuale.
Inutile

Hai qualche idea?
loi219,

7
Inoltre, eww, codice in caratteri a larghezza variabile :(
cat

2
Esiste un'estensione di LibreOffice per la colorazione del codice: Code Colorizer Formatter . (Non l'ho ancora testato.)
user800

1
Sembra doloroso
Joe,

0

Usavo Nedit quando ero su un sistema Solaris molti anni fa perché mi piaceva un'interfaccia GUI. Vedo che è ancora in giro. Controlla.


-2

In passato, quando KDE3 era ancora una cosa importante, ho usato Kate perché un editor di testo produce davvero il miglior risultato. Oggi andrei con il lattice per una soluzione più integrabile, con il pacchetto lstlisting. Questo pacchetto non è per la stampa a colori, ma su una stampante laser i colori non sono un vantaggio.


2
Questo non risponde davvero alla domanda, vero?
contromodale

In realtà risponde alla domanda. La risposta è: "Dai un'occhiata a Kate, si è dimostrato buono in passato per me"
Arne,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.