Utilisation de minted

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
claude

Utilisation de minted

Message non lu par claude »

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 :lol: ). Mais peut-être que l'outil derrière pygmentize peut faire cela ?

D'avance merci de votre aide et bonne journée.

claude
OG
Modérateur spécialisé
Modérateur spécialisé
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: Utilisation de minted

Message non lu par OG »

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.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2238
Inscription : samedi 29 décembre 2007, 00:58

Re: Utilisation de minted

Message non lu par projetmbc »

Bonjour.
claude a écrit :...je voulais essayer minted (pour voir s'il sait faire des choses que listings ne sait pas faire).
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 :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...
Un exemple ? N'étant pas très volubile, je n'ai jamais eu le courage d'apprendre Java.
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
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.

Ceci étant, est-il facile de modifier minted pour qu'il appelle un programme Python de mon cru ?
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2238
Inscription : samedi 29 décembre 2007, 00:58

Re: Utilisation de minted

Message non lu par projetmbc »

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}
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2238
Inscription : samedi 29 décembre 2007, 00:58

Re: Utilisation de minted

Message non lu par projetmbc »

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.

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.
claude

Re: Utilisation de minted

Message non lu par claude »

projetmbc a écrit :
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...
Un exemple ? N'étant pas très volubile, je n'ai jamais eu le courage d'apprendre Java.
Je pensais à un truc du genre :http://www.cijoint.fr/cjlink.php?file=c ... aoI8Qy.png

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]
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2238
Inscription : samedi 29 décembre 2007, 00:58

Re: Utilisation de minted

Message non lu par projetmbc »

claude a écrit :Je pensais à un truc du genre :http://www.cijoint.fr/cjlink.php?file=c ... aoI8Qy.png
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.

Je vais poser la question pour ton histoire d'attribut aux concepteurs de pygments.
claude a écrit :Par contre je ne comprends pas ta remarque sur ta possible volubilité.
C'était une mauvaise blague de geek. Java a la réputation de demander d'écrire pas mal de choses.


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'))
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/ .
claude

Re: Utilisation de minted

Message non lu par claude »

projetmbc a écrit :
claude a écrit :Je pensais à un truc du genre :http://www.cijoint.fr/cjlink.php?file=c ... aoI8Qy.png
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.

Je vais poser la question pour ton histoire d'attribut aux concepteurs de pygments.
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 :
claude a écrit :Par contre je ne comprends pas ta remarque sur ta possible volubilité.
C'était une mauvaise blague de geek. Java a la réputation de demander d'écrire pas mal de choses.
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.

Par contre, pour des "petits" projets, c'est vrai que python permet d'avoir rapidement un truc utilisable.
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.

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'))
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/ .
Je vais zieuter cela tranquillement. Merci de tes conseils.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2238
Inscription : samedi 29 décembre 2007, 00:58

Re: Utilisation de minted

Message non lu par projetmbc »

Bonsoir.
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.
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.

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.
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.
Il existe des debuggers...
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.
C'est un argument juste. Peut-être faudrait-il voir avec lui s'il a une solution à proposer ?
claude a écrit :Par contre avec Python, je ne connais aucun outil pour remettre un code en forme quand on a perdu l'indentation.
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, pour des "petits" projets, c'est vrai que python permet d'avoir rapidement un truc utilisable.
Pour des gros aussi...
  1. Mercurial
  2. Tornado
  3. Sage
  4. SymPy
  5. MayaVi
  6. ...
Pas de procès d'intention...
OG
Modérateur spécialisé
Modérateur spécialisé
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: Utilisation de minted

Message non lu par OG »

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.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2238
Inscription : samedi 29 décembre 2007, 00:58

Re: Utilisation de minted

Message non lu par projetmbc »

OG a écrit :Avez vous essayé d'autres solutions pour colorer ? Avec emacs, htmlize et du bash il
est possible de sortir du LaTeX.
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.

Une solution serait d'avoir un système de coloration supplémentaire localement. Par exemple, ici, on demanderait de traiter l'attribut.

OG a écrit :Pour Pygments, tu peux tout de même utiliser les expressions régulières en plus des mots clefs.
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.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message