Editor de texto para imprimir código C ++

34

Estou procurando um editor para imprimir (em papel) código C ++. Atualmente, estou na escola de engenharia e o instrutor nos pediu para enviar o código no papel.

Ele quer o nome + sobrenome, o número da classe (no cabeçalho), o número da página na parte inferior e as palavras reservadas em negrito para cada página!

No Windows, isso pode ser feito notepadd++. Mas eu estou no Linux e não encontrei um IDE ou editor de texto que funcione. (Eu já tentei SCITE, gedite Syntaxic)

loi219
fonte
4
A2PS é seu amigo. Leve o seu tempo para configurá-lo.
Satō Katsura
5
Para solicitações como essa, convém considerar softwarerecs.stackexchange.com
Eric Renouf
30
Parece que seu professor investiu na indústria madeireira.
Anthon
10
Seu professor quer código ... no papel ?!
Lightness Races com Monica
8
@ loi219 Um professor da "velha escola" ou um antigo "professor da escola", ou ambos? ;-)
user800 4/16

Respostas:

76

Bem, se você quiser ir além, faça-o no LaTeX e forneça um arquivo PDF de nível profissional. Você não mencionou sua distribuição, então eu darei instruções para sistemas baseados no Debian. A mesma idéia básica pode ser feita em qualquer Linux.

  1. Instale um sistema LaTeX e pacotes necessários

    sudo apt-get install texlive-latex-extra latex-xcolor texlive-latex-recommended
    
  2. Crie um novo arquivo (chame-o report.tex) com o seguinte conteúdo:

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

    Apenas certifique-se de alterar /path/to/your/code.ca penúltima linha para que aponte para o caminho real do seu arquivo C. Se você tiver mais de um arquivo para incluir, adicione um \newpagee um novo \lstinputlistingpara o outro arquivo.

  3. Compilar um PDF (isso cria report.pdf)

    pdflatex report.tex    
    

Eu testei isso no meu sistema com um arquivo de exemplo que encontrei aqui e ele cria um PDF parecido com este:

primeira página do pdf criado

Para um exemplo mais abrangente que encontrará automaticamente todos os arquivos .c na pasta de destino e criará um arquivo PDF indexado com cada um em uma seção separada, veja minha resposta aqui .

terdon
fonte
17
Assim que você começa com o LaTeX, você não pode deixar de ir! Eu gostaria de conhecer o TeX no ensino médio ... (ou eles o ensinariam como uma alternativa à palavra).
`` Kyslik
2
Eu acho que o LaTex seria instalado por padrão na maioria dos sistemas, especialmente em uma escola de engenharia. Digite "what latex" em um prompt de comando: se ele retornar um caminho, normalmente / usr / bin / latex, você poderá pular a etapa 1. Além disso, se o seu editor de escolha tiver uma linguagem macro decente, você poderá executar este script a partir do editor, usando, por exemplo, "gv --watch" para exibir a saída ao vivo.
jamesqf
4
@jamesqf Eu nunca vi um sistema com o LaTeX instalado por padrão. Sim, o pessoal de TI de alguma escola pode ter instalado e pode haver distribuições especializadas do Linux que o possuem por padrão, mas a grande maioria dos sistemas não.
terdon
3
@terdon - nunca vi uma instalação em um departamento de engenharia sem o LaTeX. É muito essencial para quem precisa produzir uma saída imprimível.
precisa
11
@terdon: 'Padrão' ou selecionado na instalação. Não me lembro de ter feito algo especial para obter o LaTeX nos meus sistemas (OpenSuSE), mas já faz um tempo desde que fiz a última instalação. De qualquer forma, a verificação é simples.
jamesqf
29

Eu usaria geralmente enscript: algo como

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

será um começo - isso grava a saída postscript output.ps, para que você possa visualizar e substituir isso enquanto estiver mexendo na configuração e imprimi-la quando estiver satisfeito. Veja a página de manual para opções mais abrangentes.

EDIT fazer com que o rodapé funcione corretamente é um pouco complicado com o enscript - eu nunca havia notado porque nunca o exigi. Se você salvar este arquivo em ~/.enscript/so.hdr(provavelmente precisará criar o diretório), obterá a saída necessária com

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

dando

insira a descrição da imagem aqui


Aproximadamente,

  • O LaTeχ é da melhor qualidade e mais trabalho para configurar,
  • enscript ou a2ps são intermediários em qualidade e trabalho,
  • O :hardcopycomando do vim é fácil, mas não tão flexível, e
  • realçar a sintaxe manualmente em um editor que não reconhece código é muito esforço para obter um retorno ruim.
Sem utilidade
fonte
Isso é absolutamente o que estou procurando. Muito obrigado!
loi219
Eu segundo emscript. Tem muitas opções e oferece resultados muito bons.
Rubik
9

Você pode usar o :TOhtmlcomando no vim. Isso renderiza o que você vê (ou seja, realce da sintaxe) como html. A partir daí, um navegador da web que pode imprimir em pdf funciona, pois geralmente você pode personalizar o conteúdo do cabeçalho / rodapé.

Provavelmente isso é semelhante ao :hardcopycomando mencionado por Useless, mas não posso verificar no meu sistema no momento.

Outra possibilidade é imprimir a partir do QtCreator, no entanto, não parece haver uma maneira de definir os cabeçalhos / rodapés.

Sombra
fonte
4

Geany é um IDE simples que oferece muitas opções para o que está no cabeçalho.

Palavras reservadas podem ser manipuladas no menu de opções, mas o destaque do código faz isso no estilo do bloco de notas ++. (pode ser necessário copiar / baixar os esquemas de cores para a pasta "/home/$USER_NAME/.config/geany/colorschemes/" para obter o que você deseja)

Muito simples e pessoalmente, eu realmente gosto dos números das linhas e do formato que eles imprimem.

Também geany é executado no Windows e no Linux.

Página 1

Página 2

Page 3

Joe
fonte
2

Como você solicita um editor , pode imprimir diretamente do Emacs usando ps-print-buffer.

Os cabeçalhos e rodapés estão no grupo Personalizar chamado ps-print-headers.

Supondo que você use o bloqueio de fonte, você provavelmente terá o destaque da sintaxe necessário. Pode ser ajustado, se necessário, usando a ps-extend-facefunção


Dito isto, eu ainda recomendo que você use uma ferramenta 'grind' adequada, como listagens a2ps, enscript ou LaTeX +.

Toby Speight
fonte
1

Para garantir a integridade, e embora eu não recomende essa solução, o lpprograma possui uma -o prettyprintopção que pode destacar a sintaxe.

Você pode usá-lo assim, por exemplo:

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

Aqui eu usei a -topção (title) para definir o cabeçalho. Não consigo alterar o rodapé (mas o número da página aparece na parte superior). Você pode definir o tipo de arquivo com a opção -o document-format (a lista de valores aceitáveis ​​deve estar /usr/share/cups/mime/mime.typesou talvez /etc/cups/mime/mime.types), mas se o arquivo tiver a extensão correta, não será necessário. Além disso, o destaque da sintaxe está longe de ser perfeito.

lgeorget
fonte
1

Você só precisa do LibreOffice Writer .

Cole seu código C / C ++.

Encontre as palavras e faça o Negrito todas as palavras-chave em C ++.

Você pode encontrá-los aqui: http://en.cppreference.com/w/cpp/keyword

Para encontrar uma palavra Pressione Ctrl + F. Selecione "Combinar maiúsculas e minúsculas" e clique em Localizar tudo (como mostrado na captura de tela).

insira a descrição da imagem aqui

Depois disso, você precisa de um cabeçalho e rodapé com seu nome e número da página.

EDIT: ( Christophe Strobbe comentou :)

Existe uma extensão do LibreOffice para colorir códigos: Code Colorizer Formatter . (Ainda não testei.)

GeoMint
fonte
41
Eww, realce de sintaxe manual.
inútil
Você tem alguma ideia?
Loi219 /
7
Além disso, eww, código em fonte de largura variável :(
cat
2
Existe uma extensão do LibreOffice para colorir códigos: Code Colorizer Formatter . (Ainda não testei.) #
4500 user800 4/16
11
Isso parece doloroso
Joe
0

Eu costumava usar o Nedit quando estava em um sistema Solaris há muitos anos, pois gostava de uma interface GUI. Vejo que ainda está por aí. Confira.

Kalpana N.
fonte
-2

No passado, quando o KDE3 ainda era uma grande coisa, eu usei o Kate porque para um editor de texto ele realmente produz a melhor saída. Hoje eu usaria o látex para uma solução mais incorporável, com o pacote lstlisting. Este pacote não é para impressão em cores, mas em uma impressora a laser as cores não são uma vantagem.

Arne
fonte
2
Isso realmente não responde à pergunta, responde?
Countermode #
Na verdade, ele responde à pergunta. A resposta é: "Dê uma olhada em Kate, ele provou ser bom no passado para mim"
Arne