Comment insérer un code source dans un document?
Le package listings permet de gérer la mise en page
de code source avec notamment la mise en relief de mots-clefs.
L'utilisation de ce package ne nécessite pas de programme annexe,
i.e. autre que (La)TeX. On inclut directement le source avec
une commande adéquate (sur une ligne, dans un environnement ou
directement le fichier source). Ce package permet de définir
facilement son propre langage, en le faisant éventuellement hériter
d'un autre, avec des mots-clés spécifiques, etc.
Cependant, il ne doit pas être souvent utile de définir son langage, vu la
liste sans cesse croissante de langages prédéfinis (ABAP
,
ACSL
, Ada
, Algol
, Assembler
,
Basic
, C
, C++
, Caml
,
Cobol
, Clean
, Comal~80
, Delphi
,
Eiffel
, Elan
, erlang
, Fortran
,
Fortran
, GCL
, Haskell
, HTML
,
IDL
, Java
, Lisp
, Logo
,
make
, Mathematica
, Matlab
,
Mercury
, MetaPost
, Miranda
,
Mizar
, ML
, Modula-2
, MuPAD
,
NASTRAN
, Oberon-2
, OCL
, Octave
,
Pascal
, Perl
, PHP
, PL/I
,
POV
, Prolog
, Python
, R
,
Reduce
, Ruby
, S
, SAS
,
Scilab
, scripts shell (csh
, ksh
, etc.)
SHELXL
, Simula
, SQL
, tcl
, ,
VBScript
, Verilog
, VHDL
, VRML
,
XML
).
L'exemple ci-dessous montre comment il est simple de présenter du code source avec listings, ici du Pascal.
Code Pascal présenté par listings:
\documentclass{article} \usepackage[latin1]{inputenc} \usepackage[T1]{fontenc} \usepackage{listings} \begin{document} \thispagestyle{empty} \lstset{language=Pascal,literate={:=}{{$\gets$}}1 {<=}{{$\leq$}}1 {>=}{{$\geq$}}1 {<>}{{$\neq$}}1} \begin{lstlisting} program Toto; var i : integer; begin if (i<=0) then i := 1; if (i>=0) then i := 0; if (i<>0) then i := 0; end. \end{lstlisting} \end{document}

Le package lgrind (exécutable et
lgrind.sty
)
permet, entre autres, de formater du code source d'un langage donné en
. Parmi les langages reconnus, on trouve :
Ada
,
assembleur
, BASIC
, Batch
,
C
, C++
, FORTRAN
, GnuPlot
,
Icon
, IDL
, ISP
, Java
,
Kimwitu++
ABAP,
,
LDL
, Lex
,
Linda
, Lisp
, MATLAB
, ML
,
Mercury
, model
, Modula-2
,
Pascal
, Perl
, scripts shell
,
PostScript
, Prolog
, RATFOR
,
RLaB
, Russell
, SAS
,
Scheme
, SICStus
, src
, SQL
,
Tcl/Tk
, VisualBasic
, yacc
.
Ce programme, disponible sur le CTAN,
permet à partir du code source de générer du code respectant
l'indentation. Ainsi, l'exécutable
lgrind
transforme le source
en question, par exemple monfichier.c
, en
monfichier.tex
, que l'on inclut directement dans son fichier
, à l'aide d'une commande appropriée (cf.~\vref{couper-doc}).
L'inconvénient est qu'évidemment, il y a un fichier
tex
qui est
généré en plus.
L'exemple ci-dessous présente le code produit par
lgrind
pour le même code souce Pascal que dans l'exemple précédent
(aux changements de ligne près).
- Utiliser au-moins la version 3.6;
- on peut paramétrer lgrind avec le fichier
lgrindef
.
Résultat produit par lgrind
:
\documentclass{article} \usepackage[latin1]{inputenc} \usepackage[T1]{fontenc} \usepackage[procnames,noindent]{lgrind} \usepackage{fancyhdr,a4wide} \usepackage{german} \usepackage{makeidx} \pagestyle{fancy} \makeindex \begin{document} \thispagestyle{empty} \renewcommand{\footrulewidth}{0.4pt} \fancyhead[C]{\lgrindhead} \fancyhead[LO,RE]{\lgrindfilesize~Bytes\\% \lgrindmodtime} \fancyhead[RO,LE]{\bfseries \lgrindfilename\\% \lgrindmodday.\lgrindmodmonth.\lgrindmodyear} \fancyfoot[C]{\bfseries\thepage} \setlength{\headheight}{24pt} \begin{lgrind} \BGfont \File{toto.p}{2004}{2}{18}{16:08}{119} \L{\LB{\K{program}_\V{Toto};}} \L{\LB{}\Tab{2}{\K{var}_\V{i}_:_\V{integer};}} \L{\LB{\K{begin}}} \L{\LB{}\Tab{2}% {\K{if}_(\V{i}\<=\N{0})_\K{then}_\V{i}_:=_\N{1};}} \L{\LB{}\Tab{2}% {\K{if}_(\V{i}\>=\N{0})_\K{then}_\V{i}_:=_\N{0};}} \L{\LB{}\Tab{2}% {\K{if}_(\V{i}\<\>\N{0})_\K{then}_\V{i}_:=_\N{0};}} \L{\LB{\K{end.}}} \end{lgrind} \printindex \end{document}
Le package c++2latex, sous licence GPL, est capable de
convertir des fichiers C, C++ ou JAVA en
.
Les lignes peuvent être numérotées. Une ancienne version est disponible sur le CTAN: http://tug.ctan.org/support/C++2LaTeX-1_1pl1/,
et ses mises à jour sont sur le site web de l'auteur.
cvt2ltx
, disponible sur ftp://axp3.sv.fh-mannheim.de/cvt2latex/cvt2ltx.zip
est une famille de convertisseurs code source vers pour les langages
C, C++, IDL et Perl.
Est-il intéressant de parler de cvt2ltx ? Je n'ai meme pas reussi à le compiler.
Le package tinyc2l est
un convertisseur de code
C
, C++
ou Java
, en .
Il numérote les lignes, traduit
!=
en , gère les commentaires, les en-têtes de procédures, etc.
Il supporte plusieurs fichiers d'entrée et gère automatiquement les
changements de section et la génération d'index.
Le package minted est sans doute la solution la plus moderne et flexible.
Il fait appel au package fancyvrb, mais aussi au programme externe Pygment
que vous devrez installer séparément.
Un exemple d'utilisation est donné ici:
https://bioinfo-fr.net/latex-la-mise-en-forme-du-texte-et-des-paragraphes