\documentclass[10pt,french]{article}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{pythontex-tools}
\usepackage[colorlinks=true,linkcolor=purple]{hyperref}
\usepackage{graphicx}
\usepackage{listingsutf8}
	\lstset{%
	inputencoding     = utf8,
	language		 = TeX,
	breaklines = true,
    %mathescape,
    basicstyle         = \footnotesize\ttfamily,
    numberstyle     = \scriptsize\ttfamily\color{gray},
    showstringspaces = false,
    tabsize         = 2,
    numbers         = left,
    xleftmargin     = 8mm,
    frame             = lines,
    framexleftmargin = 8mm,
    framerule         = 1pt,
    rulecolor         = \color{green!50!black},
    backgroundcolor = \color{green!5},
    commentstyle    = \color{gray},
    %morecomment        = [l][commentstyle]{//},
    classoffset        = 0,
    keywords         = {text,frac,dfrac,leqslant,binom},    
    keywordstyle    = \color{blue!75},
    classoffset        = 1,
    morekeywords     = {coefbinom,factorial,intfluct,binomialcdftable,colorhead, colorbinomialcdftable,binomialcdf,binomial,integ,simpdfrac, simpfrac,simpsqrt,ifactors,gcd},
    keywordstyle    = \color{green!50!black},
    classoffset        = 0,
    %morestring        = [b]",
    %stringstyle        = \color{red!75}
    literate = {é}{{\'e}}{1}%
    		   {è}{{\`e}}{1}%
    		   {à}{{\`a}}{1}%
    		   {â}{{\^a}}{1}%
    		   {ç}{{\c{c}}}{1}%
    		   {œ}{{\oe}}{1}%
    		   {ù}{{\`u}}{1}%
    		   {É}{{\'E}}{1}%
    		   {È}{{\`E}}{1}%
               {À}{{\`A}}{1}%
               {Ç}{{\c{C}}}{1}%
               {Œ}{{\OE}}{1}%
               {Ê}{{\^E}}{1}%
               {ê}{{\^e}}{1}%
               {î}{{\^i}}{1}%
               {ï}{{\"i}}{1}%
               {ô}{{\^o}}{1}%
               {û}{{\^u}}{1}}
\title{pythontex-tools v0.1}
\author{Stéphane Pasquet -- \url{mathweb.fr}}
\date{\today}

\begin{document}

\maketitle

\section{Introduction}

Cette extension est destinée à offrir quelques outils pour la rédaction de documents mathématiques compilés à l'aide de \texttt{pythontex}.

Il faut donc:
\begin{itemize}
\item disposer d'une distribution python sur la machine locale;
\item avoir installé \texttt{pythontex} sur la machine locale;
\item savoir compiler un document faisant appel à pythontex (voir section \ref{complements}).
\end{itemize}

Cette extension doit s'installer dans l'arborescence \LaTeX{}; je conseille sous windows par exemple une arborescence personnalisée de la forme:

\begin{quote}
\ttfamily
C:\textbackslash texmf\textbackslash doc\textbackslash pythontex-tools\textbackslash pythontex-tools.tex

C:\textbackslash texmf\textbackslash latex\textbackslash pythontex-tools\textbackslash pythontex-tools.sty
\end{quote}

\section{Convention d'écritures}

Dans ce document, pour chaque listing,
\begin{itemize}
\item les mots-clés écrits en vert sont les macros définies par \texttt{pythontex-tools};
\item les mots-clés écrits en bleu sont des autres mots \LaTeX;
\end{itemize}

\section{Décomposition en produit de facteurs premiers}

\subsection{En colonne}

\begin{lstlisting}
\ifactors[True]{120}
\end{lstlisting}

\begin{center}
\ifactors[True]{120}
\end{center}

\subsection{En ligne}


\begin{lstlisting}
$120=\ifactors{120}$
\end{lstlisting}

\begin{center}
$120=\ifactors{120}$
\end{center}


\section{Simplification de racines carrées}


\begin{lstlisting}
$\sqrt{147}=\simpsqrt{147}$

$\sqrt{25}=\simpsqrt{25}$
\end{lstlisting}

\[
\begin{array}{rl}
\sqrt{147}&=\simpsqrt{147}\\
\sqrt{25}&=\simpsqrt{25}
\end{array}
\]


\section{PGCD de deux nombres}

\begin{lstlisting}
$\text{pgcd}(145,25)=\gcd{145,25}$
\end{lstlisting}

\[
\text{pgcd}(145,25)=\gcd{145,25}
\]
\paragraph*{Attention:} \textbackslash gcd est une macro native \LaTeX. Je l'ai donc redéfinie car non utilisés en langue française.

\section{Simplification de fractions}

\begin{lstlisting}
$\frac{145}{25}=\simpfrac{145,25}$

$\dfrac{175}{55}=\simpdfrac{175,55}$
\end{lstlisting}

\begin{center}
$\frac{145}{25}=\simpfrac{145,25}$
\qquad ; \qquad 
$\dfrac{175}{55}=\simpdfrac{175,55}$
\end{center}

\section{Valeur approchée d'une intégrale}

\begin{lstlisting}
$\int_0^1 \text{e}^x\text{d}x \approx 
\integ{exp,0,1}$

$\int_0^1 \text{e}^x\text{d}x \approx 
\integ{exp,0,1,True,dec=5,decm=5}$

$\int_0^1 \sqrt{x}\;\text{d}x \approx 
\integ{lambda x: sqrt(x),0,1,dec=3}$

$\int_0^{+\infty} \text{e}^{-x}\;\text{d}x 
\approx  \integ{lambda x: exp(-x),0,inf,dec=0}$
\end{lstlisting}

\[
\begin{array}{rl}
\int_0^1 \text{e}^x\text{d}x & \approx \integ{exp,0,1}\\[6pt]
\int_0^1 \text{e}^x\text{d}x & \approx \integ{exp,0,1,True,dec=5,decm=5}\\[6pt]
\int_0^1 \sqrt{x}\;\text{d}x & \approx \integ{lambda x: sqrt(x),0,1,dec=3}\\[6pt]
\int_0^{+\infty} \text{e}^{-x}\;\text{d}x & \approx  \integ{lambda x: exp(-x),0,inf,dec=0}
\end{array}
\]

\paragraph*{Précisions :} la macro \texttt{\textbackslash integ} est de la forme:
\begin{center}
\ttfamily
\textbackslash integ\{ fonction , borne inf., borne sup., <options> \}
\end{center}
où les options sont:
\begin{itemize}
\item \texttt{booléen} : si \og True \fg, la marge d'erreur est affichée. Nécessairement en position 4, ou bien indiquer \og marge = True \fg{} si la position est différente de 4; 
\item \texttt{dec = valeur entière} : nombre de décimales (par défaut : 20);
\item \texttt{decm = valeur entière} : nombre de décimales dans l'écriture scientifique de la marge d'erreur (par défaut : 10).
\end{itemize}

La fonction est:
\begin{itemize}
\item soit une fonction connue du module \texttt{math} (comme \texttt{exp} pour l'exponentielle, \texttt{log} pour le logarithme népérien, etc.). Voir par exemple la page : \url{https://docs.python.org/fr/3.5/library/math.html} pour toutes les fonctions disponibles;
\item soit une fonction définie à l'aide la fonction \texttt{lambda} de python; par exemple, pour $f(x)=x+3$, on écrira : \texttt{lambda x: x+3}. 
\end{itemize}

\section{Probabilités}

\subsection{Loi binomiale} 

\subsubsection{$P(X = k)$ avec $X\hookrightarrow\mathcal{B}(n,p)$}

\begin{lstlisting}
$P(X=3)\approx\binomial{10,0.31,3}$ 

$P(X=5)\approx\binomial{10,0.31,5,dec=10}$ 
\end{lstlisting}

\[
\begin{array}{rl}
P(X=3)&\approx\binomial{10,0.31,3}\\
P(X=5)&\approx\binomial{10,0.31,5,dec=10}
\end{array}
\]

\newpage

\subsubsection{$P(X \leqslant k)$ avec $X\hookrightarrow\mathcal{B}(n,p)$}


\begin{lstlisting}
$P(X\leqslant3)\approx\binomialcdf{10,0.31,3}$ 

$P(X\leqslant5)\approx\binomialcdf{10,0.31,5,dec=10}$ 
\end{lstlisting}

\[
\begin{array}{rl}
P(X\leqslant3)&\approx\binomialcdf{10,0.31,3}\\
P(X\leqslant5)&\approx\binomialcdf{10,0.31,5,dec=10}
\end{array}
\]

\subsubsection{Table des probabilités des $P(X \leqslant k)$ avec $X\hookrightarrow\mathcal{B}(n,p)$}

\begin{lstlisting}
\def\colorbinomialcdftable{orange}
\def\colorhead{white}
\binomialcdftable{50,0.31,dec=5,seuil=0.95,opacity=40}
\end{lstlisting}

\begin{center}
\def\colorbinomialcdftable{orange}
\def\colorhead{white}
\binomialcdftable{50,0.31,dec=5,seuil=0.95,opacity=40}
\end{center}

\bigskip

Par défaut, \texttt{\textbackslash colorbinomialcdftable} vaut \texttt{gray} et \texttt{\textbackslash colorhead} vaut \texttt{black}.

Le paramètre \texttt{opacity} vaut par défaut \texttt{20} : il définit l'opacité des lignes qui indiquent les bornes de l'intervalle de fluctuations.



\subsubsection{Intervalle de fluctuations}


\begin{lstlisting}
Sous forme de bornes entières : \intfluct{50,0.31}

Sous forme de fréquences : \intfluct{50,0.31,freq = True}
\end{lstlisting}

\begin{center}
\begin{tabular}{rl}
Sous forme de bornes entières &: \intfluct{50,0.31}\\
Sous forme de fréquences & : \intfluct{50,0.31,freq = True}
\end{tabular}
\end{center}

\newpage

\subsection{Dénombrement}

\subsubsection{Coefficient binomial $\binom{n}{p}$}

\begin{lstlisting}
$\binom{15}{7}=\coefbinom{15,7}$
\end{lstlisting}

\[
\binom{15}{7}=\coefbinom{15,7}
\]

\subsubsection{Factorielle}

\begin{lstlisting}
$12! = \factorial{12}$
\end{lstlisting}

\[
12! = \factorial{12}
\]

\section{Ajouts}

Si vous avez des suggestions d'ajouts, contactez-moi par l'intermédiaire de mon site Internet.

\section{Compléments sur Pythontex}
\label{complements}

Pour utiliser Pythontex,
\begin{enumerate}
\item vous devez avant tout installer le package \texttt{pythontex}.

Exemple sous windows 10 et MikTeX : recherchez \og MikTeX console \fg{} et lancez-la. La fenêtre suivante apparaît:
\begin{center}
\includegraphics[height=7cm]{Miktex01.png}
\end{center}

Ensuite, cliquez sur \og Packages \fg{} :

\begin{center}
\includegraphics[height=7cm]{Miktex02.png}
\end{center}

Entrez \og pythontex \fg{} dans le champs adéquat :

\begin{center}
\includegraphics[height=7cm]{Miktex03.png}
\end{center}

Ici, le package est déjà installé, mais s'il ne l'est pas, cliquez sur le \og + \fg{} pour l'ajouter, puis cliquez sur le 4\ieme{} icône (celui juste avant le champ de saisie) pour rafraichir la base de données.

\newpage

\item Dans votre éditeur \LaTeX (Texmaker par exemple), s'il existe un moyen de créer un raccourci de compilation, entrez la chaîne suivante:

\begin{quote}
\ttfamily
(1) pdflatex --shell-escape -synctex=1 -interaction=nonstopmode \%.tex|\\
(2) C:\textbackslash Users\textbackslash Stephane\textbackslash AppData\textbackslash Local\textbackslash Programs\textbackslash Python\textbackslash Python38-32\textbackslash\\python.exe "C:\textbackslash Users\textbackslash Stephane\textbackslash AppData\textbackslash Local\textbackslash Programs\textbackslash MiKTeX 2.9\textbackslash scripts\textbackslash pythontex\textbackslash pythontex.py" \%.tex|\\
(3) pdflatex --shell-escape -synctex=1 -interaction=nonstopmode \%.tex|\\
(4) "C:/Program Files (x86)/Adobe/Acrobat 11.0/\\Acrobat/Acrobat.exe" \%.pdf
\end{quote}

La 1\iere{} ligne compile le document via PdfLaTeX (si vous souhaitez compiler via LuaLaTeX ou autre, il faut changer bien entendu).

La 2\ieme{} ligne exécute le fichier python \texttt{pythontex.py}; j'ai informé le chemin complet vers \texttt{python.exe} car malgré le fait qu'il soit dans mon PATH, il semble que mettre \og python \fg{} tout court ne suffise pas. Notez aussi la présence des guillemets car le chemin vers le fichier Python comporte une espace.

La 3\ieme{} ligne compile à nouveau le document (là aussi via pdfatex; il faut indiquer ici la même ligne que la première). Cette compilation est nécessaire pour prendre en compte les fichiers produits par le fichier python dans le répertoire courant.

Enfin, la 4\ieme{} ligne sert à afficher le pdf.

Sous Texmaker, j'ai personnellement mis cette succession de commandes en allant dans :
\begin{center}
\ttfamily
Utilisateur > Commandes utilisateur > Editer commandes utilisateur > Command 1 : PythonTex
\end{center}
Ainsi, je n'ai qu'à appuyer sur Alt + Shift + F1 pour lancer la compilation (vu que c'est occasionnel, cette combinaison est satisfaisante).

Bien entendu, si vous devez compiler tout le temps avec pythontex, autant définir cette succession de commandes dans la compil rapide:
\begin{center}
\ttfamily
Option > Configurer Texmaker > Command
\end{center}
puis entrer la succession de commandes dans le champ PdfLaTeX.
\end{enumerate}

\newpage

\section{Modules Python utilisés}

Avant de compiler via pythontex, assurez-vous d'avoir les modules Python nécessaires:

\begin{center}
\begin{longtable}{|c|c|}
\hline\rowcolor{gray!50}
Macros \LaTeX & Modules Python\\
\hline
\textbackslash binom & Aucun\\
\hline
\textbackslash binomial & Aucun\\
\hline
\textbackslash binomialcdf & Aucun\\
\hline
\textbackslash binomialcdftable & Aucun\\
\hline
\textbackslash factorial & Aucun\\
\hline
\textbackslash gcd & math\\
\hline
\textbackslash ifactors & Aucun\\
\hline
\textbackslash integ & scipy.integrate\\
\hline
\textbackslash intfluct & Aucun\\
\hline
\textbackslash simpfrac & math\\
\hline
\textbackslash simpsqrt & Aucun\\
\hline
\end{longtable}
\end{center}
\end{document}