Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/02/2024, à 10: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 :

Roue de codage Jules César

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é smile


Merci par avance et bon dimanche !

Donut

Hors ligne

#2 Le 04/02/2024, à 12: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, à 12:23)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 04/02/2024, à 15: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