Inserindo código neste documento LaTeX com recuo


427

Como insiro código em um documento LaTeX? Existe algo como:

\begin{code}## Heading ##
...
\end{code}

A única coisa que eu realmente preciso é de indentação e uma fonte de largura fixa. O destaque da sintaxe pode ser bom, embora definitivamente não seja necessário.


Não é uma duplicata exata, mas as respostas abrangem o mesmo terreno: consulte stackoverflow.com/questions/741985/…
Charles Stewart

Eu também tenho uma pergunta de acompanhamento aqui: stackoverflow.com/questions/3408996/…
sixtyfootersdude

Respostas:


631

Use listingspacote.

Configuração simples para o cabeçalho LaTeX (antes \begin{document}):

\usepackage{listings}
\usepackage{color}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

\lstset{frame=tb,
  language=Java,
  aboveskip=3mm,
  belowskip=3mm,
  showstringspaces=false,
  columns=flexible,
  basicstyle={\small\ttfamily},
  numbers=none,
  numberstyle=\tiny\color{gray},
  keywordstyle=\color{blue},
  commentstyle=\color{dkgreen},
  stringstyle=\color{mauve},
  breaklines=true,
  breakatwhitespace=true,
  tabsize=3
}

Você pode alterar o idioma padrão no meio do documento com \lstset{language=Java}.

Exemplo de uso no documento:

\begin{lstlisting}
// Hello.java
import javax.swing.JApplet;
import java.awt.Graphics;

public class Hello extends JApplet {
    public void paintComponent(Graphics g) {
        g.drawString("Hello, world!", 65, 95);
    }    
}
\end{lstlisting}

Aqui está o resultado:

Imagem de exemplo


3
Eu tenho uma pergunta de acompanhamento relacionada ao seu código. Dê uma olhada se tiver uma chance: stackoverflow.com/questions/3408996/…
sixtyfootersdude

1
Existe uma maneira de reduzir o espaço entre as linhas de código?
Sukhvir #

É possível adicionar um pequeno texto abaixo do trecho de código, semelhante ao texto escrito em uma figura no Latex?
Brian J

@ Brian Eu não estou ciente disso. Talvez ter o código dentro de um figurepoderia alcançar o efeito.
Cloudanger

Ouvi dizer que este pacote está obsoleto!
xxx ---

165

Você também pode usar o ambiente literal

\begin{verbatim}
your
code
example
\end{verbatim}

57
Há um problema com o uso de guias dentro do ambiente literal. Se as guias são convertidas em "espaço", o problema desaparece.
midtiby 5/07/10

1
Isso é bom para mostrar exemplos de conteúdo de arquivos de texto (por exemplo, dados textuais a serem lidos / processados ​​por um programa).
N

Para artigo de duas colunas, ele não lida bem com as margens.
Sazzad Hissain Khan

115

Aqui está como adicionar código embutido:

Você pode adicionar código embutido com {\tt code }ou \texttt{ code }. Se você deseja formatar o código embutido, é melhor fazer seu próprio comando

\newcommand{\code}[1]{\texttt{#1}}

Além disso, observe que os blocos de código podem ser carregados de outros arquivos com

\lstinputlisting[breaklines]{source.c}

breaklinesnão é obrigatório, mas acho útil. Esteja ciente de que você precisará especificar \usepackage{ listagens } para esta.

Atualização: O pacote de listagens também inclui o \lstinlinecomando, que possui os mesmos recursos de sintaxe dos comandos \lstlistinge \lstinputlisting(consulte a resposta do Cloudanger para obter detalhes de configuração). Como mencionado em algumas outras respostas, também há o pacote cunhado, que fornece o \mintinlinecomando. Como \lstinline, \mintinlinefornece a mesma sintaxe destacada como um bloco de código cunhado regular:

\documentclass{article}

\usepackage{minted}

\begin{document}
  This is a sentence with \mintinline{python}{def inlineCode(a="ipsum)}
\end{document}

1
existe uma maneira melhor de código embutido que ativa cores de palavras-chave etc.?
Nano

Sim. Atualizei minha resposta para discuti-los.
alan

como você insere espaçamento / guias para torná-lo mais legível?
Charlie Parker

32

Pacotes especializados como minted, que depende de pigmentos para fazer a formatação, oferecem várias vantagens sobre o listingspacote. Para citar o mintedmanual,

Os pigmentos fornecem destaque de sintaxe muito superior em comparação aos pacotes convencionais. Por exemplo, as listagens basicamente destacam apenas sequências, comentários e palavras-chave. Os pigmentos, por outro lado, podem ser completamente personalizados para destacar qualquer tipo de token que o idioma de origem possa suportar. Isso pode incluir seqüências de formatação especiais dentro de strings, números, diferentes tipos de identificadores e construções exóticas, como tags HTML.


1
Eu tentei cunhado, a documentação é bastante direta. O estilo padrão é bom.
user2262504

5
Esta pode ser uma solução insatisfatória para muitos usuários, devido à chamada externa necessária para o Pygmentsic. Em particular, o requisito de chamar o látex com a -shell-escapediretiva é, na melhor das hipóteses, uma pequena modificação nos sistemas de compilação existentes e, na pior das hipóteses, incompatível com as preferências de segurança de alguns usuários.
KDN 10/01/19

12

Use Minted .

É um pacote que facilita o destaque expressivo da sintaxe no LaTeX usando a poderosa biblioteca de pigmentos . O pacote também oferece opções para personalizar a saída destacada do código-fonte usando fancyvrb .

É muito mais evoluído e personalizável do que qualquer outro pacote!


No entanto, como já mencionado em uma resposta semelhante, -shell-escapepode ser uma droga para algumas pessoas.
Egor Hans 23/07

8

Trabalhos cunhados no Overleaf , TeX Live e MiKTeX.

Exemplo:

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

\begin{minted}[mathescape, linenos]{python}

# Note: $\pi=\lim_{n\to\infty}\frac{P_n}{d}$
title = "Hello World"

sum = 0
for i in range(10):
 sum += i

\end{minted}

\end{document}

Resultado:

insira a descrição da imagem aqui


6

Como ainda não foi mencionado aqui, pode valer a pena adicionar mais uma opção, pacote spverbatim(sem destaque de sintaxe):

\documentclass{article}
\usepackage{spverbatim}

\begin{document}

\begin{spverbatim}
  Your code here
\end{spverbatim}

\end{document}

Além disso, se o destaque da sintaxe não for necessário, empacote alltt:

\documentclass{article}
\usepackage{alltt}

\begin{document}

\begin{alltt}
  Your code here
\end{alltt}

\end{document}

1
Isso é mais ou menos o que eu quero, mas não consigo recuar com as guias. Como você recua / existe um pacote semelhante que permita um recuo mais fácil?
Darokrithia 19/09/18

1
@Darokrithia Eu editei minha resposta: você pode verificar / enfrentar o recuo? :)
MattAllegro

1
Não parece funcionar. Posso enviar o código que estou usando, mas a formatação é destruída nos comentários. BTW, usei uma resposta diferente e funcionou bem, mas acho que isso ainda deve ser corrigido para futuros leitores.
Darokrithia 26/09

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.