Gostaria de converter o código fonte de alguns projetos em um arquivo imprimível para economizar em um usb e imprimir facilmente mais tarde. Como eu posso fazer isso?
Editar
Primeiro, quero esclarecer que só quero imprimir os arquivos e diretórios não ocultos (portanto, sem conteúdo .git
).
Para obter uma lista de todos os arquivos não ocultos em diretórios não ocultos no diretório atual, você pode executar o find . -type f ! -regex ".*/\..*" ! -name ".*"
comando como visto como a resposta neste encadeamento .
Conforme sugerido no mesmo tópico, tentei criar um arquivo pdf dos arquivos usando o comando, find . -type f ! -regex ".*/\..*" ! -name ".*" ! -empty -print0 | xargs -0 a2ps -1 --delegate no -P pdf
mas infelizmente o arquivo pdf resultante é uma bagunça completa .
a2ps -P file *.src
você pode produzir arquivos postscript a partir do seu código-fonte. Mas os arquivos PS precisam ser convertidos e combinados posteriormente.a2ps -1 --delegate=0 -l 100 --line-numbers=5 -P pdf
- eu adicionei-l
100 caracteres por linha para evitar que algumas palavras sejam digitadas e números de linha, mas isso é apenas uma preferência pessoal.Respostas:
Fiquei intrigado com sua pergunta e fiquei meio empolgado. Esta solução irá gerar um bom arquivo PDF com um índice clicável e código destacado em cores. Ele localizará todos os arquivos no diretório e subdiretórios atuais e criará uma seção no arquivo PDF para cada um deles (consulte as notas abaixo para saber como tornar seu comando find mais específico).
Requer que você tenha o seguinte instalado (as instruções de instalação são para sistemas baseados em Debian, mas elas devem estar disponíveis nos repositórios da sua distribuição):
pdflatex
,color
elistings
Isso também deve instalar um sistema LaTeX básico, se você não tiver um instalado.
Uma vez instalados, use este script para criar um documento LaTeX com o seu código-fonte. O truque é usar os pacotes
listings
(parte dostexlive-latex-recommended
) ecolor
(instalados peloslatex-xcolor
) LaTeX. O\usepackage[..]{hyperref}
é o que faz com que as listagens na tabela de conteúdo links clicáveis.Execute o script no diretório que contém os arquivos de origem
Isso criará um arquivo chamado
all.pdf
no diretório atual. Eu tentei isso com alguns arquivos de origem aleatórios que encontrei no meu sistema (especificamente, dois arquivos da fonte devlc-2.0.0
) e esta é uma captura de tela das duas primeiras páginas do PDF resultante:Alguns comentários:
! -name "*~"
para evitar arquivos de backup.Eu recomendo que você use um
find
comando mais específico para encontrar seus arquivos; caso contrário, qualquer arquivo aleatório será incluído no PDF. Se todos os seus arquivos tiverem extensões específicas (.c
e.h
por exemplo), você deverá substituir ofind
no script por algo como istolistings
opções , você pode ajustá-lo exatamente como você deseja.fonte
:)
src2pdf: line 36: warning: here-document at line 5 delimited by end-of-file (wanted EOF')
ao executar o script, precisará excluir o espaço em branco na linha EOF para que funcione.src2pdf
, insira! -name "src2pdf"
afind
linha no script como estafind . -type f ! -regex ".*/\..*" ! -name "src2pdf" ! -name ".*" ! -name "*~" |
para omiti-lo no pdf.find
resultados (eu salvei o script em outro diretório que estava no meu $ PATH, então não tinha esse problema). Além disso, você pode alterar o idioma usado para que os arquivos de origem tenham uma melhor marcação, alterandolanguage=C++
para o que quiser, pois ele pode lidar com vários idiomas diferentes, veja aqui .\usepackage[utf8]{inputenc}
\ usepackage [german] {babel} `mas falha em meus testes. No entanto, eu suspeito que não estou alimentando o utf8 de verdade. Isso pode valer a pena, mas eu sugiro que você pergunte no TeX - LaTeX , eles devem saber.(do StackOverflow )
Isso resultará em um result.txt contendo:
Se o seu código-fonte tiver extensão diferente, basta alterar conforme necessário. Você também pode editar o bit de eco para adicionar as informações necessárias (talvez faça eco "nome do arquivo $ 1" ou altere o separador ou adicione um separador de fim de arquivo).
o link tem outros métodos; portanto, use o método que você mais gosta. Acho que este é o mais flexível, embora venha com uma ligeira curva de aprendizado.
O código funcionará perfeitamente em um terminal bash (apenas testado em um Ubuntu VirtualBox)
Se você não se importa com o nome do arquivo e apenas se importa com o conteúdo dos arquivos mesclados:
funcionará perfeitamente bem.
Outro método sugerido foi:
Que prefixará cada linha com o nome do arquivo, o que pode ser bom para algumas pessoas. Pessoalmente, encontro muitas informações. Por isso, minha primeira sugestão é o loop for acima.
Crédito para as pessoas do fórum StackOverflow.
Edição: Acabei de perceber que você está buscando especificamente HTML ou PDF como resultado final. Algumas soluções que vi foram imprimir o arquivo de texto em PostScript e depois converter o postscript em PDF. Algum código que eu já vi:
então
(Requer que você tenha o ghostscript)
Espero que isto ajude.
fonte
Sei que estou muito atrasado, mas alguém que procura uma solução pode achar isso útil.
Com base na resposta de @ terdon, criei um script BASH que faz o trabalho: https://github.com/eljuanchosf/source-code-to-pdf
fonte