Utilisation de minted
Utilisation de minted
Bonjour,
suite à un message sur le présent forum, je voulais essayer minted (pour voir s'il sait faire des choses que listings ne sait pas faire). Suite a ces essais infructueux, j'ai deux questions:
1) En compilant avec "pdflatex -shell-escape <mon fichier>", j'ai un message d'erreur qui m'indique que pygmentize n'est pas installé, mais il l'est pourtant (en tapant dans un shell zsh la commande générée par minted.sty ça marche presque).
En regardant un peu plus près le code, il semble que mon système (TexLive 2009 packagé par Ubuntu 10.04) n'accepte aucun "write18" (désolé de pas expliquer cela clairement, mais je ne suis pas spécialiste de ces choses). Pouvez-vous s.v.p. me donner une piste pour corriger ce bouzin ?
2) Ma deuxième question (que j'aurais peut-être du poser en premier) : est-ce que Minted peut différencier une variable d'instance d'une variable locale d'une méthode? Je recherche un moyen de colorier des sources Java exactement comme le fait Eclipse (pour des programmeurs débutants). Le package listings n'a bien entendu pas un analyseur syntaxique complet et donc ne peut pas faire la différence entre ces deux types de variables. (je souhaites bien du courage à celuis qui voudrait faire cela en tex pur ). Mais peut-être que l'outil derrière pygmentize peut faire cela ?
D'avance merci de votre aide et bonne journée.
claude
suite à un message sur le présent forum, je voulais essayer minted (pour voir s'il sait faire des choses que listings ne sait pas faire). Suite a ces essais infructueux, j'ai deux questions:
1) En compilant avec "pdflatex -shell-escape <mon fichier>", j'ai un message d'erreur qui m'indique que pygmentize n'est pas installé, mais il l'est pourtant (en tapant dans un shell zsh la commande générée par minted.sty ça marche presque).
En regardant un peu plus près le code, il semble que mon système (TexLive 2009 packagé par Ubuntu 10.04) n'accepte aucun "write18" (désolé de pas expliquer cela clairement, mais je ne suis pas spécialiste de ces choses). Pouvez-vous s.v.p. me donner une piste pour corriger ce bouzin ?
2) Ma deuxième question (que j'aurais peut-être du poser en premier) : est-ce que Minted peut différencier une variable d'instance d'une variable locale d'une méthode? Je recherche un moyen de colorier des sources Java exactement comme le fait Eclipse (pour des programmeurs débutants). Le package listings n'a bien entendu pas un analyseur syntaxique complet et donc ne peut pas faire la différence entre ces deux types de variables. (je souhaites bien du courage à celuis qui voudrait faire cela en tex pur ). Mais peut-être que l'outil derrière pygmentize peut faire cela ?
D'avance merci de votre aide et bonne journée.
claude
-
- Modérateur spécialisé
- Messages : 2293
- Inscription : lundi 12 mars 2007, 11:20
- Localisation : Rouen
Re: Utilisation de minted
Bonjour
Pour le 1), c'est peut-être la commande de détection de pygmentize qui ne fonctionne pas correctement (c'est comme cela chez moi ubuntu 8.04) . Il y a un appel via which -s , mais l'option -s doit dépendre des versions de which. Solution : éditer minted.sty et enlever "-s". (c'est aussi un commentaire sur la liste du site google de minted)
Pour le 2) c'est pygmentize dépendant, donc à tester via pygments ton_exemple et la sortie que tu veux. Pygmentize fonctionne avec les expressions régulières donc va plus loin que listings mais ne comprend pas non plus comme le compilateur et dépendra aussi du support de java
O.G.
Pour le 1), c'est peut-être la commande de détection de pygmentize qui ne fonctionne pas correctement (c'est comme cela chez moi ubuntu 8.04) . Il y a un appel via which -s , mais l'option -s doit dépendre des versions de which. Solution : éditer minted.sty et enlever "-s". (c'est aussi un commentaire sur la liste du site google de minted)
Pour le 2) c'est pygmentize dépendant, donc à tester via pygments ton_exemple et la sortie que tu veux. Pygmentize fonctionne avec les expressions régulières donc va plus loin que listings mais ne comprend pas non plus comme le compilateur et dépendra aussi du support de java
O.G.
Re: Utilisation de minted
Bonjour.
Ceci étant, est-il facile de modifier minted pour qu'il appelle un programme Python de mon cru ?
Je suis aussi en train de faire cela, tu pourras poster ici tes remarques avec des ECM si possible, je le ferais.claude a écrit :...je voulais essayer minted (pour voir s'il sait faire des choses que listings ne sait pas faire).
Un exemple ? N'étant pas très volubile, je n'ai jamais eu le courage d'apprendre Java.claude a écrit :Ma deuxième question (que j'aurais peut-être du poser en premier) : est-ce que Minted peut différencier une variable d'instance d'une variable locale d'une méthode? Je recherche un moyen de colorier des sources Java exactement comme le fait Eclipse...
Là on touche un gros point faible de pygments de mon point de vue : la documentation est très mal faite. J'ai essayé sans succès de définir un nouveau langage de façon un peu plus évoluée qu'en donnant la liste des mots clés.OG a écrit :Pour le 2) c'est pygmentize dépendant, donc à tester via pygments ton_exemple et la sortie que tu veux. Pygmentize fonctionne avec les expressions régulières donc va plus loin que listings mais ne comprend pas non plus comme le compilateur et dépendra aussi du support de java
Ceci étant, est-il facile de modifier minted pour qu'il appelle un programme Python de mon cru ?
Re: Utilisation de minted
Un petit truc qui me gêne beaucoup, la gestion des lignes trop longues ne semblent pas prises en compte :
Code : Tout sélectionner
\documentclass[10pt,a4paper]{article}
\usepackage[utf8x]{inputenc}
\usepackage{ucs}
\usepackage{minted}
\begin{document}
\begin{minted}{python}
a = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
\end{minted}
\end{document}
Re: Utilisation de minted
Bonjour,
une solution pourrait en fait consister à fabriquer dans pygments ce que l'on appelle un formatter qui renverrait une sortie pour un code comme celui ci-dessous. Bien entendu, il faudrait définir des commandes spéciales.
une solution pourrait en fait consister à fabriquer dans pygments ce que l'on appelle un formatter qui renverrait une sortie pour un code comme celui ci-dessous. Bien entendu, il faudrait définir des commandes spéciales.
Code : Tout sélectionner
\documentclass[10pt,a4paper]{article}
\usepackage[utf8x]{inputenc}
\usepackage{ucs}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[frenchb]{babel}
\usepackage[x11names, svgnames]{xcolor}
\usepackage{tikz}
\usepackage{listings}
\usepackage{spverbatim}
\lstset{
%
% Hack for utf-8 like possibilities
extendedchars = true,
literate =
% * A
{à}{{\`a}}1 {â}{{\^a}}1
{À}{{\`A}}1 {Â}{{\^A}}1
% * C
{ç}{{\c{c}}}1
{Ç}{{\c{C}}}1
% * E
{é}{{\'e}}1 {è}{{\`e}}1 {ê}{{\^e}}1 {ë}{{\"e}}1
{É}{{\'E}}1 {È}{{\`E}}1 {Ê}{{\^E}}1 {Ë}{{\"E}}1
% * I
{î}{{\^i}}1 {ï}{{\"i}}1
{Î}{{\^I}}1 {Ï}{{\"I}}1
% * O
{ô}{{\^o}}1
{Ô}{{\^O}}1
% * OE
{œ}{{\oe}}1
{Œ}{{\OE}}1
% * U
{ù}{{\`u}}1 {û}{{\^u}}1 {ü}{{\"u}}1
{Ù}{{\`U}}1 {Û}{{\^U}}1 {Ü}{{\"U}}1
% * Special characters
{°}{{\textdegree}}1
{±}{{\textpm}}1,
%
% Escaping character used to allow LaTeX formatting inside one listing.
escapechar=\⣿,
% You can use a start and an end espcaping character.
% escapeinside={*!}{!*},
%
% Default style for listings
%
% * Number for lines
numbers=left, % Where to put the line-numbers
numberstyle=\footnotesize, % Size of the fonts used for the line-numbers
stepnumber=1, % Step between two numbers
numbersep=5pt, % How far the line-numbers are from the code
%
% * Back returns for long lines
breaklines=true, % Sets automatic line breaking
breakatwhitespace=false, % Automatic breaks only happen at whitespace ?
breakindent=0pt, % Space before the text of a break
postbreak=\mbox{ % Character used at the begining of a break
\rotatebox[y=0.9ex]{180}{\color{Red} $\Lsh$}%
},
% You can use a character at the end of line where there is one break.
% prebreak=\mbox{\tiny$\searrow$},
%
% * Spacings and tabs
showspaces=false, % Spaces are displayed by a kind of underscore
showstringspaces=false, % Underline spaces within strings
showtabs=false, % Tabs are displayed by a kind of underscore
tabsize=4, % Default tabsize to 4 spaces
%
% * Text formatting
basicstyle=\ttfamily, % Size of the font used
backgroundcolor=\color{Bisque},% The background color using the package ''color''
%
% * Frames and lines
frame=single, % Frame around the code ?
frame=shadowbox, % Style of frame
%
% * Title and caption
captionpos=b, % Position of the caption
title=\lstname, % Show the filename of files included with ''\lstinputlisting''
}
\begin{document}
\section{Un bloc de code}
\begin{lstlisting}[]
⣿\color{Green}{\# Programme calculant $ \sum_{i=1}^{5} i^3 $}⣿
⣿\color{Blue}{for}⣿ i in ⣿\color{Blue}{range}⣿ (5): ⣿\color{Blue}{for}⣿ i in ⣿\color{Blue}{range}⣿(5): ⣿\color{Blue}{for}⣿ i in ⣿\color{Blue}{range}⣿(5): ⣿\color{Blue}{for}⣿ i in ⣿\color{Blue}{range}⣿(5): ⣿\color{Blue}{for}⣿ i in ⣿\color{Blue}{range}⣿(5): ⣿\color{Blue}{for}⣿ i in ⣿\color{Blue}{range}⣿(5): ⣿\color{Blue}{for}⣿ i in ⣿\color{Blue}{range}⣿(5): ⣿\color{Blue}{for}⣿ i in ⣿\color{Blue}{range}⣿(5): ⣿\color{Blue}{for}⣿ i in ⣿\color{Blue}{range}⣿(5): ⣿\color{Blue}{for}⣿ i in ⣿\color{Blue}{range}⣿(5):
sum += i**3
⣿\color{Blue}{print}⣿ sum
⣿\color{Blue}{print}⣿(⣿\color{Red}{'Fin de la boucle...'}⣿)
\end{lstlisting}
\section{Du code en ligne}
Du listing dans une ligne : \texttt{\color{Blue}for} \texttt{i} \texttt{in} \texttt{\color{Blue}range}\texttt{(5):} \texttt{\color{Blue}for} \texttt{i} \texttt{in} \texttt{\color{Blue}range}\texttt{(5):} \texttt{\color{Blue}for} \texttt{i} \texttt{in} \texttt{\color{Blue}range}\texttt{(5):} .
\end{document}
Dernière modification par projetmbc le dimanche 26 juin 2011, 11:34, modifié 2 fois.
Re: Utilisation de minted
Je pensais à un truc du genre :http://www.cijoint.fr/cjlink.php?file=c ... aoI8Qy.pngprojetmbc a écrit :Un exemple ? N'étant pas très volubile, je n'ai jamais eu le courage d'apprendre Java.claude a écrit :Ma deuxième question (que j'aurais peut-être du poser en premier) : est-ce que Minted peut différencier une variable d'instance d'une variable locale d'une méthode? Je recherche un moyen de colorier des sources Java exactement comme le fait Eclipse...
Par contre je ne comprends pas ta remarque sur ta possible volubilité.
Dernière modification par guiguiche le dimanche 26 juin 2011, 10:45, modifié 1 fois.
Raison : balises [quote]
Raison : balises [quote]
Re: Utilisation de minted
Pygments ne fait pas ceci par défaut. Je suis peu convaincu par cette bibliothèque car sa documentation ne permet pas d'être productif rapidement : l'API es peu intuitive et à mon avis inutilement compliquée.claude a écrit :Je pensais à un truc du genre :http://www.cijoint.fr/cjlink.php?file=c ... aoI8Qy.png
Je vais poser la question pour ton histoire d'attribut aux concepteurs de pygments.
C'était une mauvaise blague de geek. Java a la réputation de demander d'écrire pas mal de choses.claude a écrit :Par contre je ne comprends pas ta remarque sur ta possible volubilité.
Si tu veux tester rapidement pygments, tu peux utiliser le code suivant à lancer dans un Terminal. Penser à mettre le path complet dans pathOfTheFileToTest, ou bien à changer de dossier avant de lancer le script avec un chemin local pour le fichier à colorer.
Code : Tout sélectionner
#! /usr/bin/env python
#coding=utf-8
import os
from pygments import highlight
from pygments.lexers import JavaLexer
from pygments.formatters import TerminalFormatter
pathOfTheFileToTest= "???"
code = open(pathOfTheFileToTest).read()
# This allows to see directly the effects in a Terminal !
print highlight(code, JavaLexer(), TerminalFormatter(style='bw'))
Re: Utilisation de minted
J'ai plus lancé une bouteille à la mer qu'une vraie question. Il me semble (mais mes cours sont vachement loins) qu'une simple analyse syntaxique n'est pas suffisante pour distinguer un attribut d'une variable locale, donc je comprends que ce problème soit très compliqué à résoudre.projetmbc a écrit :Pygments ne fait pas ceci par défaut. Je suis peu convaincu par cette bibliothèque car sa documentation ne permet pas d'être productif rapidement : l'API es peu intuitive et à mon avis inutilement compliquée.claude a écrit :Je pensais à un truc du genre :http://www.cijoint.fr/cjlink.php?file=c ... aoI8Qy.png
Je vais poser la question pour ton histoire d'attribut aux concepteurs de pygments.
Actuellement j'écrit des programmes en C, Java et Python. Python est le seul langage ou j'ai dû ramer pendant de longues minutes juste parce que j'avais mal orthographié le nom d'une variable. D'habitude c'est le boulot du petit personnel (le compilateur) de voir ce genre de bug. Python a encore un autre désavantage que j'ai découvert par hasard. Un de mes étudiant est non-voyant et pour lui la délimitation des blocs par l'indentation est un gros problème. Lorsque cet étudiant écrit du C ou du Java, il aligne toutes les lignes à la première colonne (aucune indentation), mais il est facile ensuite de remettre son code en forme avec Eclipse par exemple (mais il y a plein d'autres outils qui font cela). Par contre avec Python, je ne connais aucun outil pour remettre un code en forme quand on a perdu l'indentation. Ca non plus ça ne doit pas être simple parce que la sémantique est justement dépendante de l'indentation.projetmbc a écrit :C'était une mauvaise blague de geek. Java a la réputation de demander d'écrire pas mal de choses.claude a écrit :Par contre je ne comprends pas ta remarque sur ta possible volubilité.
Par contre, pour des "petits" projets, c'est vrai que python permet d'avoir rapidement un truc utilisable.
Je vais zieuter cela tranquillement. Merci de tes conseils.projetmbc a écrit : Si tu veux tester rapidement pygments, tu peux utiliser le code suivant à lancer dans un Terminal. Penser à mettre le path complet dans pathOfTheFileToTest, ou bien à changer de dossier avant de lancer le script avec un chemin local pour le fichier à colorer.
En fait, tu peux tester directement sur le web : voir le bas de cette page. Du coup, j'ai mis ton exemple en ligne : http://pygments.org/demo/19059/ .Code : Tout sélectionner
#! /usr/bin/env python #coding=utf-8 import os from pygments import highlight from pygments.lexers import JavaLexer from pygments.formatters import TerminalFormatter pathOfTheFileToTest= "???" code = open(pathOfTheFileToTest).read() # This allows to see directly the effects in a Terminal ! print highlight(code, JavaLexer(), TerminalFormatter(style='bw'))
Re: Utilisation de minted
Bonsoir.
Par contre, le fonctionnement de Pygments ne semble pas le permettre car il est basé sur un ensemble de regex fixées dès le départ, et surtout Pygments ne se préoccupe pas des blocs de structure.
Cela me parait au contraire faisable. Il faudrait encore me définir dans quels cas colorer les variables "utilisateur". Pour l'exemple que tu as proposé, il suffit juste de savoir que l'on est au début d'une classe.claude a écrit :Il me semble (mais mes cours sont vachement loins) qu'une simple analyse syntaxique n'est pas suffisante pour distinguer un attribut d'une variable locale, donc je comprends que ce problème soit très compliqué à résoudre.
Par contre, le fonctionnement de Pygments ne semble pas le permettre car il est basé sur un ensemble de regex fixées dès le départ, et surtout Pygments ne se préoccupe pas des blocs de structure.
Il existe des debuggers...claude a écrit :Python est le seul langage ou j'ai dû ramer pendant de longues minutes juste parce que j'avais mal orthographié le nom d'une variable.
C'est un argument juste. Peut-être faudrait-il voir avec lui s'il a une solution à proposer ?claude a écrit :Python a encore un autre désavantage que j'ai découvert par hasard. Un de mes étudiant est non-voyant et pour lui la délimitation des blocs par l'indentation est un gros problème.
Cela n'a pas de sens, c'est un peu comme si tu demandais à un programme d'ajouter des accolades manquantes dans un programme en C.claude a écrit :Par contre avec Python, je ne connais aucun outil pour remettre un code en forme quand on a perdu l'indentation.
Pour des gros aussi... Pas de procès d'intention...claude a écrit :Par contre, pour des "petits" projets, c'est vrai que python permet d'avoir rapidement un truc utilisable.
-
- Modérateur spécialisé
- Messages : 2293
- Inscription : lundi 12 mars 2007, 11:20
- Localisation : Rouen
Re: Utilisation de minted
Avez vous essayé d'autres solutions pour colorer ? Avec emacs, htmlize et du bash il
est possible de sortir du LaTeX. Cette solution ne vient pas de moi, mais de Philippe Ivaldi.
Pour Pygments, tu peux tout de même utiliser les expressions régulières en plus des mots clefs.
O.G.
est possible de sortir du LaTeX. Cette solution ne vient pas de moi, mais de Philippe Ivaldi.
Pour Pygments, tu peux tout de même utiliser les expressions régulières en plus des mots clefs.
O.G.
Re: Utilisation de minted
Non. Ceci étant le coup de la coloration "dynamique" comme l'exemple proposé avant, je ne l'ai pas vu sur d'autres éditeurs : Scintilla ne semble pas gérer cela pour le Java, XCode non plus.OG a écrit :Avez vous essayé d'autres solutions pour colorer ? Avec emacs, htmlize et du bash il
est possible de sortir du LaTeX.
Une solution serait d'avoir un système de coloration supplémentaire localement. Par exemple, ici, on demanderait de traiter l'attribut.
C'est à mon sens inutilement compliqué et le problème des regex est de savoir dans quel ordre les choses sont trouvées : ce n'est pas forcément une lecture de gauche à droite d'où la difficulté de la gestion des groupes de parenthèses avec des regex.OG a écrit :Pour Pygments, tu peux tout de même utiliser les expressions régulières en plus des mots clefs.
-
- Sujets similaires
- Réponses
- Vues
- Dernier message
-
- 40 Réponses
- 2643 Vues
-
Dernier message par F. Pantigny
-
- 22 Réponses
- 2391 Vues
-
Dernier message par gigiair
-
- 1 Réponses
- 557 Vues
-
Dernier message par MB
-
- 6 Réponses
- 932 Vues
-
Dernier message par MB
-
- 5 Réponses
- 2966 Vues
-
Dernier message par touhami