Category Archive Python

table multiplication latex python

Créer une table de multiplication en LaTeX à l’aide de Python

Pour m’occuper, j’ai eu envie de créer une table de multiplication en LaTeX à l’aide de Python.

Vous allez me dire : “mais pourquoi pas la faire en \(\LaTeX\) directement ? Pourquoi passer par Python triple buse ? Question à laquelle je vous répondrai: “Pourquoi pas ?”

Une table de multiplication en LaTeX: plusieurs alternatives

multido et tabular ?

Effectivement, on peut tenter de construire notre table de multiplication directement en \(\LaTeX\), mais c’est bigrement compliqué… sauf si on souhaite taper un à un tous les résultats. Et moi, je en veux pas car je suis un gros flemmard.

Il faudrait faire appel à une boucle: Le package multido fait des boucles, mais dans un environnement tabular, ça devient problématique car la macro \multido.

Il existe bien la macro \Multido (avec une majuscule) qui fonctionne dans un environnement tabular, mais la documentation n’est pas loquace du tout sur celle-ci, et je n’ai trouvé aucun script qui pourrait m’aider… Bref, trop compliqué!

tikz ?

La solution graphique TiKZ est envisageable en effet, bien que lourde à mes yeux:

\documentclass{standalone}
\usepackage{amssymb}
\usepackage{tikz}

\newcommand{\tabmul}[1]{%
\begin{tikzpicture}
\fill[gray!20] (-0.5,0.5) rectangle (#1+0.5,-0.5);
\fill[gray!20] (-0.5,0.5) rectangle (0.5,-#1-0.5);
\pgfmathparse{-#1-0.5}\let\e\pgfmathresult
\foreach \y in {0.5,-0.5,...,\e}
{
	\draw (-0.5,\y) -- (#1+0.5,\y);
	\draw (-\y,0.5) -- (-\y,-#1-0.5);
}
\foreach\x in {1,2,...,#1}
{
	\node at (\x,0) {\textbf{\x}};
	\node at (0,-\x) {\textbf{\x}};
}
\node at (0,0) {$\times$};
\foreach\y in {1,2,...,#1}
{
	\foreach\x in {1,2,...,#1}
	{
		\pgfmathparse{int(\x*\y)}\let\r\pgfmathresult
		\node at (\x,-\y) {\r};
	}
}
\end{tikzpicture}%
}
\begin{document}
\tabmul{15}
\end{document}
table multiplication LaTeX TiKZ

Ouais, c’est vrai, c’est assez cool… La solution graphique offre un large éventail de personnalisation.

Une table de multiplication en LaTeX: à l’aide de Python

J’entends déjà (peut-être à juste titre) certain·e·s d’entre vous crier au scandale: générer un fichier \(\LaTeX\) via Python, c’est lourd, c’est pas direct, ça pue des pieds… Mouaich… Ben j’m’en fiche un peu au final… Si ça m’amuse et que ça ne fait de mal à personne, pourquoi pas ? En plus, ça donne l’occasion de manipuler le langage… Alors voici une solution:

def table(n,pdf=True):
    table = '\\documentclass{standalone}\n\\usepackage{amssymb}\n\\usepackage{xcolor}\n\\usepackage{colortbl}\n\\usepackage{cellspace}\n\\setlength{\\cellspacetoplimit}{3mm}\n\\setlength{\\cellspacebottomlimit}{3mm}\n\\begin{document}\n'
    T = [ [i*j for j in range(1,n+1) ] for i in range(1,n+1) ]
    table += '\\begin{tabular}{|>{\\columncolor{gray!20}}Sc|*{'+str(n)+'}{Sc|}}\n\\rowcolor{gray!20}\n\\hline\n$\\times$ '
    for i in range(1,n+1):
        table += '& ' + str(i)
    table += '\\\\\n\\hline\n'
    for j in range(1,n+1):
        table += str(j)
        for i in range(1,n+1):
            table += ' & ' + str(T[i-1][j-1])
        table += '\\\\\n\\hline\n'
    table += '\\end{tabular}\n\\end{document}'
    
    Fichier = open('table.tex', 'w' , encoding='utf8')
    Fichier.write( table )
    Fichier.close()
    
    if pdf:
        from os import system
        system("pdflatex table.tex")
        system("START table.pdf")
>>> table(10,True)
table multiplication LaTeX python

L’argument “True” passé dans la fonction table sert uniquement à lancer la compilation via PdfLaTeX directement. Par défaut, il vaut False; dans ce cas, seul le fichier \(\LaTeX\) est créé.

Dans cet article déjà, je vous exposais une manière de construire le triangle de Pascal à l’aide de PythonTeX… D’ailleurs, plutôt que de faire un script Python, on pourrait en effet tout mettre dans le fichier \(\LaTeX\) (ça plaira sûrement à quelques personnes).

\documentclass{standalone}
\usepackage{amssymb}
\usepackage{xcolor}
\usepackage{colortbl}
\usepackage{cellspace}
\setlength{\cellspacetoplimit}{3mm}
\setlength{\cellspacebottomlimit}{3mm}
\usepackage{pythontex}

\begin{pycode}
def table(n,pdf=True):
    T = [ [i*j for j in range(1,n+1) ] for i in range(1,n+1) ]
    table = '\\begin{tabular}{|>{\\columncolor{gray!20}}Sc|*{'+str(n)+'}{Sc|}}\n\\rowcolor{gray!20}\n\\hline\n$\\times$ '
    for i in range(1,n+1):
        table += '& ' + str(i)
    table += '\\\\\n\\hline\n'
    for j in range(1,n+1):
        table += str(j)
        for i in range(1,n+1):
            table += ' & ' + str(T[i-1][j-1])
        table += '\\\\\n\\hline\n'
    table += '\\end{tabular}'
    
    return table
\end{pycode}

\begin{document}
\begin{pycode}
print(table(10))
\end{pycode}
\end{document}

Attention: si vous utilisez PythonTeX, la chaîne de compilation est différente. Personnellement, j’utilise la chaîne suivante sur TexMaker sous Windows 10 (Menu : Utilisateur > Commandes Utilisateur > Éditer Commandes Utilisateur):

pdflatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex|C:\Users\Stephane\AppData\Local\Programs\Python\Python38-32\python.exe "C:\Users\Stephane\AppData\Local\Programs\MiKTeX 2.9\scripts\pythontex\pythontex.py" %.tex|pdflatex --shell-escape -synctex=1 -interaction=nonstopmode %.tex|"C:/Program Files (x86)/Adobe/Acrobat 11.0/Acrobat/Acrobat.exe" %.pdf
ppcm python

Calculer le PPCM de plusieurs nombres avec Python

Calculer le PPCM de plusieurs nombres avec Python peut paraître simple au premier abord, mais tout dépend du cahier des charges…

convertir encodage python

Convertir à la volée l’encodage des fichiers avec Python

Il y a encore quelques années, j’étais un petit con qui écrivait ses codes en ISO… Cela me suffisait. Mais voilà! Entre temps, j’ai été contaminé par le virus UTF-8. Alors du coup, quand il m’arrive de reprendre de très vieux fichiers, il faut que je les convertisse en UTF-8. Et quand il y a tout un répertoire, autant dire que je n’ai pas du tout envie de m’y coller manuellement.

trinomes second degré python poo

Trinôme du second degré et Python

Nous allons aborder ici la notion de trinôme du second degré en Python sous un angle POO (Programmation Orientée Objet). J’avais en effet envie de construire une classe Python représentant un tel trinôme et pouvant effectuer toutes les opérations classiques du lycée.

ensembles python set

Ensembles et Python

Dans les programmes scolaires français du lycée, il est question d’ensembles dès la classe de Seconde, et il est question de Python. On a l’habitude de représenter les ensembles par des listes ou des dictionnaires, mais il existe un autre type pouvant être utile : le type set.

Probabilités et Python au lycée: loi binomiale et variables aléatoires

J’ai pu constaté ces derniers temps que les outils pour les probabilités en Python au lycée (loi binomiale et variables aléatoires) ne sont pas très pratiques à utiliser.

Les statistiques du site

Oui, je sais, je n’écris plus très souvent… Et c’est bien dommage ! Mais j’ai depuis quelques mois des préoccupations qui me prennent si ce n’est la tête, du temps…

Pour combler ce vide, je vais vous parler à nouveau des statistiques de mathweb.fr.

spirale carrés tikz python

Spirale et carrés, TiKZ et Python

Spirale et carrés, TiKZ et Python : il y a peu de temps, j’ai eu à construire une spirale inscrite dans une suite de carrés, avec TiKZ et à l’aide de Python :

Spirale et carrés, TiKZ et Python

Ceci était pour illustrer la somme des termes d’une suite géométrique.

crible ératosthène Python

Le crible d’Ératosthène en Python

Le crible d’Ératosthène en Python n’est pas très long à implémenter. Il existe sans doute plusieurs façons de voir les choses; je vais vous en présenter une.

crible ératosthène Python
Ératosthène (image de Wikipedia)
fréquence lettres langue française python

Calculer la fréquence des lettres dans la langue française avec Python

Calculer la fréquence des lettres dans la langue française avec Python peut s’avérer compliqué si on ne sait pas par où commencer.

Nous allons voir dans cet article comment procéder à partir d’un fichier texte contenant tous les mots de la langue française.