Insertion de code dans ce document LaTeX avec indentation

427

Comment insérer du code dans un document LaTeX? Y a-t-il quelque chose comme:

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

La seule chose dont j'ai vraiment besoin est l'indentation et une police à largeur fixe. La mise en évidence de la syntaxe pourrait être agréable, bien qu'elle ne soit absolument pas requise.

sixtyfootersdude
la source
Pas un double exact, mais les réponses couvrent le même terrain: voir stackoverflow.com/questions/741985/…
Charles Stewart
J'ai également une question de suivi ici: stackoverflow.com/questions/3408996/…
sixtyfootersdude

Réponses:

631

Utilisez le listingspackage.

Configuration simple pour l'en-tête LaTeX (avant \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
}

Vous pouvez changer la langue par défaut au milieu du document avec \lstset{language=Java}.

Exemple d'utilisation dans le document:

\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}

Voici le résultat:

Exemple d'image

Cloudanger
la source
3
J'ai une question complémentaire concernant votre code. Jetez un œil si vous en avez l'occasion: stackoverflow.com/questions/3408996/…
sixtyfootersdude
1
Existe-t-il un moyen de réduire l'espace entre les lignes de code?
sukhvir
Est-il possible d'ajouter un petit texte sous l'extrait de code, similaire au texte écrit sous une figure en Latex?
Brian J
@Brian Je ne suis pas au courant de cela. Peut-être que le fait d'avoir le code dans un figurepourrait produire l'effet.
Cloudanger
J'ai entendu dire que ce package est désormais obsolète!
xxx ---
165

Vous pouvez également utiliser l'environnement textuel

\begin{verbatim}
your
code
example
\end{verbatim}
midtiby
la source
57
Il y a un problème avec l'utilisation des onglets dans l'environnement textuel. Si les onglets sont convertis en "espace", le problème disparaît.
midtiby
1
C'est bon pour montrer des exemples de contenu de fichier texte (par exemple, des données textuelles à lire / traiter par un programme).
nalyd88
Pour un article à deux colonnes, il ne gère pas bien les marges.
Sazzad Hissain Khan
115

Voici comment ajouter du code en ligne:

Vous pouvez ajouter du code en ligne avec {\tt code }ou \texttt{ code }. Si vous souhaitez formater le code en ligne, il serait préférable de créer votre propre commande

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

Notez également que les blocs de code peuvent être chargés à partir d'autres fichiers avec

\lstinputlisting[breaklines]{source.c}

breaklinesn'est pas obligatoire, mais je le trouve utile. Sachez que vous devrez spécifier des \usepackage{ listes } pour celui-ci.

Mise à jour: le package de listes inclut également la \lstinlinecommande, qui a les mêmes fonctionnalités de mise en évidence de la syntaxe que les commandes \lstlistinget \lstinputlisting(voir la réponse de Cloudanger pour les détails de configuration). Comme mentionné dans quelques autres réponses, il y a aussi le paquet minted, qui fournit la \mintinlinecommande. Comme \lstinline, \mintinlinefournit la même coloration syntaxique qu'un bloc de code normal:

\documentclass{article}

\usepackage{minted}

\begin{document}
  This is a sentence with \mintinline{python}{def inlineCode(a="ipsum)}
\end{document}
alan
la source
1
existe-t-il un meilleur moyen pour le code en ligne qui active les couleurs des mots clés, etc.?
nano
Oui. J'ai mis à jour ma réponse pour en discuter.
alan
comment insérez-vous l'espacement / les tabulations pour le rendre plus lisible?
Charlie Parker
32

Les packages spécialisés tels que minted, qui s'appuient sur Pygments pour effectuer le formatage, offrent divers avantages par rapport au listingspackage. Pour citer le mintedmanuel,

Pygments offre une mise en évidence de la syntaxe bien supérieure par rapport aux packages conventionnels. Par exemple, les listes ne mettent en évidence que les chaînes, les commentaires et les mots clés. Les pygments, en revanche, peuvent être entièrement personnalisés pour mettre en évidence tout type de jeton que la langue source peut prendre en charge. Cela peut inclure des séquences de mise en forme spéciales à l'intérieur de chaînes, de nombres, de différents types d'identificateurs et de constructions exotiques telles que des balises HTML.

Philipp
la source
1
J'ai essayé à l'état neuf, la documentation est assez simple. Le style par défaut est quit good.
user2262504
5
Cela peut être une solution insatisfaisante pour de nombreux utilisateurs, en raison de l'appel externe requis pour Pygmentsic. En particulier, l'exigence d'appeler latex avec la -shell-escapedirective est, au mieux, une modification mineure des systèmes de build existants, et au pire, incompatible avec les préférences de sécurité de certains utilisateurs.
KDN
12

Utilisez Minted .

C'est un package qui facilite la mise en évidence de la syntaxe expressive dans LaTeX en utilisant la puissante bibliothèque Pygments . Le package fournit également des options pour personnaliser la sortie du code source en surbrillance à l'aide de fancyvrb .

Il est beaucoup plus évolué et personnalisable que n'importe quel autre package!

Oussama L.
la source
Cependant, comme déjà mentionné dans une réponse similaire, cela -shell-escapepourrait être nul pour certaines personnes.
Egor Hans
8

Frappées workes à overleaf , TeX Live et MikTeX.

Exemple:

\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}

Production:

entrez la description de l'image ici

Shital Shah
la source
6

Comme il n'est pas encore mentionné ici, il peut être utile d'ajouter une autre option, package spverbatim(pas de mise en évidence de la syntaxe):

\documentclass{article}
\usepackage{spverbatim}

\begin{document}

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

\end{document}

De plus, si la mise en évidence de la syntaxe n'est pas requise, empaquetez alltt:

\documentclass{article}
\usepackage{alltt}

\begin{document}

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

\end{document}
MattAllegro
la source
1
C'est plus ou moins ce que je veux, mais je ne peux pas sembler en retrait avec des onglets. Comment indenter / existe-t-il un package similaire qui permet une indentation plus facile?
Darokrithia
1
@ Darokrithia J'ai modifié ma réponse: pouvez-vous vérifier / confronter l'indentation? :)
MattAllegro
1
Cela ne semble pas fonctionner. Je peux vous envoyer le code que j'utilise, mais le formatage est détruit dans les commentaires. BTW J'ai utilisé une réponse différente et cela a bien fonctionné, mais je pense que cela devrait toujours être corrigé pour les futurs lecteurs.
Darokrithia
5

Utilisez des pygments !

Tarentule
la source