Retranscrire un code source dans Latex

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Retranscrire un code source dans Latex

Messagepar Drmarie » Mercredi 31 Mai 2017, 11:41

Bonjour,

Depuis quelques mois, je rédige un rapport sur Latex que je ne connaissais pas du tout, j'ai toujours réussi à trouver ce qu'il me manquait...jusqu'à aujourd'hui !! Je dois rendre mon rapport très vite, c'est pourquoi je n'ai pas beaucoup de temps et que je me permets donc de poster un message sans chercher d'avantage.

J'aurais besoin de retranscrire un code source R-Studio dans mon document Latex. Afin d'être le plus proche de ce logiciel, j'aimerais que :
- les commentaires soient écris en vert (il sont commandés par le signe #), tout comme les mots entre guillemets,
- les nombres et les commandes (for, in, if...else et function) soient en bleu,
- tout ce qui n'est pas des lettres (parenthèses, accolades, + et -, etc.), sauf les virgules soient en gris,
- le code soit sur un fond clair (histoire de délimiter clairement le début et la fin du code).
J'ai vu qu'il y avait le package listings, avec la commande lstset, mais je n'ai absolument pas compris comment faire tout ce que je viens de demander...

J'utilise TeXnicCenter et je suis sous Windows 10.

Merci d'avance pour votre aide.
Drmarie
Utilisateur
 
Messages: 2
Inscription: Mercredi 31 Mai 2017, 10:15
Statut actuel: Post-bac | Licence

Publicité

Re: Retranscrire un code source dans Latex

Messagepar marco56 » Mercredi 31 Mai 2017, 13:13

Un exemple trouvé sur le net il y a longtemps :
Code: Tout sélectionner
\documentclass{article}
\usepackage{caption}
\usepackage{xcolor}
\usepackage{listings}
\usepackage[T1]{fontenc}
\usepackage{beramono}

% some colors for the listings
\colorlet{cppkeyword}{teal}
\colorlet{latexkeyword}{green!50!black}
\colorlet{gnuplotkeyword}{magenta!60!black}
\colorlet{gnuplotcomment}{teal}
\colorlet{symb}{red!50!black}
\colorlet{comm}{brown}

% for captions: boldfaced labels, separator=period
\captionsetup[lstlisting]{labelfont=bf,labelsep=period}

% style for c++ listings
\lstdefinestyle{cpp}{%
  language=C++,
  keywordstyle=\bfseries\color{cppkeyword},
  literate=%
    {\{}{\textcolor{symb}{\{}}1
    {\}}{\textcolor{symb}{\}}}1
    {(}{\textcolor{symb}{(}}1
    {)}{\textcolor{symb}{)}}1
    {;}{\textcolor{symb}{;}}1
}

% style for LaTeX listings
\lstdefinestyle{latex}{%
  language=[LaTeX]{TeX},
  texcsstyle=*\bfseries\color{latexkeyword},
  literate=%
    {\{}{\textcolor{symb}{\{}}1
    {\}}{\textcolor{symb}{\}}}1
    {(}{\textcolor{symb}{(}}1
    {)}{\textcolor{symb}{)}}1
    {\%}{\textcolor{comm}{\%}}1
}

% style for Gnuplot listings
\lstdefinestyle{gnuplot}{%
  language=Gnuplot,
  keywordstyle=\bfseries\color{gnuplotkeyword},
  commentstyle={\itshape\color{gnuplotcomment}},
  literate=%
    {"}{\textcolor{symb}{"}}1
}

% Common style for all listings
\lstset{
  basicstyle=\small\ttfamily,
  columns=fullflexible,
  tabsize=3
}

% We tweak the default settings for C++ listings
\renewcommand\lstlistlistingname{\texttt{C++} listings}

\lstnewenvironment{cpp}[1][]{%
  \renewcommand\lstlistingname{\texttt{C++} listing}
  \lstset{style=cpp,#1}}{}

% Counters for LaTeX and Gnuplot listings and an auxiliary counter
\newcounter{latexlst}
\newcounter{gnuplotlst}
\newcounter{tmp}

\makeatletter
% Environment for LaTeX listings; extension for auxiliar file: lll
\lstnewenvironment{latex}[1][]{%
  \renewcommand\lstlistingname{\LaTeX\ listing}
  \setcounter{tmp}{\value{lstlisting}}
  \setcounter{lstlisting}{\value{latexlst}}
  \lstset{style=latex,nolol,#1}
}{%
  \refstepcounter{latexlst}
  \addcontentsline{lll}{lstlisting}{\protect\numberline{\thelstlisting}\lst@@caption}%
  \setcounter{lstlisting}{\value{tmp}}
}

% Settings for the List of LaTeX listings
\newcommand\lstlistoflatexlistings{%
  \bgroup
  \renewcommand\lstlistlistingname{\LaTeX\ listings}
  \let\contentsname\lstlistlistingname
  \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lll}}%
  \tableofcontents
  \egroup%
}

% Environment for Gnuplot listings; extension for auxiliar file: lgl
\lstnewenvironment{gnuplot}[1][]{%
  \renewcommand\lstlistingname{\texttt{Gnuplot} listing}
  \setcounter{tmp}{\value{lstlisting}}
  \setcounter{lstlisting}{\value{gnuplotlst}}
  \lstset{style=gnuplot,nolol,#1}
}{%
  \refstepcounter{gnuplotlst}
  \addcontentsline{lgl}{lstlisting}{\protect\numberline{\thelstlisting}\lst@@caption}%
  \setcounter{lstlisting}{\value{tmp}}
}

% Settings for the List of Gnuplot listings
\newcommand\lstlistofgnuplotlistings{%
  \bgroup
  \renewcommand\lstlistlistingname{\texttt{Gnuplot} listings}
  \let\contentsname\lstlistlistingname
  \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lgl}}%
  \tableofcontents
  \egroup%
}
\makeatother

\begin{document}

\lstlistoflistings
\lstlistoflatexlistings
\lstlistofgnuplotlistings

\begin{cpp}[caption={test code for \texttt{C++}},label={lst:c++}]
long some_function();
int other_function();

int calling_function()
{
        long test1;
        int test2;
}
\end{cpp}

\begin{latex}[caption={test code for \LaTeX},label={lst:latex}]
\newcommand\mycom[1]{%
    \fbox{#1}%
}
\end{latex}

\begin{gnuplot}[caption={test code for \texttt{Gnuplot}},label={lst:gnuplot}]
# 1st step
set term "table"
set output "temp.dat"
splot ....
\end{gnuplot}

\LaTeX code: \lstinline[style=latex]{\documentclass}\par
\texttt{Gnuplot} code: \lstinline[style=gnuplot]{set output "temp.dat"}\par
\texttt{C++} code: \lstinline[style=cpp]{int calling_function()}

\end{document}
marco56
Giga-utilisateur
 
Messages: 664
Inscription: Jeudi 25 Novembre 2010, 22:10
Statut actuel: Actif et salarié | Enseignant

Re: Retranscrire un code source dans Latex

Messagepar Drmarie » Mercredi 28 Juin 2017, 18:20

Merci beaucoup pour ta réponse, ça m'a beaucoup aidée ! Après l'avoir rendu, j'ai pu faire des recherches et a priori le package listings connaît le langage R (mais je trouve que ce n'est pas tout ça...). Donc j'ai "fabriqué" mon propre langage à partir du langage C++.
Je me suis BEAUCOUP servie de ce document : http://texdoc.net/texmf-dist/doc/latex/ ... stings.pdf
Voici mon code :
Code: Tout sélectionner
\documentclass[a4paper]{report}
\usepackage{caption}
\usepackage{xcolor}
\usepackage{listings}
\usepackage[T1]{fontenc}
\usepackage{beramono}
\usepackage{fullpage}

% Plusieurs façons de définir des couleurs
\definecolor{light gray}{gray}{0.65}
\definecolor{light gray+}{gray}{0.95}
\definecolor{dark blue}{RGB}{0,0,153}
\colorlet{symb}{light gray}

%Paramétrages
\lstset{escapeinside=&&}               % Pour revenir au langage LATEX
\lstset{%
   language=C++,      % Définir le langage
   backgroundcolor=\color{light gray+},      % Couleur du fond
  keywordstyle=\color{blue},         % Couleur des mots clés
   morekeywords={par,mfrow,plot,main,ylab,xlab},      % Ajouter des mots clés
  basicstyle=\small\ttfamily,      % Police du code
   columns=fullflexible,         % Présentation du code
   commentstyle=\color{green!50!black},      % Couleur de mes commentaires
   morecomment=[l]{\#},      % Ajouter un symbole pour commencer une ligne de commentaire
   stringstyle=\color{green!60!black},      % Couleur des chaînes de caractères
   showstringspaces=false,         % Montrer ou non les espaces dans les chaînes de caractères
   breaklines=true,      % Renvoi à la ligne automatique
   literate=%            % Commande qui permet de changer un symbole/chiffre par un autre
    {\{}{\textcolor{symb}{\{}}1
    {\}}{\textcolor{symb}{\}}}1
    {/}{\textcolor{symb}{/}}1
      {-}{\textcolor{symb}{-}}1
      {+}{\textcolor{symb}{+}}1
      {*}{\textcolor{symb}{*}}1
      {:}{\textcolor{symb}{:}}1
      {=}{\textcolor{symb}{=}}1
      {<}{\textcolor{symb}{<}}1
      {[}{\textcolor{symb}{[}}1
      {]}{\textcolor{symb}{]}}1
      {0}{\textcolor{dark blue}{0}}1
      {1}{\textcolor{dark blue}{1}}1
      {2}{\textcolor{dark blue}{2}}1
      {3}{\textcolor{dark blue}{3}}1
      {4}{\textcolor{dark blue}{4}}1
      {5}{\textcolor{dark blue}{5}}1
      {6}{\textcolor{dark blue}{6}}1
      {7}{\textcolor{dark blue}{7}}1
      {8}{\textcolor{dark blue}{8}}1
      {9}{\textcolor{dark blue}{9}}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
  {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
  {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
  {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
  {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
  {€}{{\EUR}}1 {£}{{\pounds}}1
}

\begin{document}

\begin{lstlisting}
Ici je rentre mon code.
Les mots clés comme plot et main sont bien en bleu.
#Mon commentaire est bien en vert foncé
Mes chiffres en bleu foncé 0,1,2,...,9
Les symboles en gris clairs : (5+5=10)
Mes chaînes de caractères sont en vert clair : "VOICI MA CHAINE DE CARACTERE" sans que les espacements soient affichés (je remarque aussi que le renvoi à la ligne est automatique).
Si je veux écrire avec le langage LATEX, je peux car par exemple : &$\sum_{k=1}^n \xi_k$&
\end{lstlisting}
\end{document}
Drmarie
Utilisateur
 
Messages: 2
Inscription: Mercredi 31 Mai 2017, 10:15
Statut actuel: Post-bac | Licence

Re: Retranscrire un code source dans Latex

Messagepar raphkebab » Jeudi 29 Juin 2017, 11:19

Moi comme je n'aime pas le package listings je fait tout à la main avec des tabbing et quelques commendes.
En particulier, je voulais pouvoir changer la couleur d'une commande quand elle est au cœur d'une explication.

Il y a quelques adaptations à faire pour que mon code passe de lualatex à pdflatex.
Code: Tout sélectionner
\documentclass[a4paper,10pt, twoside]{report}
\usepackage{lmodern}
\usepackage{polyglossia}
\setdefaultlanguage{french}


\makeatletter
\newcommand{\nofrenchpunctuation}{\nofrench@punctuation}
\newcommand{\frenchpunctuation}{\french@punctuation}
\makeatother


%----------------------------------------
%couleur
\usepackage{tikz}
\usepackage{colortbl}
\definecolor{darkred}{rgb}{.7,0.03,0.22}
\definecolor{red_tab}{rgb}{0.96,0.88,0.86}
\definecolor{darkblue}{HTML}{0000CC}
\definecolor{vdarkblue}{HTML}{000066}
\definecolor{texte}{HTML}{660099}
\definecolor{comt}{HTML}{009933}

%-----------------------------------------
%nouveau environements
\usepackage{framed}
\newenvironment{R}
  {\def\FrameCommand{\fboxsep=\FrameSep\fcolorbox{darkred}{black!5}}%
    \MakeFramed {\advance\hsize-\width \FrameRestore}%
    \vspace{-0.4cm}%
    \ttfamily
    \nofrenchpunctuation
    \begin{tabbing}\hspace{1cm} \= \hspace{1cm} \= \hspace{1cm} \= \hspace{1cm} \=\kill}
  {\end{tabbing}\frenchpunctuation\normalfont\vspace{-0.4cm}\endMakeFramed}


\usepackage{wasysym}
\renewcommand{\tilde}{\normalfont\textasciitilde\ttfamily}


\newcommand{\proc}[1]{\textcolor{vdarkblue}{\textbf{#1}}}
\newcommand{\com}[1]{\textcolor{darkblue}{#1}}
\newcommand{\coms}[1]{\textcolor{darkred}{\textbf{#1}}}
\newcommand{\comst}[1]{\textcolor{darkred}{\texttt{'}\textbf{#1}\texttt{'}}}
\newcommand{\comstb}[1]{\textcolor{darkred}{\texttt{"}\textbf{#1}\texttt{"}}}
\newcommand{\comt}[1]{\textcolor{comt}{#1}}
\newcommand{\texte}[1]{\textcolor{texte}{\texttt{'}{#1}\texttt{'}}}
\newcommand{\texteb}[1]{\textcolor{texte}{\texttt{"}{#1}\texttt{"}}}
\newcommand{\textec}[1]{\textcolor{comt}{\texttt{'}{#1}\texttt{'}}}
\newcommand{\textee}[1]{\texttt{"}{#1}\texttt{"}}

 
\begin{document}

  \begin{R}
  \comt{\#si table\$var\_qualitative\_explicative est codée numériquement} \\
  table\$var\_quantitative\_explicative<-\proc{as.factor}(\\
     \>table\$var\_qualitative\_explicative)\\
  \comt{\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#}\\
  \\
  res<-\proc{glm}(table\$var\_quantitative\_expliquee {\tilde}\\
     \>table\$var\_quantitative\_explicative +\\
     \>table\$var\_qualitative\_explicative,\\
     \>\comt{\#factor(table\$var\_qualitative\_explicative), \# remplace la ligne}\\
     \>\comt{\#au-dessus et l'utilisation de \textec{as.factor} pour ne pas modifier}\\
     \>\comt{\#la variable de la table ou créer une autre variable}\\
     \>\com{data}=table)\\
  \proc{summary}(res)
  \end{R}

 
\end{document}
raphkebab
Kilo-utilisateur
 
Messages: 224
Inscription: Mardi 31 Décembre 2013, 12:37
Localisation: Caen
Statut actuel: Post-bac | Doctorat

Re: Retranscrire un code source dans Latex

Messagepar rebouxo » Jeudi 29 Juin 2017, 14:45

Je signale l'existence de pygment qui n'a pas les limitations de listing (moi les caractères accentués qui sautent, ...), écris en python, on peut beaucoup plus facilement gérer un nouveau langage. L'inconvénient c'est que la mise en forme se fait en dehors de LaTeX (via le shell-escape). Je n'ai pas vu d'inconvénient.

Olivier
A line is a point that went for a walk. Paul Klee
Par solidarité, pas de MP
rebouxo
Modérateur
 
Messages: 6743
Inscription: Mercredi 15 Février 2006, 13:18
Localisation: le havre
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 3 invités

cron