Latex - Utilisation de listings : encadrer du code

Latex - Utilisation de listings : encadrer du code - Divers - Programmation

Marsh Posté le 08-02-2008 à 15:18:05    

Bonjour,
 
J'ai un soucis de mise en page avec listings.
 
Je cherche à encadrer du code formaté. J'utilise le code suivant :
 

Code :
  1. \lstset{language=C,basicstyle=\small,keywordstyle=\color{black}\bfseries,  commentstyle=\color{red}\textit,stringstyle=\color{green}\ttfamily,labelstyle=\tiny}
  2. \begin{tabular}{|c|}
  3. \hline
  4. \begin{lstlisting}[breaklines=true, breakatwhitespace=true]
  5. FILE *f;
  6. fclose(f);
  7. \end{lstlisting}\\
  8. \hline
  9. \end{tabular}


 
Ce code fonctionne, mais l'encadrement est de la largeur du code, et je souhaite qu'il fasse 8.5cm, j'ai donc entré le code suivant :
 

Code :
  1. \lstset{language=C,basicstyle=\small,keywordstyle=\color{black}\bfseries,  commentstyle=\color{red}\textit,stringstyle=\color{green}\ttfamily,labelstyle=\tiny}
  2. \begin{tabular}{|p{8.5cm}|}
  3. \hline
  4. \begin{lstlisting}[breaklines=true, breakatwhitespace=true]
  5. FILE *f;
  6. fclose(f);
  7. \end{lstlisting}\\
  8. \hline
  9. \end{tabular}


 
Mais cette fois, j'ai un espace important en haut et en bas du code avant l'encadrement, ce que je ne souhaite pas. Est-ce que quelqu'un a une solution pour résoudre ce problème?
Je trouve ça bizarre qu'en changeant la largeur, la hauteur soit augmentée... Une idée? ;)

Reply

Marsh Posté le 08-02-2008 à 15:18:05   

Reply

Marsh Posté le 11-02-2008 à 09:49:28    

Up : pas d'idée?

Reply

Marsh Posté le 11-02-2008 à 10:46:30    

Eviter le tabular  :??:  
 
Moi je fais ca :

\usepackage{listings}
\lstset{ % general style for listings
   numbers=left
   , tabsize=2
   , frame=single
   , breaklines=true
   , basicstyle=\ttfamily
   , numberstyle=\tiny\ttfamily
   , framexleftmargin=13mm
   , backgroundcolor=\color{grey}
   , xleftmargin=12mm
   %, frameround={tttt}
   , captionpos=b
}
\lstdefinestyle{xslt}
{
    emph={xsl,template,variable,param,for,each,apply,templates,with,param}
    , emphstyle=\color{magenta}
    , emph={[2]match, select, name, mode}
    , emphstyle={[2]\color{cyan}}
}


 
 
et après :

\begin{lstlisting}[style=xslt]
<xsl:template match='section[@name="ToCustomize">
    <xsl:apply-templates select='.' mode='OtherPleaseSpecify'/>
</xsl:template>
\end{lstlisting}


 
Et en fait tout mes listings font la largeur de ma page, et pas celle du code  [:spamafote]


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 11-02-2008 à 15:06:46    

Merci de ton aide.
C'est pas mal, mais il y a un inconvénient : lorsqu'on écrit une ligne trop longue, et que celle-ci est coupée, le bord droit de l'encadrement prend la même coloration syntaxique que le texte coupé (en rouge par exemple pour des commentaires coupés).
 
Est-ce que quelqu'un sait résoudre ce problème? (il y a une solution qui consiste à faire les coupures à la main, mais c'est un peu contraignant.)  :pt1cable:

Reply

Marsh Posté le 11-02-2008 à 16:32:31    

Pour mes blocs à longues lignes je triche en appliquant un autre style ayant une police plus petite :

\lstdefinestyle{bigxslt}
{
   basicstyle=\scriptsize\ttfamily
    , emph={xsl,template,variable,param,for,each,apply,templates,with,param}
    , emphstyle=\color{magenta}
    , emph={[2]match, select, name, mode}
    , emphstyle={[2]\color{cyan}}
}


 
Mais je suis intéressé par toute autre solution  :jap:


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed