#1 Le 04/02/2024, à 09:18
- DonutMan75
Scripter la création d'un pdf ?
Bonjour à tous et toutes,
je cherche à créer une roue de Jules César, comme vous pouvez en voir un exemple ici :
J'aimerais scripter la génération de cette roue.
Donc en gros un script qui génère un pdf avec par exemple :
- 3 cercles concentriques
- les 26 lettres de l'alphabet dans l'anneau du haut, avec un angle de rotation adapté
- ces mêmes 26 lettres dans l'anneau du bas, avec un angle de rotation adapté
J'ai conscience que 26 lettres ce n'est pas non plus la mer à boire à faire manuellement mais je me suis dit que l'exercice pouvait être amusant...
Je n'ai pas une vision très complète des différentes solutions qui me permettraient de faire cette tâche et j'aimerais partir sur la plus simple / la plus élégante...
Pour l'instant, je vois cela :
Le combo LateX/TikZ : parfaitement adapté pour écrire du texte "tourné" le long d'un cercle mais... les boucles for sur une liste de caractères ('A', 'B', 'C' etc...) n'est pas spécialement simple
Piloter la création d'un fichier .tex via bash ou python : la logique de la boucle for passe dans bash ou python et on compile ensuite le code latex, mais je trouve qu'on ajoute un niveau intermédiaire
Apparemment, il semble possible de scripter Inkscape : c'est une solution tierce, je ne sais pas si ça fonctionne bien
Sans doute que sed/awk peuvent faire des merveilles, mais là encore l'idée est de générer un fichier .tex qu'on compile ensuite. Et je ne connais pas bien awk
Qu'en pensez-vous ? Y-a-t'il une solution simple et élégante à laquelle je n'aurais pas pensé ? Un logiciel adapté pour ce genre de taches ?
Je ne souhaite pas un code fonctionnel mais juste avoir un retour d'expérience "macroscopique" de la communauté
Merci par avance et bon dimanche !
Donut
Hors ligne
#2 Le 04/02/2024, à 11:12
- sputnick
Re : Scripter la création d'un pdf ?
Salut,
j'ai fait fumer ChatGPT. Après corrections par lui même à ma demande, voici ce qu'il m'a pondu:
http://pastie.org/p/2GbHPERgpzuBJq9RqgjpOI
Enjoy!
Edit:
cat>roue.tex; pdflatex roue.tex && xdg-open roue.pdf
Dernière modification par sputnick (Le 04/02/2024, à 11:23)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 04/02/2024, à 14:11
- DonutMan75
Re : Scripter la création d'un pdf ?
Impressionnant !
Merci pour la démarche,
je vais dépatouiller ça !
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=0.5]
% Style for the sector
\tikzset{sector style/.style={draw,thick}}
% Function to create a single sector
\newcommand{\sector}[6]{
% Calculate start and end angles
\pgfmathsetmacro{\startangle}{#1}
\pgfmathsetmacro{\endangle}{#2}
% Draw the sector itself
\draw[sector style] (\startangle:#3) arc (\startangle:\endangle:#3) -- (\endangle:#4) arc (\endangle:\startangle:#4) -- cycle;
% Place the letter
\node at ({(\startangle+\endangle)/2}:#5) {#6};
}
% Outer circle sectors
\foreach \letter [count=\i from 0] in {A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z} {
\sector{-\i*360/26}{-(\i+1)*360/26}{4.5cm}{3.75cm}{4.125cm}{\letter}
}
% Middle circle sectors
\foreach \letter [count=\i from 0] in {A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z} {
\sector{-\i*360/26}{-(\i+1)*360/26}{3cm}{2.25cm}{2.625cm}{\letter}
}
% Inner circle sectors
\foreach \letter [count=\i from 0] in {A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z} {
\sector{-\i*360/26}{-(\i+1)*360/26}{1.5cm}{0.75cm}{1.125cm}{\letter}
}
% Add the arrows
\draw [->, >=latex, thick] ([shift={(60:4.5cm)}]0,0) arc (60:120:4.5cm);
\draw [->, >=latex, thick] ([shift={(240:1.5cm)}]0,0) arc (240:300:1.5cm);
% Add the plus sign in the center
\draw [thick] (-0.2cm,0) -- (0.2cm,0);
\draw [thick] (0,-0.2cm) -- (0,0.2cm);
\end{tikzpicture}
\end{document}
D.
Hors ligne