Insertar código de programas en Latex


Para insertar código en sus documentos latex, el documento debe de estar estructurado más o menos de la siguiente manera:

En este ejemplo todo el código y el cuerpo del documento está en el archivo principal, si ustedes lo desean lo pueden separar.

%https://www.sharelatex.com/learn/Code_listing
documentclass{article}
usepackage[utf8]{inputenc}
 
usepackage{listings}
usepackage{color}
 
definecolor{codegreen}{rgb}{0,0.6,0}
definecolor{codegray}{rgb}{0.5,0.5,0.5}
definecolor{codepurple}{rgb}{0.9,0.5,0.0}
definecolor{backcolour}{rgb}{0.95,0.95,0.92}

definecolor{mygreen}{rgb}{0,0.6,0}
definecolor{mygray}{rgb}{0.5,0.5,0.5}
definecolor{mymauve}{rgb}{0.58,0,0.82}

lstset{ %
  backgroundcolor=color{white},   % choose the background color; you must add usepackage{color} or usepackage{xcolor}
  basicstyle=footnotesize,        % the size of the fonts that are used for the code
  breakatwhitespace=false,         % sets if automatic breaks should only happen at whitespace
  breaklines=true,                 % sets automatic line breaking
  captionpos=b,                    % sets the caption-position to bottom
  commentstyle=color{red},    % comment style
  deletekeywords={...},            % if you want to delete keywords from the given language
  escapeinside={%*}{*)},          % if you want to add LaTeX within your code
  extendedchars=true,              % lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8
  frame=single,                    % adds a frame around the code
  keepspaces=true,                 % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)
  keywordstyle=color{green},       % keyword style
  language=C,                 % the language of the code
  morekeywords={*,...},            % if you want to add more keywords to the set
  numbers=left,                    % where to put the line-numbers; possible values are (none, left, right)
  numbersep=5pt,                   % how far the line-numbers are from the code
  numberstyle=tinycolor{mygray}, % the style that is used for the line-numbers
  rulecolor=color{black},         % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
  showspaces=false,                % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'
  showstringspaces=false,          % underline spaces within strings only
  showtabs=false,                  % show tabs within strings adding particular underscores
  stepnumber=1,                    % the step between two line-numbers. If it's 1, each line will be numbered
  stringstyle=color{mymauve},     % string literal style
  tabsize=2,                       % sets default tabsize to 2 spaces
  title=lstname                   % show the filename of files included with lstinputlisting; also try caption instead of title
}

lstdefinestyle{mystyle}{
    backgroundcolor=color{backcolour},
    commentstyle=color{red},
    keywordstyle=color{blue},
    numberstyle=tinycolor{codegray},
    stringstyle=color{codepurple},
    basicstyle=footnotesize,
    breakatwhitespace=false,
    breaklines=true,
    captionpos=b,
    keepspaces=true,
    numbers=left,
    numbersep=10pt,
    showspaces=false,
    showstringspaces=false,
    showtabs=false,
    tabsize=2
}

lstdefinestyle{customc}{
  belowcaptionskip=1baselineskip,
  breaklines=true,
  frame=L,
  xleftmargin=parindent,
  language=C,
  showstringspaces=false,
  basicstyle=footnotesizettfamily,
  keywordstyle=bfseriescolor{green!40!black},
  commentstyle=itshapecolor{purple!40!black},
  identifierstyle=color{black},
  stringstyle=color{orange},
}

lstdefinestyle{customasm}{
  belowcaptionskip=1baselineskip,
  frame=L,
  xleftmargin=parindent,
  language=[x86masm]Assembler,
  basicstyle=footnotesizettfamily,
  commentstyle=itshapecolor{purple!40!black},
}

lstset{escapechar=@,style=customc}
lstset{style=mystyle}
lstset{literate=
  {á}{{'a}}1 {é}{{'e}}1 {í}{{'i}}1 {ó}{{'o}}1 {ú}{{'u}}1
  {Á}{{'A}}1 {É}{{'E}}1 {Í}{{'I}}1 {Ó}{{'O}}1 {Ú}{{'U}}1
  {à}{{`a}}1 {è}{{`e}}1 {ì}{{`i}}1 {ò}{{`o}}1 {ù}{{`u}}1
  {À}{{`A}}1 {È}{{'E}}1 {Ì}{{`I}}1 {Ò}{{`O}}1 {Ù}{{`U}}1
  {ä}{{"a}}1 {ë}{{"e}}1 {ï}{{"i}}1 {ö}{{"o}}1 {ü}{{"u}}1
  {Ä}{{"A}}1 {Ë}{{"E}}1 {Ï}{{"I}}1 {Ö}{{"O}}1 {Ü}{{"U}}1
  {â}{{^a}}1 {ê}{{^e}}1 {î}{{^i}}1 {ô}{{^o}}1 {û}{{^u}}1
  {Â}{{^A}}1 {Ê}{{^E}}1 {Î}{{^I}}1 {Ô}{{^O}}1 {Û}{{^U}}1
  {œ}{{oe}}1 {Œ}{{OE}}1 {æ}{{ae}}1 {Æ}{{AE}}1 {ß}{{ss}}1
  {ç}{{c c}}1 {Ç}{{c C}}1 {ø}{{o}}1 {å}{{r a}}1 {Å}{{r A}}1
  {€}{{EUR}}1 {£}{{pounds}}1
}

begin{document}
Aquí se muestra un ejemplo en lenguaje Python, junto con su etiqueta que llevará el código.
begin{lstlisting}[language=Python, caption=Código de ejemplo en Python]
import numpy as np
 
def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #to become the incidence matrix
    VT = np.zeros((n*m,1), int)  #dummy variable
 
    #compute the bitwise xor matrix
    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}

Un ejemplo de código en C
begin{lstlisting}[language=C, caption=Gauss-Jordan en C]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <ncurses.h>

/*Declaración de procedimientos y funciones*/
void gausJordan(float **matriz,int n,float *raices);
void imprimirMatriz(float *raices,int n);
void leerValores(float **matriz,int n);

/*Función principal*/
int main(){
 int n;
 float **matriz,*raices;
 printf("Ingrese el número de ecuaciones (n): ");
 scanf("%d",&n);
 getchar();
 matriz=(float**) malloc (sizeof (float*)*n);
 raices=(float*) malloc (sizeof (float*)*n);
 leerValores(matriz,n);
 gausJordan(matriz,n,raices);
 printf("Solución nn");
 imprimirMatriz(raices,n);
 getchar();
 return 0;
}
/*Procedimiento para mostrar en pantalla los elementos de la matriz*/
void imprimirMatriz(float *raices,int n){
 int i;
 for(i=0;i<n;i++){
  /*algún otro código aquí*/
 }
}

/*Procedimiento que realiza el proceso de Gauss-Jordan*/
void gausJordan(float **matriz,int n,float *raices){
 int i,j,k;
 float termino;
 for(i=0;i<n;i++){
  /*tu código aquí*/
 }
}
end{lstlisting}

end{document}

Comentarios:

@