Comment créér une macro TikZ avec paramètre et comment la placer dans une library personnelle ?

Par exemple voici une commande TikZ qui dessine le symbole d'une lentille convergente. Le paramètre est le rayon de la lentille ici défini par \def

Ouvrir dans l'éditeur Overleaf
\documentclass[]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[]
   \def\rayon{2cm}
   \draw[help lines] (-5,-\rayon-2cm) grid (5,\rayon+2cm);
   \draw[<->,>=stealth,line width=2pt] (0,-\rayon) -- (0,\rayon);
\end{tikzpicture}
\end{document}

Comment avoir une macro appelée lentille avec le rayon comme paramètre, et ensuite comment mettre cette macro dans une bibliothèque personnelle appelée disons optique qu'on puisse utiliser comme les bibliothèques ordinaires de TikZ par \usetikzlibrary{optique} ?

Posée 22 Aoû '20, 23:43

idefix's gravatar image

idefix
95594051
Taux d'acceptation : 14%

Modifiée 23 Aoû '20, 00:07


Dans le code suivant je définis une commande avec un argument obligatoire le rayon.

Ouvrir dans l'éditeur Overleaf
\documentclass[]{article}
\usepackage{tikz}
\begin{document}
\newcommand{\lentille}[1]{%
   \draw[help lines] (-5,-#1-2cm) grid (5,#1+2cm);
   \draw[<->,>=stealth,line width=2pt] (0,-#1) -- (0,#1);
}

\begin{tikzpicture}[]
  \lentille{3cm};
\end{tikzpicture}

\end{document}

La deuxième question me demande un peu de recherche.

Lien permanent

Publiée 23 Aoû '20, 10:07

Le%20TeXnicien%20de%20surface's gravatar image

Le TeXnicien de surface
2.0k814
Taux d'acceptation : 27%

1

Il existe déjà une librairie tikz destinée à l'optique avec un manuel en français : tikz-optics.

(23 Aoû '20, 10:29) Le TeXnicien de surface Le%20TeXnicien%20de%20surface's gravatar image
1

Une macro TikZ c'est donc en fait une macro latex qu'on ne peut utiliser que dans un environnement TiKZ ?

(23 Aoû '20, 12:54) idefix idefix's gravatar image

en quelque sorte

En regardant le code d'une des "librairies" de tikz on verra un moyen de déclarer des choses plus tikzienne comme des formes (shapes) mais ça devient un peu ésotérique.

(23 Aoû '20, 13:04) Le TeXnicien de surface Le%20TeXnicien%20de%20surface's gravatar image

On peut faire de la façon suivante (il y a surement mieux).

On place la macro LaTeX qui utilise les commandes TikZ dans un fichier pgflibraryoptique.code.tex. Le préfixe pgflibrary et le suffixe .code.tex semble obligatoire (c'est ce qui fait que le fichier est reconnu comme une bibliothèque tikz ?). optique est le nom que j'ai choisi pour la bibliothèque et que je dois alors utiliser pour l'appel.

Ouvrir dans l'éditeur Overleaf
\newcommand{\lentille}[1]{%
   \draw[help lines] (-5,-#1-2cm) grid (5,#1+2cm);
   \draw[<->,>=stealth,line width=2pt] (0,-#1) -- (0,#1);
}

Il faut ensuite placer ce fichier de bibliothèque TikZ dans un dossier où il sera trouvé par le compilateur LaTeX. Deux possibilités:

  1. Dans le même dossier que le fichier LaTeX qui utilise la bibliothèque (la recherche commence par ce dossier). Mais ce n'est pas une solution très flexible et il faut recopier le fichier de bibliothèque à chaque fois qu'on change de dossier pour le fichier teX qui utilise la bibliothèque.
  2. Dans une structure de répertoire TeX TDS (TeX Directory Structure) d'un dossier racine TEXMF (TEXMF Root Directory) personnel. Pour le TEXMF on crée un répertoire sur le disque d'un nom qu'on choisit librement. Avec MiKTeX, la console permet de désigner ce dossier comme un TEXMF personnel. Il sera alors placé par défaut avant les autres TEXMF de MiKTeX, et donc la recherche de la bibliothèque se fera dans notre TEXMF personnel avant ceux par défaut de MiKTeX. Il ne faut donc pas donner comme nom pour notre bibliothèque personnelle le nom d'une bibliothèque tikz déjà existante, car sinon notre bibliothèque masquera la bibliothèque de TiKZ.

Pour respecter la structure de répertoire TeX TDS, il suffit de respecter les noms des dossiers et sous-dossier préconisés dans le dossier TEXMF qu'on a créé.

https://miktex.org/kb/tdsQu'est ce que la TDS

Il faut au minimum le dossier TEXMF\tex\

Apparemment dès que le fichier de bibliothèque pgflibraryoptique.code.tex est copié dans TEXMF\tex cela fonctionne. Mais pour respecter davantage l'organisation de la TDS, j'ai copié le fichier pgflibraryoptique.code.tex dans TEXMF\tex\generic\pgf\libraries, ce qui correspond au dossier des bibliothèques TiKZ dans le TEXMF de MiKTeX d'après ce que j'ai vu.

Avec la console j'ai désigné le dossier D:\domin\Documents\MyTexMF\ comme étant mon TEXMF personnel :


Donc finalement j'ai placé mon fichier de bibliothèque personnel pgflibraryoptique.code.tex dans le dossier D:\domin\Documents\MyTexMF\tex\generic\pgf\libraries


Ceci étant fait la bibliothèque personnelle TikZ est disponible pour un appel avec la commande \usetikzlibrary{optique}

Ouvrir dans l'éditeur Overleaf
\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{optique}
\begin{document}
    \begin{tikzpicture}[]
      \lentille{1cm}
    \end{tikzpicture}
\end{document}

La macro utilisant des commandes TiKZ, elle n'est utilisable que dans un environnement TikZ. Si on avait mis l'environnement dans la macro, on pourrait utiliser directement la commande sans environnement TikZ.

alt text

Remarque : Le code ne marche pas dans Overleaf, puisque Overleaf ne connait pas cette bibliothèque personnelle.

Lien permanent

Publiée 23 Aoû '20, 16:37

idefix's gravatar image

idefix
95594051
Taux d'acceptation : 14%

Modifiée 23 Aoû '20, 18:26

Je suis intéressé par les alternatives plus tikzienne.

(23 Aoû '20, 17:52) idefix idefix's gravatar image

Vous pouvez vous assurer en ajoutant \usetikzlibrary{texniquefr} ;-)

(23 Aoû '20, 20:29) touhami touhami's gravatar image

Où trouve t'on cette library ?

(24 Aoû '20, 22:37) idefix idefix's gravatar image

@idefix a écrit : « Le préfixe pgflibrary et le suffixe .code.tex semble obligatoire (c'est ce qui fait que le fichier est reconnu comme une bibliothèque tikz ?) »

@touhami a écrit : « Vous pouvez vous assurer en ajoutant \usetikzlibrary{texniquefr} ;-) »

(24 Aoû '20, 22:58) touhami touhami'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.