\documentclass{standalone}
\usepackage{circuitikz}

% Déclaration d'un bipôle circulaire avec G au centre
\pgfcircdeclarebipole{}{}{generatorG}{\ctikzvalof{bipoles/length}}{%
    % Dessin du cercle
    \pgfpathcircle{\pgfpoint{0}{0}}{.4\pgf@circ@res@up}
    \pgfusepath{draw}
    % Lettre G
    \pgftext{\normalsize\bfseries G}
}

\begin{document}
    \begin{circuitikz}
        \draw (0,0) to[generatorG,l=Générateur] (3,0);
    \end{circuitikz}
\end{document}

J'essaye de définir un dipôle pour circuitikz avec \pgfcircdeclarebipole. Mais circuitikz ne le reconnaît pas. J'ai un version récente de circuitikz (1.8.2) : celle de la TeX Live 2025.

! Package pgfkeys Error: I do not know the key '/tikz/generatorG' and I am going to ignore it. Perhaps you misspelled it.

Posée 20 Oct, 00:21

idefix's gravatar image

idefix
1.1k174452
Taux d'acceptation : 12%

Modifiée 20 Oct, 08:24

Pathe's gravatar image

Pathe ♦♦
7.8k68218265

Où avez-vous trouvé la syntaxe de \pgfcircdeclarebipole{} ? Je ne l'ai trouvée citée qu'une fois dans la doc de circuitikz, et nulle part dans celle de TikZ.

(22 Oct, 22:19) joseph-tux joseph-tux's gravatar image

J'ai regardé la doc de circuitikz et les fichiers pgfcircbipoles.tex et pgfcirc.defines.tex dans C:\texlive\2025\texmf-dist\tex\generic\circuitikz (une copie pour ne pas les altérer)

Ce que j'imagine c'est que la forme (the shape) est bien définie (pas d'erreur générée) mais qu'elle n'est pas enregistrée dans l'espace de nom de circuitikz alors que je pensais que le declare faisait cela

J'ai essayé \ctikzset{bipole/generatorG/shape=generatorG} ça ne fonctionne pas.

(24 Oct, 12:22) idefix idefix's gravatar image

Je n'ai pas la solution complète (notamment en matière de dimensions), mais je pense avoir une bonne base fonctionnelle. La documentation hélas est assez pauvre, et indique spécifiquement que c'est réservé aux hackers TeX au début du chapitre 9.

Primo, je ne vois pas la commande \pgfcircdeclarebipole dans le code fourni dans la documentation (dans une version récente de celle-ci), mais \pgfcircdeclarebipoleshape. Il subsiste toutefois une trace de \pgfcircdeclarebipole en page 256 du manuel (version actuelle), je vais poser une issue sur le dépôt GitHub à ce sujet. Tout porte à croire que le nom a changé car sur https://github.com/circuitikz/circuitikz/issues/183 (datant de 2019), l'auteur renvoie vers un extrait du manuel (https://github.com/circuitikz/circuitikz/files/3077675/howtonewcomponent.pdf) où cette fois-ci la commande de création du composant se faisait avec \pgfcircdeclarebipole (sans shape dans le nom, donc).

Deuxio, l'ancienne commande \pgfcircdeclarebipole prenait 6 arguments, la version actuelle \pgfcircdeclarebipoleshape prend 7 arguments, et dans votre code, votre \pgfcircdeclarebipole ne prend que 5 arguments, ce qui pose forcément problème.

Tertio, votre code (et le code d'exemple du manuel) comporte une commande avec @ dans le nom (spécifiquement \pgf@circ@res@up). Il faut donc englober le tout dans un \makeatletter ... \makeatother.

Enfin, le manuel (mais c'est un peu caché, je l'admets, indique qu'il faut activer le nom du nouveau composant avec (pour l'exemple du manuel) : \pgfcirc@activate@bipole@simple{l}{viscoe}.

C'est ce dernier code (toujours à entourer de \makeatletter ... \makeatother) qui permet d'éviter de se retrouver avec : I do not know the key '/tikz/generatorG'.

Voici donc un code adapté (et limité : les dimensions notamment sont à adapter selon votre usage pour obtenir quelque chose de valide, ici le G est bien trop grand et couvre le cercle, à peine visible. Et les lignes ne sont pas connectés, ce qui n'est pas très utile dans le cadre d'un circuit électrique. Mais la « base » est fonctionnelle. J'ai conservé le nom mechanicals pour le premier argument de la commande \pgfcircdeclarebipoleshape, ce qui est totalement loufoque, évidemment (le dipole n'a rien de mécanique).

\documentclass{standalone}
\usepackage{circuitikz}

\makeatletter
% Déclaration d'un bipôle circulaire avec G au centre
\pgfcircdeclarebipolescaled{mechanicals}
{}                                   % extra anchors
{\ctikzvalof{bipoles/damper/height}} % depth (under the path line)
{generatorG}                             % name
{\ctikzvalof{bipoles/damper/height}} % height (above the path line)
{\ctikzvalof{bipoles/damper/width}} % width
{
    % Dessin du cercle
    \pgfpathcircle{\pgfpoint{0}{0}}{1.15\pgf@circ@res@up}
    \pgfusepath{draw}
    % Lettre G
    \pgftext{\normalsize\bfseries G}
}
\pgfcirc@activate@bipole@simple{l}{generatorG}
\makeatother

\begin{document}
    \begin{circuitikz}
        \draw (0,0) to[generatorG,l=Générateur] (3,0);
    \end{circuitikz}
\end{document}

J'aurais volontiers joint le fichier d'image correspondant à la sortie (il est toujours agréable d'avoir une illustration) mais je suis accueilli par :

Error uploading file. Please contact the site administrator. Thank you. 'ascii' codec can't encode characters in position 42-43: ordinal not in range(128).

(pour un fichier PNG de moins de 40 ko).

Edit : finalement, le moteur de génération du PDF intégré au site peut remplacer l'image jointe, donc ce n'est pas si gênant.

Edit 2 : j'ai finalement une version plus propre au niveau des dimensions.

J'ai aussi choisi de tracer le trait du cercle avec l'épaisseur qui est celle du dipole esource (voir page 78 du manuel actuel). Supprimez la ligne \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth} si vous préférez un tracé plus fin.

\documentclass{standalone}
\usepackage{circuitikz}

\makeatletter
% Déclaration d'un bipôle circulaire avec G au centre
\pgfcircdeclarebipolescaled{sources}
{}                                   % extra anchors
{\ctikzvalof{bipoles/esource/height}} % depth (under the path line)
{generatorG}                             % name
{\ctikzvalof{bipoles/esource/height}} % height (above the path line)
{\ctikzvalof{bipoles/esource/width}} % width
{
    % Dessin du cercle
    \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
    \pgfpathcircle{\pgfpoint{0}{0}}{\pgf@circ@res@up}
    \pgfusepath{draw}
    % Lettre G
    \pgftext{\normalsize\bfseries G}
}
\pgfcirc@activate@bipole@simple{l}{generatorG}
\makeatother

\begin{document}
    \begin{circuitikz}
        \draw (0,0) to[generatorG,l=Générateur] (3,0);
    \end{circuitikz}
\end{document}
Lien permanent

Publiée 25 Nov, 21:38

quark67's gravatar image

quark67
2946
Taux d'acceptation : 62%

Modifiée 26 Nov, 21:45

je ne vois pas la commande pgfcircdeclarebipole dans le code fourni dans la documentation (dans une version récente de celle-ci), mais pgfcircdeclarebipoleshape

shape ajouté au nom du composant est la façon d'utiliser un composant de type chemin (path-style components) comme un composant de type noeud (node-style components)

paragraphe 3.1 page 34 (doc)

Most path-style components can be used as a node-style components; to access them, you add a shape to the main name of component (for example, diodeshape). Such a “node-shape name” is specified in the description of each component.

(02 Déc, 21:04) idefix idefix's gravatar image

Là je cherche à créer un dipôle que je peux utiliser en mode chemin (avec to[#1=#2, options] entre deux noeuds) avec #1 nom du composant et #2 label (optionnel) et options une liste d'options

draw (0,0) to[generatorG,l=Générateur] (3,0);

Donc à priori il vaudrait mieux éviter le nom du composant qui termine par shape. Mais j'avoues n'être sur de rien.

Comme vous utilisez \pgfdecalrebipolescaled et non pas \pgfdeclarebipoleshape( \pgfcircdeclarebipolescaled{mechanicals}), cela reste cohérent avec cette idée (pas de shape à la fin du nom)

(02 Déc, 21:35) idefix idefix's gravatar image

@idefix L'auteur du package a confirmé qu'il y avait un bug dans le manuel avec l'oubli du nom "scaled" (la commande sans "scaled" existait auparavant mais il a changé le nom de la commande entre-temps). Voir https://github.com/circuitikz/circuitikz/issues/891. Pour le "shape" c'est lié aux nœuds il me semble.

(03 Déc, 21:51) quark67 quark67's gravatar image
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.