Pacote LaTeX para destaque de sintaxe de código em vários idiomas


164

Estou procurando um pacote LaTeX que realce a sintaxe no código. Por exemplo, agora eu uso o bloco literal para escrever código:

\begin{verbatim}
    <html>
       <head>
           <title>Hello</title>
       </head>
       <body>Hello</body>
    </html>
\end{verbatim}

E isso funciona bem para exibir o código no meu documento. Mas, suponha que eu queira destacar a marcação HTML da maneira que um IDE faria no documento de saída? Existe um pacote que poderia ajudar?

Eu gostaria de fazer o mesmo para várias linguagens como Java, C #, HTML, CSS e assim por diante.


4
Eu não estou satisfeito lstlisting. Ele não destaca o código XML e estraga tudo ao usar caracteres Unicode externos. Também não há suporte para JavaScript, ao que parece. O LGrind pode lidar com essas coisas?
Webjunkie #

Respostas:


157

Você pode usar o pacote de listagens . Ele suporta muitos idiomas diferentes e há muitas opções para personalizar a saída.

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

20
Isso faz cores por padrão? Não estou vendo resultados coloridos em meu uso de teste e não tenho certeza se isso é um erro da minha parte ou simplesmente não é um recurso.
Benson

12
Encontrei uma resposta aqui: tjansson.dk/?p=419 . Você pode simplesmente usar o comando lstset para definir todos os tipos de estilos para propriedades diferentes.
Benson

144

Depois de fazer uma pergunta semelhante, criei outro pacote que usa pigmentos e oferece muito mais opções do que texments. É chamado mintede é bastante estável e utilizável.

Apenas para mostrar, aqui está um código destacado com cunhado:

Código de exemplo


Este é realmente um bom trabalho. Ter que instalar Pygments representa um desafio, mas tenho certeza que a maioria das pessoas estará disposta a fazê-lo.
precisa saber é o seguinte

1
@Incent: Infelizmente, a instalação de pigmentos no Windows é um pouco mais complicada no momento (o usuário precisa adaptar a PATHvariável e criar um script cmd). Espero convencer os mantenedores de Pigmentos a enviar pygmentizecom um .exeinvólucro para facilitar essa etapa.
Konrad Rudolph

1
Depois de experimentar as listagens e os cunhados / pigmentos, decidi que cunhado era muito melhor (mais flexível). No entanto, será necessário pular uma dúzia de aros, atualizar para o MiKTeX 2.8, instalar o Python, instalar outros componentes e assim por diante. A documentação cunhada é ruim e não suporta a quebra de linhas longas. Mas, eventualmente, consegui renderizar Java / XML em cores Eclipse! jevon.org/wiki/Eclipse_Pygments_Style
jevon

@soundasleepful: a documentação cunhada é atualizada continuamente. ;-) Na verdade, acho bastante extenso (é claro que sou tendencioso), mas fico feliz em responder a qualquer reclamação. Tal como está, a seção “requisitos” é reconhecidamente horrível.
Konrad Rudolph

3
mintedestá instalado e funcionando no ShareLatex e no Overleaf. Salvar-se a dor de cabeça de instalar Pygments;)
grofte

21

Eu recomendo pigmentos . Ele aceita um trecho de código em qualquer idioma e gera a sintaxe destacada do código LaTeX. Ele usa pacotes de fantasiavrb e cores para produzir sua saída. Pessoalmente, prefiro-o ao pacote de listagem. Acho fancyvrb cria resultados muito mais bonitos.


1
Embora eu admire a macrologia por trás das listagens, também concordo que os pigmentos têm a vantagem: realce melhor, personalização mais fácil, alguma capacidade de misturar sintaxes e a capacidade de gerar outros formatos além do látex, como HTML.
Charles Stewart

Em um beamerdocumento de tipo, essa é aparentemente a única opção funcional. Nem mintednem listingscompilar corretamente com beamer.
Luís de Sousa

Sim, eu já usei listingscom beamer, mas você precisa especificar quais são os quadros que incluem as listagens [fragile].
sobrenatural


10

Eu usaria o pacote cunhado, como mencionado no desenvolvedor Konrad Rudolph, em vez do pacote de listagem . Aqui está o porquê:

pacote de listagem

O pacote de listagem não suporta cores por padrão. Para usar cores, você precisará incluir o pacote de cores e definir regras de cores sozinho com o comando \ lstset, conforme explicado aqui para o código matlab .

Além disso, o pacote de listagem não funciona bem com o unicode, mas você pode corrigir esses problemas, conforme explicado aqui e aqui .

O código a seguir

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

produz a seguinte imagem:

insira a descrição da imagem aqui

pacote cunhado

O pacote cunhado suporta cores, unicode e parece incrível. No entanto, para usá-lo, você precisa ter o python 2.6 e pigmentos . No Ubuntu, você pode verificar sua versão python no terminal com

python --version

e você pode instalar pigmentos com

sudo apt-get install python-pygments

Então, como o minted faz chamadas para pigmentos, você precisa compilá-lo com -shell-escape assim

pdflatex -shell-escape yourfile.tex

Se você usar um editor de látex como o TexMaker ou algo assim, eu recomendaria adicionar um comando de usuário, para que você ainda possa compilá-lo no editor.

O código a seguir

\documentclass{article}
\usepackage{minted}
\begin{document}

\begin{minted}{html}
    <!DOCTYPE html>
    <html>
       <head>
           <title>Hello</title>
       </head>

       <body>Hello</body>
    </html>
\end{minted}
\end{document}

produz a seguinte imagem:

insira a descrição da imagem aqui


4

Uso principalmente listas de artigos em papéis, mas para impressões coloridas (para slides), em vez disso, uso pigmentos.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.