Comment insérer un code source dans un document?

$\Reponse$ 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.

% Prakash : J'ai mis une liste de langages pour faciliter la recherche dans % la FAQ, avec des mots clés… Cependant, il ne doit pas être souvent utile de définir son langage, vu la liste sans cesse croissante de langages prédéfinis (\langprog{ABAP}, \langprog{ACSL}, \langprog{Ada}, \langprog{Algol}, \langprog{Assembler}, \langprog{Basic}, \langprog{C}, \langprog{C++}, \langprog{Caml}, \langprog{Cobol}, \langprog{Clean}, \langprog{Comal~80}, \langprog{Delphi}, \langprog{Eiffel}, \langprog{Elan}, \langprog{erlang}, \langprog{Fortran}, \langprog{Fortran}, \langprog{GCL}, \langprog{Haskell}, \langprog{HTML}, \langprog{IDL}, \langprog{Java}, \langprog{Lisp}, \langprog{Logo}, \langprog{make}, \langprog{Mathematica}, \langprog{Matlab}, \langprog{Mercury}, \langprog{MetaPost}, \langprog{Miranda}, \langprog{Mizar}, \langprog{ML}, \langprog{Modula-2}, \langprog{MuPAD}, \langprog{NASTRAN}, \langprog{Oberon-2}, \langprog{OCL}, \langprog{Octave}, \langprog{Pascal}, \langprog{Perl}, \langprog{PHP}, \langprog{PL/I}, \langprog{POV}, \langprog{Prolog}, \langprog{Python}, \langprog{R}, \langprog{Reduce}, \langprog{Ruby}, \langprog{S}, \langprog{SAS}, \langprog{Scilab}, scripts shell (\langprog{csh}, \langprog{ksh}…) \langprog{SHELXL}, \langprog{Simula}, \langprog{SQL}, \langprog{tcl}, \TeX, \langprog{VBScript}, \langprog{Verilog}, \langprog{VHDL}, \langprog{VRML}, \langprog{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}
Moyennant quelques paramètres à ajouter, il est tout à fait possible de faire en sorte que ces packages reconnaissent les fontes 8 bits. On peut lui faire comprendre par exemple, que lorsqu'il rencontre la chaîne «mathonesuperior», il la transforme en |$\mathonesuperior$|. %Pas genial % En effet, je n'ai pas compris la remarque… % Qu'est-ce qu'on en fait ? (Nico) % ben je crois que c'est pour dire qu'il peut interpréter des morceaux (TvO)

$\Reponse$ Le package lgrind (exécutable et lgrind.sty) permet, entre autres, de formater du code source d'un langage donné en \LaTeX. Parmi les langages reconnus, on trouve~: \langprog{Ada}, \langprog{assembleur}, \langprog{BASIC}, \langprog{Batch}, \langprog{C}, \langprog{C++}, \langprog{FORTRAN}, \langprog{GnuPlot}, \langprog{Icon}, \langprog{IDL}, \langprog{ISP}, \langprog{Java}, \langprog{Kimwitu++}, \LaTeX, \langprog{LDL}, \langprog{Lex}, \langprog{Linda}, \langprog{Lisp}, \langprog{MATLAB}, \langprog{ML}, \langprog{Mercury}, \langprog{model}, \langprog{Modula-2}, \langprog{Pascal}, \langprog{Perl}, \langprog{scripts shell}, \langprog{PostScript}, \langprog{Prolog}, \langprog{RATFOR}, \langprog{RLaB}, \langprog{Russell}, \langprog{SAS}, \langprog{Scheme}, \langprog{SICStus}, \langprog{src}, \langprog{SQL}, \langprog{Tcl/Tk}, \langprog{VisualBasic}, \langprog{yacc}.

Ce programme, disponible sur le CTAN, permet à partir du code source de générer du code \LaTeX 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 \LaTeX, à 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 \LaTeX 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.
  • Par défaut, l'auteur a jugé utile de transformer la lettre «~à~» en $\alpha$. Il suffit donc de commenter cette option à la fin de ce fichier pour éviter cela.

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}

$\Reponse$ Le package c++2latex, sous licence GPL, est capable de convertir des fichiers C, C++ ou JAVA en \LaTeXe. 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.

$\Reponse$ cvt2ltx, disponible sur ftp://axp3.sv.fh-mannheim.de/cvt2latex/cvt2ltx.zip est une famille de convertisseurs code source vers \LaTeX pour les langages C, C++, IDL et Perl.

FIXME Est-il intéressant de parler de cvt2ltx ? Je n'ai meme pas reussi à le compiler.

$\Reponse$ Le package tinyc2l, de M. Plugge (mailto:m.plugge@fh-mannheim.de) basé sur cvt2ltx. Il s'agit d'un convertisseur de code C, C++ ou \langprog{Java}, en \LaTeX. Il numérote les lignes, traduit != en $\neq$, 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.

$\Reponse$ 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.

FIXME Un exemple d'utilisation est donné ici: https://bioinfo-fr.net/latex-la-mise-en-forme-du-texte-et-des-paragraphes

domaines_specialises/informatique/inserer_du_code_source_informatique.txt · Dernière modification: 2020/07/14 23:09 par jejust
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0