Utilisation du package piton

Bonjour,

j’ai redéfini la commande \PitonInputFile ainsi :

\NewDocumentCommand{\Src}{ m }{\PitonInputFile{#1}}

Je peux alors sans soucis inclure le fichier source.py :

\Src{source.py}

Tout baigne. Enfin presque… Je voudrais maintenant n’inclure qu’une
partie d’un fichier en utilisant la méthode des numéros de ligne.
C’est-à-dire- en écrivant :

\PitonInputFile[first-line=n1, last-line=n2]{source.py}

Comment modifier ma redéfinition, ou comment en définir une autre
semblable ?

Merci d’avance,

Bob

Bonsoir,

La question n’est-elle pas plutôt : « Comment définir, avec la commande \NewDocumentCommand, une nouvelle commande (\Src) qui prend un paramètre optionnel avec un système de clé/valeurs » ?

La question ne porte alors sur le package Piton que de manière anecdotique.

Voici une proposition. J’ignore si c’est totalement dans les règles de l’art en matière de programmation LaTeX3 que je ne connais que superficiellement. Cela fonctionne mais peut-être que ça peut être optimisé.

Je suppose, pour disposer d’un exemple fonctionnel, qu’au même niveau que le fichier .tex dont le contenu est ce qui suit, se trouve un fichier source.py qui contient le code Python utilisé dans cet exemple dans l’environnement Piton (et provenant de la documentation du package piton).

Ceci est à compiler avec LuaLaTeX.

\documentclass{article}
\usepackage{piton}

\ExplSyntaxOn
\keys_define:nn {cmdSrc} {
first-line .code:n = {\tl_set:Nn \l_firstLine_int {#1} },
last-line .code:n = {\tl_set:Nn \l_lastLine_int {#1} }
}

\NewDocumentCommand{\Src}{ O{} m }{
\group_begin:
\keys_set:nn {cmdSrc} {#1}
\PitonInputFile[first-line=\l_firstLine_int, last-line=\l_lastLine_int]{#2}
\group_end:
}
\ExplSyntaxOff

\begin{document}

\section{Directement}

\begin{Piton}
from math import pi

def arctan(x,n=10:int):
“”"Calcule la valeur mathématique de arctan(x)

n est le nombre de termes de la somme
"""
if x < 0:
	return -arctan(-x) # appel récursif
	
elif x > 1:
	return pi/2 - arctan(1/x)
	#>(on a utilisé le fait que $\arctan(x) + \arctan(1/x) = \pi/2 $ pour $x > 0$) 

else:
	s = 0
	for k in range(n):
		s += (-1)**k/(2*k+1)*x**(2*k+1)
	return s	

\end{Piton}

\section{Indirectement (lignes 3 à 8)}

\PitonInputFile[first-line=3, last-line=8]{source.py}

\section{Avec la commande créée}

\Src[first-line=3, last-line=8]{source.py}
\end{document}

J’ai repris les mêmes noms de clé first-line et last-line que ceux employés dans la commande \PitonInputFile. Cela peut être modifié ici :

\keys_define:nn {cmdSrc} {
first-line .code:n = {\tl_set:Nn \l_firstLine_int {#1} },
last-line .code:n = {\tl_set:Nn \l_lastLine_int {#1} }
}

par exemple avec :

\keys_define:nn {cmdSrc} {
premiere-ligne .code:n = {\tl_set:Nn \l_firstLine_int {#1} },
derniere-ligne .code:n = {\tl_set:Nn \l_lastLine_int {#1} }
}

Dans ce cas,

\Src[first-line=3, last-line=8]{source.py}

est à remplacer par :

\Src[premiere-ligne=3, derniere-ligne=8]{source.py}

En espérant que cela réponde à votre attente, et que je n’ai pas fait trop d’erreurs, puisqu’encore une fois, je ne connais pas trop LaTeX3. Mais comme il n’y avait pas d’autre réponse jusqu’à présent, je me suis lancé.

Le 13 avr. 2025 à 11:46, Bob xyz@xyz.tld a écrit :

Bonjour,

j’ai redéfini la commande \PitonInputFile ainsi :

\NewDocumentCommand{\Src}{ m }{\PitonInputFile{#1}}

Je peux alors sans soucis inclure le fichier source.py :

\Src{source.py}

Tout baigne. Enfin presque… Je voudrais maintenant n’inclure qu’une partie d’un fichier en utilisant la méthode des numéros de ligne. C’est-à-dire- en écrivant :

\PitonInputFile[first-line=n1, last-line=n2]{source.py}

Comment modifier ma redéfinition, ou comment en définir une autre semblable ?

Merci d’avance,

Bob

Le 13/04/2025 à 11:46, Bob a écrit :

Bonjour,

Bonjour,

j’ai redéfini la commande \PitonInputFile ainsi :

\NewDocumentCommand{\Src}{ m }{\PitonInputFile{#1}}

Ce n’est pas une redéfinition de \PitonInputFile.
C’est juste la définition de la commande \Src (qui utilise \PitonInoutFile).

Je peux alors sans soucis inclure le fichier source.py :

\Src{source.py}

Tout baigne. Enfin presque… Je voudrais maintenant n’inclure qu’une
partie d’un fichier en utilisant la méthode des numéros de ligne. C’est-
à-dire- en écrivant :

\PitonInputFile[first-line=n1, last-line=n2]{source.py}

Comment modifier ma redéfinition, ou comment en définir une autre
semblable ?

La nouvelle définition:

\NewDocumentCommand{\Src}{ O{} m}{\PithonInputFile[#1]{#2}}

Qui devrait permettre:

\Src{source.py}
\Src[first-line=n1, last-line=n2]{source.py}

(non testé)

Cordialement,

 Paul Gaborit