> 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/es/formato/11-code-listing.md).

# Listado de código

## Introducción

LaTeX se usa ampliamente en la ciencia y la programación se ha convertido en un aspecto importante en varias áreas de la ciencia; de ahí la necesidad de una herramienta que muestre correctamente el código. Este artículo explica cómo usar el entorno estándar **verbatim** entorno, así como el paquete **listings**, que proporcionan funciones más avanzadas de formato del código. [Este artículo aparte](/latex/es/formato/12-code-highlighting-with-minted.md) trata sobre el `minted` paquete, que realiza el resaltado de sintaxis usando el de Python `pygmentize` biblioteca.

## El entorno verbatim

La herramienta predeterminada para mostrar código en LaTeX es `verbatim`, que genera una salida en fuente monoespaciada.

```latex
\begin{verbatim}
El texto encerrado dentro del entorno \texttt{verbatim}
se imprime directamente
y se ignoran todos los comandos \LaTeX{}.
\end{verbatim}
```

[Abre este ejemplo en 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)

El código anterior produce la siguiente salida:

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

Al igual que en el ejemplo de la introducción, todo el texto se imprime conservando los saltos de línea y los espacios en blanco. Existe una versión con asterisco de este comando cuyo resultado es ligeramente diferente.

```latex
\begin{verbatim*}
El texto encerrado dentro del entorno \texttt{verbatim}
se imprime directamente
y se ignoran todos los comandos \LaTeX{}.
\end{verbatim*}
```

[Abre este ejemplo en 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)

El código anterior produce la siguiente salida:

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

En este caso, los espacios se resaltan con un carácter especial de espacio visible: **`␣`**.

El texto similar a verbatim también puede usarse en un párrafo mediante el `\verb` comando.

```latex
En el directorio \verb|C:\Windows\system32| puedes encontrar muchas aplicaciones de sistema de Windows.
aplicaciones del sistema de Windows.

El comando \verb+\ldots+ produce \ldots
```

[Abre este ejemplo en 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)

El código anterior produce la siguiente salida:

![Verbatim3OLV2.png](/files/c9735491dcbcf0d5a24fc8e76299577dfe528407)

El comando `\verb|C:\Windows\system32|` imprime el texto dentro de los delimitadores `|` en formato verbatim. Cualquier carácter, excepto las letras y `*`, puede usarse como delimitador. Por ejemplo `\verb+\ldots+` usa `+` como delimitador.

## Uso de listings para resaltar código

Para usar el `lstlisting` entorno, debes añadir la siguiente línea al preámbulo de tu documento:

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

Aquí tienes un ejemplo de uso del `lstlisting` entorno del `listings` paquete:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #para convertirse en la matriz de incidencia
    VT = np.zeros((n*m,1), int)  #variable ficticia

    #calcular la 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}
```

[Abre este `listings` ejemplo en 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)

El código anterior produce la siguiente salida:

![CodeListingEx1.png](/files/9b4febd24d01d17d9b10c8595923192daedda140)

En este ejemplo, la salida ignora todos los comandos LaTeX y el texto se imprime conservando todos los saltos de línea y los espacios en blanco escritos. Veamos un segundo ejemplo:

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #para convertirse en la matriz de incidencia
    VT = np.zeros((n*m,1), int)  #variable ficticia

    #calcular la 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}
```

[Abre este `listings` ejemplo en 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)

El código anterior produce la siguiente salida:

![CodeListingEx2.png](/files/8f8e955905eedcf739db0f9bdc280431b0dfa40c)

El parámetro adicional dentro de los corchetes `[language=Python]` activa el resaltado de código para este lenguaje de programación concreto (Python); las palabras especiales aparecen en negrita y los comentarios en cursiva. Consulta el [guía de referencia](#reference-guide) para ver la lista completa de lenguajes de programación compatibles.

## Importación de código desde un archivo

Normalmente el código se almacena en un archivo fuente, por lo que resulta muy útil un comando que obtenga automáticamente el código de un archivo.

```latex
El siguiente código se importará directamente desde un archivo

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

![CodeListingEx3.png](/files/20510c9b65689f582323262ebde3108dca3f65f3)

El comando `\lstinputlisting[language=Octave]{BitXorMatrix.m}` importa el código del archivo *BitXorMatrix.m*, el parámetro adicional entre corchetes permite el resaltado de lenguaje para Octave. Si necesitas importar solo una parte del archivo, puedes especificar dos parámetros separados por comas dentro de los corchetes. Por ejemplo, para importar el código desde la línea 2 hasta la línea 12, el comando anterior se convierte en

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

Si `firstline` o `lastline` si se omite, se asume que los valores corresponden al inicio del archivo o al final del archivo, respectivamente.

## Estilos de código y colores

El formateo de código con el **paquete listings** es altamente personalizable. Veamos un ejemplo

```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}
El siguiente código se importará directamente desde un archivo

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

El código anterior produce la siguiente salida:

![CodeListingEx4.png](/files/097c29ed614f3dd45d90fddfe8c9a848a92c1140)

Como puedes ver, el coloreado y el estilo del código mejoran enormemente la legibilidad.

En este ejemplo, el paquete **xcolor** se importa y luego se usa el comando `\definecolor{}{}{}` se usa para definir nuevos colores en formato RGB que se usarán más adelante. Para más información, consulta: [uso de colores en LaTeX](/latex/es/formato/13-using-colors-in-latex.md)

Básicamente hay dos comandos que generan el estilo de este ejemplo:

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

Define un nuevo estilo de listado de código llamado "mystyle". Dentro del segundo par de llaves se pasan las opciones que definen este estilo; consulta la guía de referencia para una descripción completa de estas y de algunos otros parámetros.

**\lstset{style=mystyle}**

Activa el estilo "mystyle". Este comando puede usarse dentro de tu documento para cambiar a otro estilo si es necesario.

## Leyendas y la lista de listings

Al igual que en los entornos flotantes ([tablas](/latex/es/figuras-y-tablas/01-tables.md) y [figuras](/latex/es/mas-temas/27-inserting-images.md)), se pueden añadir leyendas a un listado para una presentación más clara.

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

def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #para convertirse en la matriz de incidencia
    VT = np.zeros((n*m,1), int)  #variable ficticia

    #calcular la 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}
```

[Abre este `listings` ejemplo en Overleaf](/latex/es/formato/11-code-listing.md)

El código anterior produce la siguiente salida:

![CodeListingEx5.png](/files/4c859fab11fbaca64b698aa37d26cf284091a3b1)

Añadir el parámetro separado por comas `caption=Python example` dentro de los corchetes, activa la leyenda. Esta leyenda puede usarse posteriormente en la lista de listings.

```latex
\lstlistoflistings
```

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

## Proyecto de ejemplo en Overleaf

Abre este enlace para [probar el `listings` ejemplo del paquete en Overleaf.](https://www.overleaf.com/project/new/template/20053?id=68266290\&templateName=listings+package+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

## Guía de referencia

### Lenguajes compatibles

**lenguajes compatibles (y, si es posible, sus dialectos; los dialectos se especifican entre corchetes y los dialectos predeterminados aparecen en cursiva):**

|                                                        |                                                  |
| ------------------------------------------------------ | ------------------------------------------------ |
| 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 (*light*, 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 (empty, CORBA)                               |
| inform                                                 | Java (empty, AspectJ)                            |
| JVMIS                                                  | ksh                                              |
| Lingo                                                  | Lisp (empty, Auto)                               |
| Logo                                                   | make (empty, gnu)                                |
| Mathematica (1.0, 3.0, *5.2*)                          | Matlab                                           |
| Mercury                                                | MetaPost                                         |
| Miranda                                                | Mizar                                            |
| ML                                                     | Modula-2                                         |
| MuPAD                                                  | NASTRAN                                          |
| Oberon-2                                               | OCL (decorative, *OMG*)                          |
| Octave                                                 | Oz                                               |
| Pascal (Borland6, *Estándar*, XSC)                     | Perl                                             |
| PHP                                                    | PL/I                                             |
| Plasm                                                  | PostScript                                       |
| POV                                                    | Prolog                                           |
| Promela                                                | PSTricks                                         |
| Python                                                 | R                                                |
| Reduce                                                 | Rexx                                             |
| RSL                                                    | Ruby                                             |
| S (empty, PLUS)                                        | SAS                                              |
| Scilab                                                 | sh                                               |
| SHELXL                                                 | Simula (*67*, CII, DEC, IBM)                     |
| SPARQL                                                 | SQL                                              |
| tcl (empty, tk)                                        | TeX (AlLaTeX, common, LaTeX, *plain*, primitive) |
| VBScript                                               | Verilog                                          |
| VHDL (empty, AMS)                                      | VRML (*97*)                                      |
| XML                                                    | XSLT                                             |

### Opciones para personalizar los estilos de los listados de código

* **backgroundcolor** - color para el fondo. Externo ***color*** o ***xcolor*** paquete necesario.
* **commentstyle** - estilo de los comentarios en el lenguaje fuente.
* **basicstyle** - tamaño/familia de fuente/etc. para el código fuente (p. ej. `basicstyle=\ttfamily\small`)
* **keywordstyle** - estilo de las palabras clave en el lenguaje fuente (p. ej. `keywordstyle=\color{red}`)
* **numberstyle** - estilo usado para los números de línea
* **numbersep** - distancia de los números de línea al código
* **stringstyle** - estilo de las cadenas en el lenguaje fuente
* **showspaces** - resalta los espacios en el código (true/false)
* **showstringspaces** - resalta los espacios en las cadenas (true/false)
* **showtabs** - resalta las tabulaciones en el código (true/false)
* **numbers** - posición de los números de línea (izquierda/derecha/ninguno, es decir, sin números de línea)
* **prebreak** - muestra una marca al final de la línea cortada (p. ej. `prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}`)
* **captionpos** - posición de la leyenda (t/b)
* **frame** - muestra un marco alrededor del código (none/leftline/topline/bottomline/lines/single/shadowbox)
* **breakatwhitespace** - establece si los saltos automáticos solo deben ocurrir en los espacios en blanco
* **breaklines** - salto automático de línea
* **keepspaces** - conserva los espacios en el código, útil para la indentación
* **tabsize** - tamaño de tabulación predeterminado
* **escapeinside** - especifica los caracteres para escapar del código fuente a LaTeX (p. ej. `escapeinside={\%*}{*)}`)
* **rulecolor** - especifica el color del marco

## Lectura adicional

Para más información, consulte:

* [Resaltado de código con minted](/latex/es/formato/12-code-highlighting-with-minted.md)
* [Uso de colores en LaTeX](/latex/es/formato/13-using-colors-in-latex.md)
* [Tabla de contenidos](/latex/es/estructura-del-documento/02-table-of-contents.md)
* [Gestión en un proyecto grande](/latex/es/estructura-del-documento/07-management-in-a-large-project.md)
* [Proyectos de LaTeX de varios archivos](/latex/es/estructura-del-documento/08-multi-file-latex-projects.md)
* [Tamaños, familias y estilos de fuente](/latex/es/fuentes/01-font-sizes-families-and-styles.md)
* [Familias tipográficas](/latex/es/fuentes/02-font-typefaces.md)
* [**listings** documentación del paquete](https://texdoc.org/serve/listings/0)
* [**listings** sitio web de 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/es/formato/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.
