Description du problème : pour mes besoins, j'ai créé plusieurs macros personnelles.

Elles sont définies, à l'aide de \newcommand et notamment des packages TikZ et xkeyval, entre \makeatletter et \makeatother puisque j'utilise des @ dans les noms des options : tout ceci est placé avant le \begin{document} et fonctionne correctement.

Pour l'instant, je suis obligé de copier-coller dans chaque nouveau document-source ces centaines de lignes pour avoir accès aux nouvelles commandes.

Comment créer un fichier TOTO.sty (qui contiendra mes cinq macros) ou, mieux, comment créer un nouveau package TOTO qui sera appelé classiquement par un \usepackage{TOTO} ?

J'ai consulté les pdf dtstut-fr de Scott Pakin, glsguide, doc-fr_ecran... Mais mes nombreux essais dans TeXmaker produisent inévitablement des erreurs de compilation que je ne comprends pas. Je n'arrive donc pas à créer les divers fichiers TOTO.dtx, TOTO.ins, TOTO.sty nécessaires.

Existe-t-il un tuto vidéo qui explique pas à pas la création d'une nouvelle extension ou un exemple concret de ce type de création ?

Posée 16 Avr '20, 15:51

pdesmons's gravatar image

pdesmons
294917
Taux d'acceptation : 40%

Modifiée 16 Avr '20, 16:40

Pathe's gravatar image

Pathe ♦♦
7.5k42203251

Attention ! Les contre-obliques (\) saisies telles quelles dans les contributions ne sont visibles que si elles sont insérées en tant que ⟨code⟩. Pour insérer du ⟨code⟩, notamment des commandes LaTeX, cf. la FAQ Comment mettre en forme ma contribution ?. Merci de corriger votre contribution si cela n'a pas déjà été fait.

(16 Avr '20, 16:18) denis ♦♦ denis's gravatar image

Pour créer une nouvelle extension, je suggère de commencer avec une simple extension existante, par exemple https://ctan.org/tex-archive/graphics/pgf/contrib/jigsaw

L’approche la plus simple est d’avoir un fichier pour votre code et une autre fichier pour la documentation.

Pour le code: monextension.sty

Ouvrir dans l'éditeur Overleaf
\ProvidesPackage{monextension}
 [2020/16/04 v1 Description de mon extension]

\RequirePackage{tikz}

\newcommand{\f@o}{foo bar foo}

Vous n'avez pas besoin de \makeatletter ou \makeatother dans le fichier .sty

Si vous voulez avoir votre extension sur CTAN vous avez aussi besoin d'une documentation et un README. La documentation peut être une simple document en latex. Le fichier README devrait avoir une description de votre extension et dire quelle est la licence

Lien permanent

Publiée 16 Avr '20, 17:26

samcarter's gravatar image

samcarter
8.4k2817
Taux d'acceptation : 56%

Modifiée 16 Avr '20, 17:27

Il est effectivement toujours possible de créer un package mais, dans votre cas, ça ne me semble pas nécessaire : l'intérêt d'un package par rapport à un fichier de macros est surtout de pouvoir lui passer des options.

Quant à la fonctionnalité évitant de « copier-coller dans chaque nouveau document-source ces centaines de lignes pour avoir accès aux nouvelles commandes », elle peut tout à fait être obtenue en stockant ces lignes dans un fichier, disons mes-macros.tex pouvant être importé au moyen de la commande \input. Bien sûr, cela n'a d'intérêt que si on peut s'épargner :

  1. la copie du fichier mes-macros.tex dans les dossiers de chacun des .tex où on souhaite l'importer (si une macro doit être modifiée ou ajoutée, c'est alors à faire dans chacune des copies de mes-macros.tex) ;
  2. (pour éviter ce qui précède) le chemin (absolu ou relatif) menant à une unique version de mes-macros.tex (si mes-macros.tex est dépalcé, il faut actualiser le chemin dans chacun des .tex qui l'importe).

Pour ce faire, je vous renvoie à la question « Préambule : fichier unique ».

Lien permanent

Publiée 16 Avr '20, 16:33

denis's gravatar image

denis ♦♦
7.3k1510
Taux d'acceptation : 53%

Modifiée 16 Avr '20, 22:37

Je reste convaincu que la création d'un nouveau package est la meilleure solution. En effet, je ne veux pas devoir modifier 36 fichiers à chaque nouvelle idée. De plus, j'ai déjà publié sur le forum une partie de mes macros pour résoudre divers problèmes et plusieurs utilisateurs m'avaient sollicité pour que mon travail aboutisse justement au dépôt sur la CTAN d'une extension dédiée afin de pouvoir partager mes idées.

(16 Avr '20, 16:45) pdesmons pdesmons's gravatar image
1

Vous pouvez mettre le fichier mes-macros.tex dans le dossier ~/texmf (ou ce que kpsewhich -var-value=TEXMFHOME dit) et tous les documents peuvent l'importer

(16 Avr '20, 16:53) samcarter samcarter's gravatar image
1

Vous n'avez pas besoin de modifier 36 fichiers à chaque nouvelle idée. Vous pouvez avoir un fichier .tex qui est utiliser par tous vos documents.

(16 Avr '20, 16:57) samcarter samcarter's gravatar image
1

@pdesmons Attention ! Cette réponse était un commentaire plutôt qu'une réponse et a été convertie comme tel.

(16 Avr '20, 17:36) denis ♦♦ denis's gravatar image
1

@pdesmons Comme précisé dans ma réponse et comme répété par @samcarter, la solution que je vous propose vous permet justement d'éviter d'avoir à « devoir modifier 36 fichiers à chaque nouvelle idée ». Vous pouvez bien sûr néanmoins préférer créer un package toto.sty (capitales à éviter) et, si vous le placez dans votre TEXMFHOME comme indiqué dans la question en lien en fin de ma solution, vous pourrez le charger au moyen de \usepackage{toto}. Pour créer un fichier .dtx, vous pouvez lire les posts de Joseph Wright publiés les 5, 6 et 11 oct. 2009.

(16 Avr '20, 17:45) denis ♦♦ denis's gravatar image

J'arrive avec un chemin relatif à importer via input mon fichier macro lorsqu'il est placé dans le même répertoire que le fichier source. Mais cela ne fonctionne pas avec un chemin absolu pour deux fichiers (source et macro) placés dans des dossiers différents. Peut-être que je ne sais pas saisir un tel chemin. A quoi ressemble un chemin absolu ?

(16 Avr '20, 18:39) pdesmons pdesmons's gravatar image

Évitez d'indiquer le chemin de votre fichier de macros : cf. le point 2 dans ma réponse. Mettez votre fichier dans votre TEXMFHOME (à créer au besoin) et vous pourrez en faire un \input ou (si fichier .sty) un \usepackage sans chemin à préciser.

(16 Avr '20, 22:40) denis ♦♦ denis's gravatar image
Affichage de 5 parmi 7 Afficher 2 commentaire(s) en plus
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.