Ceci est une ancienne révision du document !
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-clefs 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:
\documentclass{article} \usepackage{listings} \begin{document} \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}
mathonesuperior
», il doit la transformer en $\mathonesuperior$
.
L'extension lgrind (qui fournit un exécutable et un fichier de style,
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
, LaTeX
, 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
.
Le programme lgrind
permet à partir du code source de générer du code
respectant l'indentation. Il 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 (voir
«Comment découper un document en plusieurs fichiers?»).
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 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é sur
https://bioinfo-fr.net/, et un tutoriel très détaillé existe aussi.
Solutions anciennes
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 même pas reussi à le compiler.