> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/overleaf-learn-latex-pt/formatacao/11-code-listing.md).

# Listagem de código

## Introdução

O LaTeX é amplamente utilizado na ciência e a programação tornou-se um aspeto importante em várias áreas da ciência, daí a necessidade de uma ferramenta que apresente corretamente o código. Este artigo explica como usar o padrão **verbatim** ambiente, bem como o pacote **listings**, que fornecem funcionalidades mais avançadas de formatação de código. [Este artigo separado](/latex/overleaf-learn-latex-pt/formatacao/12-code-highlighting-with-minted.md) discute o `minted` pacote, que faz realce de sintaxe usando o Python `pygmentize` biblioteca.

## O ambiente verbatim

A ferramenta predefinida para exibir código em LaTeX é `verbatim`, que gera uma saída em fonte monoespaçada.

```latex
\begin{verbatim}
O texto contido no ambiente \texttt{verbatim}
é impresso diretamente
e todos os comandos \LaTeX{} são ignorados.
\end{verbatim}
```

[Abra este exemplo no Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=verbatim+text+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bverbatim%7D%0AText+enclosed+inside+%5Ctexttt%7Bverbatim%7D+environment+%0Ais+printed+directly+%0Aand+all+%5CLaTeX%7B%7D+commands+are+ignored.%0A%5Cend%7Bverbatim%7D%0A%5Cend%7Bdocument%7D)

O código acima produz a seguinte saída:

![Verbatim1.png](/files/bee5a752e217ac1b74626b2b62590d1198f15d53)

Tal como no exemplo da introdução, todo o texto é impresso mantendo as quebras de linha e os espaços em branco. Existe uma versão com asterisco deste comando cuja saída é ligeiramente diferente.

```latex
\begin{verbatim*}
O texto contido no ambiente \texttt{verbatim}
é impresso diretamente
e todos os comandos \LaTeX{} são ignorados.
\end{verbatim*}
```

[Abra este exemplo no Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=verbatim+text+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bverbatim%2A%7D%0AText+enclosed+inside+%5Ctexttt%7Bverbatim%7D+environment+%0Ais+printed+directly+%0Aand+all+%5CLaTeX%7B%7D+commands+are+ignored.%0A%5Cend%7Bverbatim%2A%7D%0A%5Cend%7Bdocument%7D)

O código acima produz a seguinte saída:

![Verbatim2.png](/files/e7fde5382534cde79bd0f96de454f15dcc11d0ac)

Neste caso, os espaços são realçados com um caractere especial de "espaço visível": **`␣`**.

Texto semelhante a verbatim também pode ser usado num parágrafo por meio do `\verb` comando.

```latex
No diretório \verb|C:\Windows\system32| pode encontrar muitas aplicações do sistema Windows.
aplicações do sistema

O comando \verb+\ldots+ produz \ldots
```

[Abra este exemplo no Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=using+the+%5Cverb+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AIn+the+directory+%5Cverb%7CC%3A%5CWindows%5Csystem32%7C+you+can+find+a+lot+of+Windows+%0Asystem+applications.+%0A+%0AThe+%5Cverb%2B%5Cldots%2B+command+produces+%5Cldots%0A%5Cend%7Bdocument%7D)

O código acima produz a seguinte saída:

![Verbatim3OLV2.png](/files/7a55ee71e2a9d9738be28131f96039e3ca99efb9)

O comando `\verb|C:\Windows\system32|` imprime o texto entre os delimitadores `|` em formato verbatim. Qualquer caractere, exceto letras e `*`, pode ser usado como delimitador. Por exemplo `\verb+\ldots+` usa `+` como delimitador.

## Usar listings para realçar código

Para usar o `lstlisting` ambiente, tem de adicionar a seguinte linha ao preâmbulo do seu documento:

```latex
\usepackage{listings}
```

Aqui está um exemplo de utilização do `lstlisting` ambiente do `listings` pacote:

```latex
\begin{lstlisting}
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #para se tornar a matriz de incidência
    VT = np.zeros((n*m,1), int)  #variável auxiliar

    #calcula a matriz xor bit a bit
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Abra este `listings` exemplo no Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=listings+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Blistings%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Blstlisting%7D%0Aimport+numpy+as+np%0A++++%0Adef+incmatrix%28genl1%2Cgenl2%29%3A%0A++++m+%3D+len%28genl1%29%0A++++n+%3D+len%28genl2%29%0A++++M+%3D+None+%23to+become+the+incidence+matrix%0A++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29++%23dummy+variable%0A++++%0A++++%23compute+the+bitwise+xor+matrix%0A++++M1+%3D+bitxormatrix%28genl1%29%0A++++M2+%3D+np.triu%28bitxormatrix%28genl2%29%2C1%29+%0A%0A++++for+i+in+range%28m-1%29%3A%0A++++++++for+j+in+range%28i%2B1%2C+m%29%3A%0A++++++++++++%5Br%2Cc%5D+%3D+np.where%28M2+%3D%3D+M1%5Bi%2Cj%5D%29%0A++++++++++++for+k+in+range%28len%28r%29%29%3A%0A++++++++++++++++VT%5B%28i%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28i%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++%0A++++++++++++++++if+M+is+None%3A%0A++++++++++++++++++++M+%3D+np.copy%28VT%29%0A++++++++++++++++else%3A%0A++++++++++++++++++++M+%3D+np.concatenate%28%28M%2C+VT%29%2C+1%29%0A++++++++++++++++%0A++++++++++++++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29%0A++++%0A++++return+M%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

O código acima produz a seguinte saída:

![CodeListingEx1.png](/files/462bd623284df11c03dd38b76ebd0803b4eec753)

Neste exemplo, a saída ignora todos os comandos LaTeX e o texto é impresso mantendo todas as quebras de linha e os espaços em branco digitados. Vejamos um segundo exemplo:

```latex
\begin{lstlisting}[language=Python]
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #para se tornar a matriz de incidência
    VT = np.zeros((n*m,1), int)  #variável auxiliar

    #calcula a matriz xor bit a bit
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Abra este `listings` exemplo no Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Python+listings+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Blistings%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Blstlisting%7D%5Blanguage%3DPython%5D%0Aimport+numpy+as+np%0A++++%0Adef+incmatrix%28genl1%2Cgenl2%29%3A%0A++++m+%3D+len%28genl1%29%0A++++n+%3D+len%28genl2%29%0A++++M+%3D+None+%23to+become+the+incidence+matrix%0A++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29++%23dummy+variable%0A++++%0A++++%23compute+the+bitwise+xor+matrix%0A++++M1+%3D+bitxormatrix%28genl1%29%0A++++M2+%3D+np.triu%28bitxormatrix%28genl2%29%2C1%29+%0A%0A++++for+i+in+range%28m-1%29%3A%0A++++++++for+j+in+range%28i%2B1%2C+m%29%3A%0A++++++++++++%5Br%2Cc%5D+%3D+np.where%28M2+%3D%3D+M1%5Bi%2Cj%5D%29%0A++++++++++++for+k+in+range%28len%28r%29%29%3A%0A++++++++++++++++VT%5B%28i%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28i%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+r%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++VT%5B%28j%29%2An+%2B+c%5Bk%5D%5D+%3D+1%3B%0A++++++++++++++++%0A++++++++++++++++if+M+is+None%3A%0A++++++++++++++++++++M+%3D+np.copy%28VT%29%0A++++++++++++++++else%3A%0A++++++++++++++++++++M+%3D+np.concatenate%28%28M%2C+VT%29%2C+1%29%0A++++++++++++++++%0A++++++++++++++++VT+%3D+np.zeros%28%28n%2Am%2C1%29%2C+int%29%0A++++%0A++++return+M%0A%5Cend%7Blstlisting%7D%0A%5Cend%7Bdocument%7D)

O código acima produz a seguinte saída:

![CodeListingEx2.png](/files/fa4d36c5851503576f71beebe88b30a177fff8a3)

O parâmetro adicional entre colchetes `[language=Python]` permite o realce de código para esta linguagem de programação específica (Python), as palavras especiais aparecem a negrito e os comentários em itálico. Veja o [guia de referência](#reference-guide) para uma lista completa das linguagens de programação suportadas.

## Importar código de um ficheiro

O código é normalmente armazenado num ficheiro-fonte, por isso um comando que o importe automaticamente de um ficheiro torna-se muito útil.

```latex
O próximo código será importado diretamente de um ficheiro

\lstinputlisting[language=Octave]{BitXorMatrix.m}
```

![CodeListingEx3.png](/files/6c381f99c09dae63744d9e7a18c032b7d446b97c)

O comando `\lstinputlisting[language=Octave]{BitXorMatrix.m}` importa o código do ficheiro *BitXorMatrix.m*, o parâmetro adicional entre colchetes permite o realce da linguagem para a linguagem de programação Octave. Se precisar de importar apenas parte do ficheiro, pode especificar dois parâmetros separados por vírgulas dentro dos colchetes. Por exemplo, para importar o código da linha 2 à linha 12, o comando anterior torna-se

```latex
\lstinputlisting[language=Octave, firstline=2, lastline=12]{BitXorMatrix.m}
```

Se `firstline` ou `lastline` é omitido, assume-se que os valores correspondem ao início do ficheiro ou ao fim do ficheiro, respetivamente.

## Estilos e cores de código

A formatação de código com o **pacote listings** é altamente personalizável. Vejamos um exemplo

```latex
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{mystyle}{
    backgroundcolor=\color{backcolour},
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=5pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2
}

\lstset{style=mystyle}

\begin{document}
O próximo código será importado diretamente de um ficheiro

\lstinputlisting[language=Octave]{BitXorMatrix.m}
\end{document}
```

O código acima produz a seguinte saída:

![CodeListingEx4.png](/files/adcc7ced83587aee866f5aab052c1230db03138a)

Como pode ver, a coloração e a estilização do código melhoram muito a legibilidade.

Neste exemplo o pacote **xcolor** é importado e depois o comando `\definecolor{}{}{}` é usado para definir novas cores em formato RGB que serão usadas mais tarde. Para mais informações, veja: [usar cores no LaTeX](/latex/overleaf-learn-latex-pt/formatacao/13-using-colors-in-latex.md)

Existem essencialmente dois comandos que geram o estilo deste exemplo:

**\lstdefinestyle{mystyle}{...}**

Define um novo estilo de listagem de código chamado "mystyle". No segundo par de chavetas são passadas as opções que definem este estilo; consulte o guia de referência para uma descrição completa destas e de alguns outros parâmetros.

**\lstset{style=mystyle}**

Ativa o estilo "mystyle". Este comando pode ser usado no seu documento para mudar para um estilo diferente, se necessário.

## Legendas e a lista de Listagens

Tal como nos ambientes flutuantes ([tabelas](/latex/overleaf-learn-latex-pt/figuras-e-tabelas/01-tables.md) e [figuras](/latex/overleaf-learn-latex-pt/mais-topicos/27-inserting-images.md)), podem ser adicionadas legendas a uma listagem para uma apresentação mais clara.

```latex
\begin{lstlisting}[language=Python, caption=Exemplo em Python]
import numpy as np

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #para se tornar a matriz de incidência
    VT = np.zeros((n*m,1), int)  #variável auxiliar

    #calcula a matriz xor bit a bit
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1)

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;

                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)

                VT = np.zeros((n*m,1), int)

    return M
\end{lstlisting}
```

[Abra este `listings` exemplo no Overleaf](/latex/overleaf-learn-latex-pt/formatacao/11-code-listing.md)

O código acima produz a seguinte saída:

![CodeListingEx5.png](/files/ed8444a44330574f7901f34cb7a86439feab2990)

Adicionar o parâmetro separado por vírgulas `caption=Exemplo em Python` dentro dos colchetes, permite a legenda. Esta legenda pode ser depois usada na lista de Listagens.

```latex
\lstlistoflistings
```

![CodeListingEx6OLV2.png](/files/a4d06f8810c25538964e2e892e0e04010b20e521)

## Projeto de exemplo no Overleaf

Abra esta ligação para [experimentar o `listings` exemplo do pacote no Overleaf.](https://www.overleaf.com/project/new/template/20053?id=68266290\&templateName=listings+package+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Guia de referência

### Linguagens suportadas

**linguagens suportadas (e os seus dialetos, se possível; os dialetos são especificados entre colchetes e os dialetos predefinidos aparecem em itálico):**

|                                                        |                                                 |
| ------------------------------------------------------ | ----------------------------------------------- |
| ABAP (R/2 4.3, R/2 5.0, R/3 3.1, R/3 4.6C, *R/3 6.10*) | ACSL                                            |
| Ada (*2005*, 83, 95)                                   | Algol (60, *68*)                                |
| Ant                                                    | Assembler (Motorola68k, x86masm)                |
| Awk (*gnu*, POSIX)                                     | bash                                            |
| Basic (Visual)                                         | C (*ANSI*, Handel, Objective, Sharp)            |
| C++ (ANSI, GNU, *ISO*, Visual)                         | Caml (*leve*, Objective)                        |
| CIL                                                    | Clean                                           |
| Cobol (1974, *1985*, ibm)                              | Comal 80                                        |
| command.com (*WinXP*)                                  | Comsol                                          |
| csh                                                    | Delphi                                          |
| Eiffel                                                 | Elan                                            |
| erlang                                                 | Euphoria                                        |
| Fortran (77, 90, *95*)                                 | GCL                                             |
| Gnuplot                                                | Haskell                                         |
| HTML                                                   | IDL (vazio, CORBA)                              |
| inform                                                 | Java (vazio, AspectJ)                           |
| JVMIS                                                  | ksh                                             |
| Lingo                                                  | Lisp (vazio, Auto)                              |
| Logo                                                   | make (vazio, gnu)                               |
| Mathematica (1.0, 3.0, *5.2*)                          | Matlab                                          |
| Mercury                                                | MetaPost                                        |
| Miranda                                                | Mizar                                           |
| ML                                                     | Modula-2                                        |
| MuPAD                                                  | NASTRAN                                         |
| Oberon-2                                               | OCL (decorativo, *OMG*)                         |
| Octave                                                 | Oz                                              |
| Pascal (Borland6, *Standard*, XSC)                     | Perl                                            |
| PHP                                                    | PL/I                                            |
| Plasm                                                  | PostScript                                      |
| POV                                                    | Prolog                                          |
| Promela                                                | PSTricks                                        |
| Python                                                 | R                                               |
| Reduce                                                 | Rexx                                            |
| RSL                                                    | Ruby                                            |
| S (vazio, PLUS)                                        | SAS                                             |
| Scilab                                                 | sh                                              |
| SHELXL                                                 | Simula (*67*, CII, DEC, IBM)                    |
| SPARQL                                                 | SQL                                             |
| tcl (vazio, tk)                                        | TeX (AlLaTeX, comum, LaTeX, *plain*, primitivo) |
| VBScript                                               | Verilog                                         |
| VHDL (vazio, AMS)                                      | VRML (*97*)                                     |
| XML                                                    | XSLT                                            |

### Opções para personalizar estilos de listagem de código

* **backgroundcolor** - cor de fundo. Pacote externo ***color*** ou ***xcolor*** necessário.
* **commentstyle** - estilo dos comentários na linguagem-fonte.
* **basicstyle** - tamanho/família/etc. da fonte do código-fonte (por ex. `basicstyle=\ttfamily\small`)
* **keywordstyle** - estilo das palavras-chave na linguagem-fonte (por ex. `keywordstyle=\color{red}`)
* **numberstyle** - estilo usado para os números de linha
* **numbersep** - distância dos números de linha ao código
* **stringstyle** - estilo das strings na linguagem-fonte
* **showspaces** - realça os espaços no código (true/false)
* **showstringspaces** - realça os espaços nas strings (true/false)
* **showtabs** - realça os tabuladores no código (true/false)
* **numbers** - posição dos números de linha (esquerda/direita/nenhum, ou seja, sem números de linha)
* **prebreak** - mostra um marcador no fim da linha quebrada (por ex. `prebreak=\raisebox{0ex}[0ex}[0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - posição da legenda (t/b)
* **frame** - mostra moldura fora do código (nenhuma/linha à esquerda/linha superior/linha inferior/linhas/única/caixa com sombra)
* **breakatwhitespace** - define se as quebras automáticas devem ocorrer apenas nos espaços em branco
* **breaklines** - quebra automática de linhas
* **keepspaces** - mantém os espaços no código, útil para a indentação
* **tabsize** - tamanho padrão do tabulador
* **escapeinside** - especifica caracteres para escapar do código-fonte para LaTeX (por ex. `escapeinside={\%*}{*)}`)
* **rulecolor** - especifica a cor da caixa da moldura

## Leitura adicional

Para mais informações, consulta:

* [Realce de código com minted](/latex/overleaf-learn-latex-pt/formatacao/12-code-highlighting-with-minted.md)
* [Utilizar cores no LaTeX](/latex/overleaf-learn-latex-pt/formatacao/13-using-colors-in-latex.md)
* [Índice](/latex/overleaf-learn-latex-pt/estrutura-do-documento/02-table-of-contents.md)
* [Gestão num grande projeto](/latex/overleaf-learn-latex-pt/estrutura-do-documento/07-management-in-a-large-project.md)
* [Projetos LaTeX com vários ficheiros](/latex/overleaf-learn-latex-pt/estrutura-do-documento/08-multi-file-latex-projects.md)
* [Tamanhos, famílias e estilos de fonte](/latex/overleaf-learn-latex-pt/fontes/01-font-sizes-families-and-styles.md)
* [Tipos de letra](/latex/overleaf-learn-latex-pt/fontes/02-font-typefaces.md)
* [**listings** documentação do pacote](https://texdoc.org/serve/listings/0)
* [**listings** site do CTAN](http://www.ctan.org/pkg/listings)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/overleaf-learn-latex-pt/formatacao/11-code-listing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
