Je voudrais convertir le code source de quelques projets en un seul fichier imprimable pour économiser sur une clé USB et l'imprimer facilement plus tard. Comment puis je faire ça?
modifier
Tout d'abord, je tiens à préciser que je souhaite uniquement imprimer les fichiers et répertoires non masqués (donc pas de contenu, .git
par exemple).
Pour obtenir une liste de tous les fichiers non masqués dans les répertoires non masqués du répertoire en cours, vous pouvez exécuter la find . -type f ! -regex ".*/\..*" ! -name ".*"
commande comme vu comme la réponse dans ce fil .
Comme suggéré dans ce même fil, j'ai essayé de créer un fichier pdf des fichiers en utilisant la commande find . -type f ! -regex ".*/\..*" ! -name ".*" ! -empty -print0 | xargs -0 a2ps -1 --delegate no -P pdf
mais malheureusement le fichier pdf résultant est un gâchis complet .
a2ps -P file *.src
vous, vous pouvez produire des fichiers postscript à partir de votre code source. Mais les fichiers PS doivent être convertis et combinés par la suite.a2ps -1 --delegate=0 -l 100 --line-numbers=5 -P pdf
- j'ai ajouté-l
100 caractères par ligne pour éviter certains retours à la ligne et les numéros de ligne, mais ce n'est qu'une préférence personnelle.Réponses:
J'ai été intrigué par votre question et je me suis un peu emporté. Cette solution va générer un joli fichier PDF avec un index cliquable et un code en couleur. Il trouvera tous les fichiers dans le répertoire et les sous-répertoires actuels et créera une section dans le fichier PDF pour chacun d'eux (voir les notes ci-dessous pour savoir comment rendre votre commande find plus spécifique).
Cela nécessite que vous ayez installé les éléments suivants (les instructions d'installation sont pour les systèmes basés sur Debian mais elles devraient être disponibles dans les référentiels de votre distribution):
pdflatex
,color
etlistings
Cela devrait également installer un système LaTeX de base si vous n'en avez pas installé.
Une fois ceux-ci installés, utilisez ce script pour créer un document LaTeX avec votre code source. L'astuce consiste à utiliser
listings
(une partie detexlive-latex-recommended
) etcolor
(installé parlatex-xcolor
) les packages LaTeX. C'est\usepackage[..]{hyperref}
ce qui rend les listes dans la table des matières des liens cliquables.Exécutez le script dans le répertoire contenant les fichiers source
Cela va créer un fichier appelé
all.pdf
dans le répertoire courant. J'ai essayé cela avec quelques fichiers source aléatoires que j'ai trouvés sur mon système (en particulier, deux fichiers de la source devlc-2.0.0
) et ceci est une capture d'écran des deux premières pages du PDF résultant:Quelques commentaires:
! -name "*~"
pour éviter les fichiers de sauvegarde.Je vous recommande d'utiliser une
find
commande plus spécifique pour trouver vos fichiers, sinon tout fichier aléatoire sera inclus dans le PDF. Si vos fichiers ont tous des extensions spécifiques (.c
et.h
par exemple), vous devez remplacer lefind
dans le script par quelque chose comme cecilistings
options , vous pouvez modifier cela pour qu'il soit exactement comme vous le souhaitez.la source
:)
src2pdf: line 36: warning: here-document at line 5 delimited by end-of-file (wanted EOF')
lors de l'exécution du script, vous devez supprimer les espaces sur la ligne EOF pour que cela fonctionne.src2pdf
insérez-le! -name "src2pdf"
dans lafind
ligne du script comme cecifind . -type f ! -regex ".*/\..*" ! -name "src2pdf" ! -name ".*" ! -name "*~" |
pour l'omettre dans le pdf.find
résultats (j'avais enregistré le script dans un autre répertoire qui se trouvait dans mon $ PATH, donc je ne l'avais pas problème). De plus, vous pouvez changer la langue utilisée pour les fichiers source pour avoir un meilleur balisage en changeantlanguage=C++
pour ce que vous voulez, il peut traiter de nombreuses langues différentes, voir ici .\usepackage[utf8]{inputenc}
\ usepackage [german] {babel} `mais il échoue à mes tests. Cependant, je soupçonne que je ne le nourris pas vrai utf8. Cela pourrait valoir sa propre question mais je vous suggère de demander sur TeX - LaTeX , ils devraient savoir.(à partir de StackOverflow )
Il en résultera un result.txt contenant:
Si votre code source a une extension différente, modifiez-la au besoin. Vous pouvez également modifier le bit d'écho pour ajouter les informations nécessaires (peut-être echo "filename $ 1" ou changer le séparateur, ou ajouter un séparateur de fin de fichier).
le lien a d'autres méthodes, utilisez donc la méthode que vous préférez. Je trouve que celui-ci est le plus flexible, bien qu'il s'accompagne d'une légère courbe d'apprentissage.
Le code fonctionnera parfaitement à partir d'un terminal bash (vient d'être testé sur un VirtualBox Ubuntu)
Si vous ne vous souciez pas du nom de fichier et ne vous souciez que du contenu des fichiers fusionnés:
fonctionnera parfaitement bien.
Une autre méthode suggérée était:
Ce qui préfixe chaque ligne avec le nom de fichier, ce qui peut être bon pour certaines personnes, personnellement, je trouve trop d'informations, c'est pourquoi ma première suggestion est la boucle for ci-dessus.
Nous remercions les membres du forum StackOverflow.
EDIT: Je viens de réaliser que vous recherchez spécifiquement HTML ou PDF comme résultat final, certaines solutions que j'ai vues consistent à imprimer le fichier texte en PostScript puis à convertir le PostScript en PDF. Un code que j'ai vu:
puis
(Vous devez avoir ghostscript)
J'espère que cela t'aides.
la source
Je sais que je suis trop tard, mais quelqu'un qui cherche une solution pourrait trouver cela utile.
Sur la base de la réponse de @ terdon, j'ai créé un script BASH qui fait le travail: https://github.com/eljuanchosf/source-code-to-pdf
la source