Editor de texto para imprimir código C ++

34

Estoy buscando un editor para imprimir (en papel) el código C ++. Actualmente estoy en la escuela de ingeniería y el instructor nos ha pedido que enviemos el código en papel.

¡Quiere nombre + apellido, el número de clase (en el encabezado), el número de página en la parte inferior y las palabras reservadas en negrita para cada página!

En Windows se puede hacer con notepadd++. Pero estoy en Linux y no he encontrado un IDE o editor de texto que funcione. (Ya lo he intentado SCITE, gedity Syntaxic)

loi219
fuente
44
a2ps es tu amigo Tómese su tiempo para configurarlo.
Satō Katsura el
55
Para solicitudes como esta, puede considerar softwarerecs.stackexchange.com
Eric Renouf
30
Parece que su maestro ha invertido en la industria de la tala.
Anthon
10
¿Tu profesor quiere código ... en papel ?
Lightness compite con Monica el
8
@ loi219 ¿Un maestro de la "vieja escuela" o un viejo "maestro de la escuela", o ambos? ;-)
usuario800

Respuestas:

76

Bueno, si quiere hacer un esfuerzo adicional, hágalo en LaTeX y proporcione un archivo PDF de nivel profesional. No ha mencionado su distribución, así que le daré instrucciones para los sistemas basados ​​en Debian. Sin embargo, la misma idea básica se puede hacer en cualquier Linux.

  1. Instale un sistema LaTeX y los paquetes necesarios.

    sudo apt-get install texlive-latex-extra latex-xcolor texlive-latex-recommended
    
  2. Cree un nuevo archivo (llámelo report.tex) con los siguientes contenidos:

    \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}
    

    Solo asegúrese de cambiar /path/to/your/code.cen la penúltima línea para que apunte a la ruta real de su archivo C. Si tiene más de un archivo para incluir, agregue ay \newpageluego uno nuevo \lstinputlistingpara el otro archivo.

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

    pdflatex report.tex    
    

Probé esto en mi sistema con un archivo de ejemplo que encontré aquí y crea un PDF que se ve así:

primera página del pdf creado

Para obtener un ejemplo más completo que encontrará automáticamente todos los archivos .c en la carpeta de destino y creará un archivo PDF indexado con cada uno en una sección separada, vea mi respuesta aquí .

terdon
fuente
17
¡Tan pronto como comience con LaTeX, no podrá soltarlo! Ojalá supiera TeX en la escuela secundaria ... (o lo enseñarían como una alternativa a la palabra).
Kyslik
2
Creo que LaTex se instalará por defecto en la mayoría de los sistemas, especialmente en una escuela de ingeniería. Escriba "which latex" en el símbolo del sistema: si devuelve una ruta, generalmente / usr / bin / latex, puede omitir el paso 1. Además, si el editor de su elección tiene un lenguaje macro decente, puede ejecutar este script desde dentro del editor, utilizando, por ejemplo, "gv --watch" para mostrar la salida en vivo.
jamesqf
44
@jamesqf Nunca he visto un sistema con LaTeX instalado por defecto. Sí, la gente de TI en alguna escuela podría haberlo instalado, y puede haber distribuciones de Linux especializadas que lo tengan por defecto, pero la gran mayoría de los sistemas no lo tendrán.
terdon
3
@terdon: nunca he visto una instalación en un departamento de ingeniería sin LaTeX. Es bastante esencial para cualquiera que necesite producir resultados imprimibles.
Toby Speight
1
@terdon: 'Predeterminado' o seleccionado en la instalación. No recuerdo haber hecho nada especial para obtener LaTeX en mis sistemas (OpenSuSE), pero ha pasado un tiempo desde que hice la última instalación. De cualquier manera, la verificación es simple.
jamesqf
29

Por lo general, uso enscript: algo así como

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

será un comienzo: esto escribe la salida de PostScript output.ps, para que pueda obtener una vista previa y sobrescribirla mientras está jugando con la configuración y luego imprimirla una vez que esté satisfecho. Vea la página de manual para opciones más extensas.

EDITAR hacer que el pie de página funcione correctamente es un poco molesto con la escritura; nunca me había dado cuenta porque nunca lo he requerido. Si guarda este archivo en ~/.enscript/so.hdr(probablemente necesite crear el directorio), obtendrá el resultado requerido con

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

dando

ingrese la descripción de la imagen aquí


Aproximadamente,

  • LaTeχ es la mejor calidad y el mayor trabajo para configurar,
  • enscript o a2ps son intermedios tanto en calidad como en trabajo,
  • El :hardcopycomando de vim es fácil pero no tan flexible, y
  • hacer un resaltado de sintaxis manualmente en un editor que no reconoce el código es un gran esfuerzo para obtener un rendimiento deficiente.
Inútil
fuente
Esto es absolutamente lo que estoy buscando. ¡Muchas gracias!
loi219
Yo segundo emscript. Tiene muchas opciones y da muy buenos resultados.
rubik
9

Puede usar el :TOhtmlcomando en vim. Esto representa lo que ve (es decir, resaltado de sintaxis) como html. A partir de ahí, funciona un navegador web que puede imprimir en pdf, ya que generalmente puede personalizar el contenido del encabezado / pie de página.

Probablemente sea similar al :hardcopycomando mencionado por Useless, pero no puedo verificarlo en mi sistema en este momento.

Otra posibilidad es imprimir desde QtCreator, sin embargo, no parece haber una manera de configurar los encabezados / pies de página.

Sombra
fuente
4

Geany es un IDE simple que le brinda muchas opciones para lo que va en el encabezado.

Las palabras reservadas se pueden manipular en el menú de opciones, pero el resaltado del código lo hace para el estilo del bloc de notas ++. (es posible que deba copiar / descargar los esquemas de color en la carpeta "/home/$USER_NAME/.config/geany/colorschemes/" para obtener el que desea)

Muy simple y personalmente me gustan mucho los números de línea y el formato que imprime.

También geany se ejecuta tanto en Windows como en Linux.

Página 1

Página 2

Página 3

Joe
fuente
2

Como solicita un editor , puede imprimir directamente desde Emacs, utilizando ps-print-buffer.

Los encabezados y pies de página están en el grupo Personalizar llamado ps-print-headers.

Suponiendo que use el bloqueo de fuente, probablemente tenga el resaltado de sintaxis que se requiere. Se puede ajustar, si es necesario, utilizando la ps-extend-facefunción.


Habiendo dicho eso, todavía te recomiendo que uses una herramienta adecuada para 'grind' como a2ps, enscript o LaTeX +.

Toby Speight
fuente
1

Para completar, y aunque no recomendaría esa solución, el lpprograma tiene una -o prettyprintopción que puede resaltar la sintaxis.

Puede usarlo así, por ejemplo:

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

Aquí utilicé la -topción (título) para configurar el encabezado. Sin embargo, no puedo cambiar el pie de página (pero el número de página aparece en la parte superior). Puede configurar el tipo de archivo con la opción -o document-format (la lista de valores aceptables debe estar en /usr/share/cups/mime/mime.typeso tal vez /etc/cups/mime/mime.types) pero si su archivo tiene la extensión correcta, no debería ser necesario. Además, el resaltado de sintaxis está lejos de ser perfecto.

lgeorget
fuente
1

Solo necesita LibreOffice Writer .

Pegue su código C / C ++.

Encuentre las palabras y haga Bold todas las palabras clave de C ++.

Puede encontrarlos aquí: http://en.cppreference.com/w/cpp/keyword

Para buscar una palabra Presione Ctrl + F. Seleccione "Hacer coincidir mayúsculas y minúsculas" y haga clic en Buscar todo (como se muestra en la captura de pantalla).

ingrese la descripción de la imagen aquí

Después de eso, necesita un encabezado y pie de página con su nombre y número de página.

EDITAR: ( Christophe Strobbe comentó :)

Hay una extensión de LibreOffice para colorear código: Code Colorizer Formatter . (Todavía no lo he probado).

GeoMint
fuente
41
Eww, resaltado manual de sintaxis.
Inútil el
¿Tienes alguna idea?
loi219
77
Además, eww, código en fuente de ancho variable :(
cat
2
Hay una extensión de LibreOffice para colorear código: Code Colorizer Formatter . (Todavía no lo he probado)
User800
1
Esto parece doloroso
Joe
0

Solía ​​usar Nedit cuando estaba en un sistema Solaris hace muchos años, ya que me gustaba una interfaz GUI. Veo que todavía está por aquí. Echale un vistazo.

Kalpana N.
fuente
-2

En el pasado, cuando KDE3 todavía era algo importante, utilizaba a Kate porque era un editor de texto que realmente producía el mejor resultado. Hoy iría con látex para una solución más incorporable, con el paquete en la lista. Este paquete no es para salida de color, pero en una impresora láser los colores no son una ventaja.

Arne
fuente
2
Esto realmente no responde la pregunta, ¿verdad?
contramodo
En realidad responde la pregunta. La respuesta es: "Echa un vistazo a Kate, resultó ser bueno en el pasado para mí"
Arne