syntax_highlight <fichier_source> | lpr


10

Quelqu'un connaît-il un moyen simple de produire le PostScript correspondant à une version en surbrillance syntaxique d'un fichier source qui peut être dirigé directement vers une imprimante PostScript?

Comme le suggère probablement le libellé de la question ci-dessus, je recherche quelque chose que je peux exécuter à partir de la ligne de commande. Je pense à une interaction comme:

% syntax_highlight <SOURCE_FILE> | lp

... avec des commutateurs de ligne de commande au besoin, etc.

Le meilleur que j'ai trouvé jusqu'à présent est un utilitaire Unix appelé highlight, mais il a des problèmes. Le plus grave est qu'il n'a pas d'option pour sortir directement PostScript. (Comme il highlightprend en charge la sortie LaTeX, j'ai essayé de corriger un script qui automatiserait le processus de génération du fichier PostScript via * .tex => * .dvi => * .ps, mais l'apparence visuelle du résultat final est horrible, bien pire que pour le fichier HTML qui highlightgénère pour la même entrée de code source.)

Merci!

Réponses:


13

Vous pouvez utiliser vim.

vim -c hardcopy -c quit /path/to/file

Cela imprimera le fichier et quittera immédiatement. Par défaut, vim imprime avec la coloration syntaxique.

Si vous devez imprimer à partir de la sortie standard d'une commande, vous pouvez le faire:

cat some_file.c | vim -c hardcopy -c 'quit!' -

Si vous souhaitez enregistrer le fichier .ps pour plus tard, vous pouvez le faire en ajoutant une redirection à la commande de copie papier, comme ceci:

vim -c 'hardcopy > /path/to/saved.ps' -c 'quit' /path/to/file

Vim vous permet de définir de nombreuses options liées à l'impression, vous pouvez donc consulter la documentation si vous souhaitez la modifier. Bien sûr, il existe également de nombreuses options de coloration syntaxique .


5

Il existe plusieurs programmes qui impriment joliment divers langages de programmation sur Postscript, qui ne nécessitent aucun logiciel tiers pour s'exécuter:

Si vous souhaitez passer par LaTeX, vous avez plus d'options. Passer par LaTeX est surtout utile si vous voulez inclure du code et autre chose dans le même document; sinon c'est exagéré.


3

Dans Gedit, l'éditeur standard de gnome, vous pouvez imprimer dans un fichier, choisir Postscript (PDF par défaut) et marquer sur le troisième onglet, pour utiliser la surbrillance, qui est désactivée par défaut, ce qui produit un joli fichier ps pour moi.

Et Gedit a beaucoup de fichiers de syntaxe, pour servir de nombreux langages de programmation, HTML, SQL, XML, fichiers rc, vous l'appelez.


Cela fonctionne, sauf que pour moi (gedit 3.10.4 sur Ubuntu 14.04.4) le PDF généré est en niveaux de gris, pas en couleur. L'impression entraîne également directement des niveaux de gris.
MarnixKlooster ReinstateMonica

0

Développant la réponse de Shawn J. Goff:

Vous pouvez utiliser la commande vim à ligne unique suivante pour créer un fichier .ps à partir de vim:

:hardcopy > %.ps

Si vous préférez un fichier .pdf, vous pouvez faire:

:hardcopy > %.ps | !ps2pdf %.ps && rm %.ps

Remarque:

  • Le %est un raccourci pour le nom du fichier en cours, donc HelloWorld.Cimprimeront HelloWorld.C.psouHelloWorld.C.pdf

En outre, pour modifier la police rendue, définissez la police d'imprimante avant d' exécuter la commande de copie papier. Par exemple, pour sélectionner Courier 8:

:set printerfont=Courier:h8

En rassemblant le tout, j'ai choisi de mettre ce qui suit dans mon fichier .vimrc afin de pouvoir simplement exécuter la commande :HardcopyPsou :HardcopyPdf(qui peut également fonctionner sur une plage sélectionnée dans un fichier):

set printfont=Courier:h8 "select the font to use when printing
command! -range=% HardcopyPs <line1>,<line2> hardcopy > %.ps && echo 'Created: %.ps'
command! -range=% HardcopyPdf <line1>,<line2> hardcopy > %.ps | !ps2pdf %.ps && rm %.ps && echo 'Created: %.pdf'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.