LaTeX & Cie

Petit blog perso à destination des LaTeXiens ;-)

[Tuto] Insertion de codes python et exécution de codes python (LuaLaTeX uniquement ;-))

Rédigé par C. Pierquet Aucun commentaire
Classé dans : Packages, Tutos Mots clés : Package, Tutos, Tutos Package

Un petit billet aujourd'hui pour présenter des capacités combinées intéressantes de deux packages, à savoir piton et pyluatex.

Le premier, développé par François Pantigny (CTAN: Package piton) permet d'insérer et mettre en forme du code Python (et même du pseudocode !) avec coloration syntaxique.
Le second, développé par Tobias Enderle (CTAN: Package PyLuaTeX) permet d'exécuter du code python, et d'émuler une console d'exécution !
À noter d'ailleurs que piton propose, en 'post-analyse', de formater du code exécuté avec coloration syntaxique, et que ProfLycee propose des environnements clés en main pour présenter codes et consoles avec un style particulier :-) 

Quelques points à savoir toutefois :

  • piton, tout comme pyluatex, demande d'utiliser le compilateur LuaLaTeX (que je conseille d'ailleurs, compte tenu de ses multiples atouts, tant au niveau des fontes que des capacités de programmation !) ;
  • pyluatex demande, en plus de compiler en --shell-escape (pour exécuter du code Python !).

Un préambule type (avec éventuellement arara comme script de compilation) pourra donc ressembler à :

% !TeX TXS-program:compile = txs:///arara
% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode}

\documentclass[french,a4paper,11pt]{article}
\usepackage{ProfLycee}
\useproflyclib{piton}
\usepackage[executable=python,ignoreerrors]{pyluatex}

Passons aux différents environnements disponibles !

1/ Présentation de pseudo-code

piton, de manière un peu détournée, permet de présenter du pseudo-code, avec ou sans coloration syntaxique, et en partenariat avec ProfLycee on peut utiliser la structure suivante (les clés, entre [...] sont détaillées dans la documentation ^^) :

\begin{PseudoCodePiton}[Largeur=16cm,Filigrane]{}
Algorithme : calcul mental
Variables  : nb1, nb2, resultat_saisi

Début
    nb1 ← randint (1, 10)
    nb2 ← randint (1, 10)
    Afficher(nb1 , " * ", nb2 , " = ? ")
    Saisir(resultat_saisi)
    TantQue resultat_saisi (*$\mathtt{neq}$*) nb1 × nb2  #mode math avec (* *)
        Afficher("Le résultat est incorrect, essayez encore : ")
        Saisir(resultat_saisi)
    FinTantQue
    Afficher("Bravo !")
Fin
\end{PseudoCodePiton}

2/ Présentation de code Python

piton, de manière un logique, permet de présenter du code Python, avec coloration syntaxique, et en partenariat avec ProfLycee on peut utiliser la structure suivante (les clés, entre [...] sont détaillées dans la documentation ^^) :

\begin{CodePiton}[Largeur=16cm,Filigrane]{}
    def liste_diviseurs(n) :
        res = []
        for i in range(1, n+1) :
            if n%i == 0 :
                res.append(i)
        return res
\end{CodePiton}

3/ Exécution de code Python

piton et pyluatex permettent de présenter du code Python exécuté (on peut déclarer du code, une fonction par exemple, et l'exécuter dans la console !), avec coloration syntaxique, et en partenariat avec ProfLycee on peut utiliser la structure suivante (les clés, entre <...> sont détaillées dans la documentation ^^) :

%code python qui est chargé de manière silencieuse
\begin{python}
def liste_diviseurs(n) :
    res = []
    for i in range(1, n+1) :
        if n%i == 0 :
            res.append(i)
    return res
\end{python}

\begin{ConsolePiton}<Largeur=16cm,Alignement=center>{}
liste_diviseurs(14)
liste_diviseurs(1500)
\end{ConsolePiton}

Les environnements proposés par ProfLycee ne sont là qu'à titre indicatif, et l'utilisateur peut personnaliser ses environnements de présentations de codes ;-)

Voilà le code source de document tex qui m'a servi de support pour ce tuto :

% !TeX TXS-program:compile = txs:///arara
% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode}

\documentclass[french,a4paper,11pt]{article}
\usepackage[margin=1cm]{geometry}
\usepackage{ProfLycee}
\useproflyclib{piton}
\usepackage[executable=python,ignoreerrors]{pyluatex}
\usepackage{babel}

\begin{document}

\begin{PseudoCodePiton}[Largeur=16cm,Filigrane]{}
Algorithme : calcul mental
Variables  : nb1, nb2, resultat_saisi

Début
    nb1 ← randint (1, 10)
    nb2 ← randint (1, 10)
    Afficher(nb1 , " * ", nb2 , " = ? ")
    Saisir(resultat_saisi)
    TantQue resultat_saisi (*$\mathtt{neq}$*) nb1 × nb2
        Afficher("Le résultat est incorrect, essayez encore : ")
        Saisir(resultat_saisi)
    FinTantQue
    Afficher("Bravo !")
Fin
\end{PseudoCodePiton}

\begin{CodePiton}[Largeur=16cm,Filigrane]{}
    def liste_diviseurs(n) :
        res = []
        for i in range(1, n+1) :
            if n%i == 0 :
                res.append(i)
        return res
\end{CodePiton}

\begin{python}
def liste_diviseurs(n) :
    res = []
    for i in range(1, n+1) :
        if n%i == 0 :
            res.append(i)
    return res
\end{python}

\bigskip

\begin{ConsolePiton}<Largeur=16cm,Alignement=center>{}
liste_diviseurs(14)
liste_diviseurs(1500)
end{ConsolePiton}

\end{document}

Lien du fichier texblog.cpierquet.frdata/medias/tuto_piton_pyluatex.tex

Lien du fichier pdftuto_piton_pyluatex.pdf (cpierquet.fr)

 

[Tuto] Profiter des capacités de sympy (Python) en LaTeX

Rédigé par C. Pierquet Aucun commentaire
Classé dans : Tutos Mots clés : Tutos, Tutos Package

Vous connaissez le module sympy de Python ? Vous êtes utilisateur de LaTeX ? Vous voulez combiner les deux ??

Le (modeste) package sympycalc permet de bénéficier des capacités de calculs de sympy directement en LaTeX :

  • effectuer des calculs de manière exacte ; 
  • effectuer des calculs sous forme symbolique ;
  • ...

L'idée est en fait de :

  • faire faire les calculs à sympy ;
  • récupérer les sorties grâce à la fonction latex(...) ;
  • patcher légèrement le tout pour respecter les règles de typographie française.

Il faut déjà savoir, et avoir conscience, qu'une petite configuration sera nécessaire au bon fonctionnement de cette solution :

  • avoir python installé, avec le module sympy ;
  • compiler en lualatex, avec shell-escape, pour une utilisation correcte du package pyluatex.
%préambule minimal
\documentclass[a4paper,11pt,french]{article}
\usepackage{mathtools}
\usepackage[executable=python]{pyluatex}
\usepackage{SympyCalc}

Le package sympycalc permet d'automatiser certaines commandes :

%%commandes génériques
\sympycalc(*){commande sympy}
\dsympycalc(*){commande sympy}

%commandes spécifiques, sortie standard (préfixer en d pour des sorties dysplaystyle
\sympyimage(*){fonction sympy}[variable]{point}
\sympydev(*){expr sympy}[variable]
\sympyfact(*){expr sympy}
\sympyderiv(*){expr sympy}[variable]
\sympynbderiv(*){expr sympy}[variable]{point}[côté]
\sympyprim(*){expr sympy}[variable]
\sympyintegr(*){expr sympy}[variable]{borne inf}{borne sup}
\sympylim(*){expr sympy}[variable]{point}[côté]
\sympyfexpo(*){complexe sympy}
\sympyresol(*){equation sympy}[variable]
\sympyresolC(*){equation sympy}[variable]

Par exemple, on peut effectuer quelques calculs basiques pour se rendre compte des possibilités offertes par sympy :

$1+\dfrac{5}{78} = \dsympycalc{1+5/78}$

$\displaystyle\frac{12}{\sqrt{5}} = \dsympycalc{12/sqrt(5)}$

$1+\dfrac32+\dfrac{15}{2+\sqrt{12}} = \dsympycalc{1+3/2+15/(2+sqrt(12))}$

Les captures suivantes sont issues de la documentation, et montrent en détail le fonctionnement de certaines commandes :

Documentation pdf : sympycalc

[Tuto] Création d'un environnement « centré » avec gestion des espacements autour

Rédigé par C. Pierquet Aucun commentaire
Classé dans : Tutos Mots clés : Tutos

Vous avez sans doute déjà remarqué que l'utilisation de l'environnement center crée des espacements (non forcément voulus) avant et après !
Il existe d'autres manières de centrer des objets, notamment avec \centering ou via le package spacingtricks, l'idée étant de garder cette aspect environnement.

L'idée est de créer un nouvel environnement, basé sur center, pour lequel l'utilisateur pourra modifier les espacements autour :

  • sous la forme [Avant=...,Apres=...] ;
  • avec la possibilité de spécifier des longueurs abslues ou liées à d'autres dimensions existantes..

L'environnement créé sera sous la forme :

\begin{Centrage}[clés]
    %code
\end{Centrage}

Les clés possibles [Avant] et [Apres] ont été explicitées précédemment.

En fonction des objets utilisés avant et après le Centrage (comme par exemple des paragraphes, des listes, etc), il est potentiellement utile de pouvoir dissocier l'espacement en amont et en aval du Centrage !

L'exemple suivant montre l'environnement center classique :

L'exemple suivant montre l'environnement Centrage avec coefficients par défaut à 0.5\baselineskip puis réduits à 0 :

\begin{Centrage}
    Test de contenu centré sur une ligne
\end{Centrage}

\begin{Centrage}[Avant=0pt,Apres=0pt]
    Test de contenu centré sur une ligne
\end{Centrage}

L'exemple suivant montre l'environnement Centrage avec des listes :

\begin{Centrage}
    Test de contenu centré sur une ligne
\end{Centrage}

\begin{Centrage}[Avant=-\topsep,Apres=0pt]
    Test de contenu centré sur une ligne
\end{Centrage}

Le code de cet environnement, lié à simplekv est :

\usepackage{simplekv}

%nouvelles longueurs
\newlength{\centeraltbef}%avant
\newlength{\centeraltbeh}%après

\defKV[myaltcenter]{Avant=\setlength{\centeraltbef}{#1},Apres=\setlength{\centeraltbeh}{#1}}
\setKVdefault[myaltcenter]{Avant=0.5\baselineskip,Apres=0.5\baselineskip}

\NewDocumentEnvironment{Centrage}{ O{} }%
    {\restoreKV[myaltcenter]\setKV[myaltcenter]{#1}\par\kern\centeraltbef\centering}%
    {\par\kern\centeraltbeh}

Fichier pdf : tuto_Centrage.pdf

Fichier tex : tuto_Centrage.tex

[Tuto] Création d'un environnement combiné « multicolonnes » et « liste »

Rédigé par C. Pierquet 2 commentaires
Classé dans : Tutos Mots clés : Tutos

À l'instar des packages (très performants) tasks ou hlist qui permettent déjà des créer des listes multicolonnes, l'idée est de présenter une alternative (basique) qui aura l'avantage de conserver les paramètres existants des environnements enumerate et itemize.

L'idée est de créer un nouvel environnement, basé sur multicol, pour lequel l'utilisateur pourra :

  • spécifier le nombre de colonnes ;
  • spécifier le type de la liste ;
  • paramétrer l'espacement vertical autour (par défaut il est - à mon sens - un peu trop grand) ;
  • rajouter des paramètres persos à la liste.

L'environnement créé sera sous la forme :

\begin{enumicols}[clés](nb_cols)<options_enumitem>
    \item ...
    \item ...
\end{enumicols}

Les clés possibles sont :

  • Type pour texte normal (texte, par défaut) ou liste numérotée (enum) ou puce (item) ;
  • CoeffEspVert pour paramétrer l'espacement vertical autour, en proportion (0.5 par défaut) et pouvant valoir l'une des valeurs suivantes : 0/0.25/0.33/0.5/0.66/0.75/1.

L'exemple suivant montre l'environnement multicols avec l'espacement par défaut :

L'exemple suivant montre l'environnement MultiCols avec l'espacement à 50% :

\begin{MultiCols}[Type=enum](3)
\begin{MultiCols}[Type=item](3)

\begin{MultiCols}[Type=enum,CoeffEspVert=0.50](3)
\begin{MultiCols}[Type=item,CoeffEspVert=0.50](3)

L'exemple suivant montre l'environnement MultiCols avec un espacement à 75% puis à 25% :

\begin{MultiCols}[Type=enum,CoeffEspVert=0.75](3)
\begin{MultiCols}[Type=item,CoeffEspVert=0.75](3)
\begin{MultiCols}[Type=enum,CoeffEspVert=0.25](3)
\begin{MultiCols}[Type=item,CoeffEspVert=0.25](3)

Fichier pdf : tuto_MultiCols.pdf

Fichier tex : tuto_MultiCols.tex

[Tuto] Création semi-automatique de boîtes, avec tcolorbox

Rédigé par C. Pierquet Aucun commentaire
Classé dans : Tutos Mots clés : Tutos

Petit guide (CC BY-NC-SA) sans prétention pour apprendre quelques bases sur la création de boîtes tcolorbox de manière semi-automatique, pour une création de cours, par exemple.

L'idée est de montrer le fonctionnement global d'une commande permettant de créer automatiquement des boîtes, avec quelques éléments de personnalisation.

\CreationBoite{nom}{nomcompteur}{couleur}{icône}{label}

Il sera également possible de modifier localement :

  • le titre et le numéro ;
  • le sous-titre ;
  • le logo de fond.

Des personnalisations intermédiaires et avancées sont également possible, en rentrant un peu plus en détail dans le code.

Fichier pdf : tuto_creation_boites.pdf