Insérer le nom de fichier et de répertoire dans le fichier de sortie

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux membres inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 48
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par BenLar »

Bonjour,

Dans le préambule de mon document .tex (pour toutes mes fiches d'exercices), j'insère le code

Code : Tout sélectionner

\pagestyle{fancy}
\lhead{
	\textbf{
		Nombres et calculs
		\ding{43}
		\begin{large}
		Nombres relatifs
		\end{large}
		\ding{43}
		\begin{Large}
		Addition de nombres relatifs
		\end{Large}
	}
}
Nombres et calculs est un répertoire
Nombres relatifs est un sous répertoire
Addition de nombres relatifs est le nom du fichier

J'aimerais automatiser cela mais je ne sais pas comment faire. Pour l'instant, j'ai peu de pistes.

Pourriez-vous m'aider ?

D'avance, je vous en remercie.

Benoit
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2720
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par gigiair »

La question n'est pas très claire, les noms de répertoires sont-ils à déterminer automatiquement (sur quels critères) ou fixés par toi-meme ?
Le nom du fichier est-il le nom du fichier source en cours d'édition ? Si oui, c'est \\jobname, ou \\jobname.tex pour le nom complet.
Pour obtenir automatiquement le nom du répertoire courant, on peut faire appel au package currfile-abspath mais dans ce cas, la compilation doit être lancée avec l'option -recorder (voir texdoc currfile-abspath)

Voici un ECM que j'ai piqué sur tex.stackexchange.com et adapté pour être compilé avec AUCTeX
(il faut modifier la commande de compilation pour qu'elle inclut -recorder)

Code : Tout sélectionner

% -*- TeX-command-extra-options: "-recorder" -*-
% Compile with: (pdf|xe|lua|)latex -recorder filename
% Needs two runs with MiKTeX, one with TeX Live
\documentclass{article}

\usepackage{currfile-abspath}

\getmainfile % get real main file (can be different than jobname in some cases)
\getabspath{\themainfile} % or use \jobname.tex instead (not as safe)
\let\mainabsdir\theabsdir % save result away (macro will be overwritten by the next \getabspath
\let\mainabspath\theabspath % save result away (macro will be overwritten by the next \getabspath

\begin{document}

Absolute directory: \mainabsdir

Absolute path: \mainabspath

\end{document}
JJR.
LaTeXien migrateur.
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 48
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par BenLar »

Merci pour le retour.J'étais justement entrain de creuser du côté de currfile mais sans grand succès.

Je voudrais récupérer automatiquement le nom du fichier que j'édite (ici Addition de nombres relatifs.tex), le répertoire ou il se trouve ainsi que le répertoire parent.

Voilà la totalité du chemin
/mnt/3C00B85900B81BB8/Utilisateurs/Benoit/Mega/Cours/Collège/Exercices/Nombres et calculs/Nombres relatifs/Additions de nombres relatifs.tex

Pour l'instant, avec currfile, j'ai juste récupéré le nom du fichier (entre " " ce qui me dérange).

Je regarde ce que tu proposes.
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 48
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par BenLar »

Dans les logs, j'ai le message "The required recorder file (.fls) was not found".

Dans la configuration de Texmaker à la ligne de xelatex avec lequel je compile, j'ai pourtant rajouté -recorder (xelatex -synctex=1 -interaction=nonstopmode -recorder %.tex)

Qu'est-ce qui m'échappe ?
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2720
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par gigiair »

Le fichier .fls n'a pas été généré car la compilation n'a pas été lancée avec l'option -recorder.
si tu fais un

Code : Tout sélectionner

ls -l *.fls
tu dois voir apparaître un fichier du nom de ton fichier source avec l'extension .fls

Je ne sais pas trop comment ça peut se faire pour que TeXmaker fasse ça tout seul. Dans Emacs, il suffit de donner à la variable TeX-command-extra-options la valeur "-recorder", et ça agit pour tous les moteurs de compilation.

Dans TeXMaker, je modifierai la ligne de commande dans la configuration comme dans TeXStudio options/Compilation pour que la commande que tu utilises inclut -recoder, c'est comme pour configurer -shell-escape, mais c'est -recorder qu'il faut ajouter.
Cette commande est sans danger pour la sécurité, elle ne fait que créer un fichier où sont recensés tous les appels au système de fichier. Pour pdflatex, elle devrait être (sans aucune garantie)

Code : Tout sélectionner

pdflatex -recorder -synctex=1 -interaction=nonstopmode %.tex
et pareil pour les autres moteurs TeX.
J'ai testé avec un fichier sous /tmp que voici :

Code : Tout sélectionner

% -*- TeX-command-extra-options: "-recorder" -*- (AUCTeX/Emacs users)
\documentclass{article}

\usepackage{currfile-abspath}

\begin{document}

\getmainfile % get real main file (can be different than jobname in some cases)
\getabspath{\themainfile} % or use \jobname.tex instead (not as safe)
\let\mainabsdir\theabsdir % save result away (macro will be overwritten by the next \getabspath
\let\mainabspath\theabspath % save result away (macro will be overwritten by the next \getabspath

file:  \themainfile{}

Absolute directory: \mainabsdir

Absolute path: \mainabspath
\end{document}
Il faut ensuite manipuler les variable renvoyées pour extraire ce dont tu as besoin avec des commandes TeX.
Je laisse à d'autres le plaisir de faire ça, je suis une bique en TeX.
JJR.
LaTeXien migrateur.
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 48
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par BenLar »

Après la remarque de gigiair, l'option -recover passe avec pdflatex mais pas avec xelatex !?
J'ai donc pu compiler l'exemple même si je comprends pas tout.
A lire la doc de currfile (mais mon anglais n'est pas suffisamment bon), j'avais l'impression qu'avec l'option parent (5) / parents (6) et les commandes qui vont avec, il y avait moyen de récupérer les répertoires parents n-1, n-2,... mais je n'arrive pas à les utiliser ou j'ai pas compris.
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2720
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par gigiair »

BenLar a écrit : lundi 15 août 2022, 17:41 Après la remarque de gigiair, l'option -recover passe avec pdflatex mais pas avec xelatex !?
Il n'y a aucune raison que ça ne passe pas avec xelatex. Il faut juste configurer pour que la compilation xelatex se fasse avec l'option -recover. Pour Emacs, il n'y a qu'une valeur à changer qui est valable pour tous les moteurs, pour TeXStudio et sans doute bien d'autres outils, il faut modifier les lignes de commandes de chaque moteur (luatex, pdftex, xetex...). La façon de faire est dans la documentation de l'outil, vraisemblablement.
Dans la documentation, il est question de fichiers parents, c'est à dire de fichiers contenant un \\input ou un \\include du fichier fiston. Ce qui permet au fiston de savoir qui l'a appelé, mais je ne pense pas que ça puisse être utile pour ton problème, ou alors je ne l'ai pas bien compris.
JJR.
LaTeXien migrateur.
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 48
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par BenLar »

Je commence à obtenir quelque chose de correct

Code : Tout sélectionner

% -*- TeX-command-extra-options: "-recorder" -*-
% Compile with: (pdf|xe|lua|)latex -recorder filename
% Needs two runs with MiKTeX, one with TeX Live
\documentclass{article}

\usepackage[abspath]{currfile}
\usepackage{xstring}
\usepackage{pifont}
\usepackage{fancyhdr}

\getabspath{\themainfile} % or use \jobname.tex instead (not as safe)
\let\mainabspath\theabspath % save result away (macro will be overwritten by the next \getabspath

\StrCount{\mainabspath}{/}[\NbS]
\StrBetween[10,\NbS]{\mainabspath}{/}{/}[\rep]
\StrBetween[9,10]{\mainabspath}{/}{/}[\repp]

\pagestyle{fancy}

\lhead{
	\begin{textbf}
		\repp \;
		\ding{43}
		\begin{large}
			\rep
		\end{large} \;
		\ding{43}
		\begin{Large}
			\currfilebase
		\end{Large}
	\end{textbf}
}

\begin{document}
Blabla
\end{document}
Il resterait à remplacer 10 par le résultat de \NbS-1 et 9 par le résultat de \NbS -2.

Comment je peux faire ?
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 48
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par BenLar »

J'ai aussi un problème avec les accents dans le nom du fichiers qui n'apparaissent pas comme ce qu'il devrait être.
Pièces jointes
image.png
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2720
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par gigiair »

BenLar a écrit : mardi 16 août 2022, 14:31 Je commence à obtenir quelque chose de correct

Code : Tout sélectionner

% -*- TeX-command-extra-options: "-recorder" -*-
% Compile with: (pdf|xe|lua|)latex -recorder filename
% Needs two runs with MiKTeX, one with TeX Live
\documentclass{article}

\usepackage[abspath]{currfile}
\usepackage{xstring}
\usepackage{pifont}
\usepackage{fancyhdr}

\getabspath{\themainfile} % or use \jobname.tex instead (not as safe)
\let\mainabspath\theabspath % save result away (macro will be overwritten by the next \getabspath

\StrCount{\mainabspath}{/}[\NbS]
\StrBetween[10,\NbS]{\mainabspath}{/}{/}[\rep]
\StrBetween[9,10]{\mainabspath}{/}{/}[\repp]

\pagestyle{fancy}

\lhead{
	\begin{textbf}
		\repp \;
		\ding{43}
		\begin{large}
			\rep
		\end{large} \;
		\ding{43}
		\begin{Large}
			\currfilebase
		\end{Large}
	\end{textbf}
}

\begin{document}
Blabla
\end{document}
Il resterait à remplacer 10 par le résultat de \NbS-1 et 9 par le résultat de \NbS -2.

Comment je peux faire ?
J'utilserai bêtement des compteurs

Code : Tout sélectionner

\newcounter{extrm}
\setcounter{extrm}{\NbS}
\newcounter{orig}
\setcounter{orig}{\NbS}
\addtocounter{orig}{-1}
\StrBetween[\value{orig},\value{extrm}]{\mainabspath}{/}{/}[\rep]
\addtocounter{extrm}{-1}
\addtocounter{orig}{-1}
\StrBetween[\value{orig},\value{extrm}]{\mainabspath}{/}{/}[\repp]
AMHA il faut un minimum de contrôles pour vérifier l'existence des chaînes visées et éviter les erreurs intempestives.

C'est vraiment donner des bâtons pour se faire battre que d'utiliser des caractères accentués dans les noms de fichier. À travers le monde on met des gens en prison pour des choses infiniment moins graves que ça. Ce qui t'arrives est une punition largement méritée :twisted:, mais comme je suis la bonté même, je pardonne, et je m'en sens coupable.
Avec une compilation en xelatex, ça devrait le faire, mais c'est plus lent...
JJR.
LaTeXien migrateur.
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2720
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par gigiair »

BenLar a écrit : mardi 16 août 2022, 14:31 Je commence à obtenir quelque chose de correct

Code : Tout sélectionner

% -*- TeX-command-extra-options: "-recorder" -*-
% Compile with: (pdf|xe|lua|)latex -recorder filename
% Needs two runs with MiKTeX, one with TeX Live
\documentclass{article}

\usepackage[abspath]{currfile}
\usepackage{xstring}
\usepackage{pifont}
\usepackage{fancyhdr}

\getabspath{\themainfile} % or use \jobname.tex instead (not as safe)
\let\mainabspath\theabspath % save result away (macro will be overwritten by the next \getabspath

\StrCount{\mainabspath}{/}[\NbS]
\StrBetween[10,\NbS]{\mainabspath}{/}{/}[\rep]
\StrBetween[9,10]{\mainabspath}{/}{/}[\repp]

\pagestyle{fancy}

\lhead{
	\begin{textbf}
		\repp \;
		\ding{43}
		\begin{large}
			\rep
		\end{large} \;
		\ding{43}
		\begin{Large}
			\currfilebase
		\end{Large}
	\end{textbf}
}

\begin{document}
Blabla
\end{document}
Il resterait à remplacer 10 par le résultat de \NbS-1 et 9 par le résultat de \NbS -2.

Comment je peux faire ?
J'utilserai bêtement des compteurs

Code : Tout sélectionner

\newcounter{extrm}
\setcounter{extrm}{\NbS}
\newcounter{orig}
\setcounter{orig}{\NbS}
\addtocounter{orig}{-1}
\StrBetween[\value{orig},\value{extrm}]{\mainabspath}{/}{/}[\rep]
\addtocounter{extrm}{-1}
\addtocounter{orig}{-1}
\StrBetween[\value{orig},\value{extrm}]{\mainabspath}{/}{/}[\repp]
AMHA il faut un minimum de contrôles pour vérifier l'existence des chaînes visées et éviter les erreurs intempestives.

C'est vraiment donner des bâtons pour se faire battre que d'utiliser des caractères accentués (et des espaces !) dans les noms de fichier. À travers le monde on met des gens en prison pour des choses infiniment moins graves que ça. Ce qui t'arrives est une punition largement méritée :twisted:, mais comme je suis la bonté même, je pardonne, et je m'en sens coupable.
Avec une compilation en xelatex, ça devrait le faire, mais c'est plus lent...
JJR.
LaTeXien migrateur.
BenLar
Utilisateur confirmé
Utilisateur confirmé
Messages : 48
Inscription : mercredi 29 avril 2020, 14:56
Statut actuel : Enseignant

Re: Insérer le nom de fichier et de répertoire dans le fichier de sortie

Message non lu par BenLar »

Je reconnais, c'est d'ma faute, c'est d'ma faute, c'est d'ma très grande faute ! :D

Pour les accents, j'ai trouvé la solution suivante qui fonctionne (dans la majorité des cas)

Code : Tout sélectionner

\usepackage[abspath]{currfile}
\usepackage{xstring}
\usepackage{fancyhdr}

\getabspath{\themainfile} % or use \jobname.tex instead (not as safe)
\let\mainabspath\theabspath % save result away (macro will be overwritten by the next \getabspath

\StrCount{\mainabspath}{/}[\NbS]
\newcounter{extrm}
\setcounter{extrm}{\NbS}
\newcounter{orig}
\setcounter{orig}{\NbS}
\addtocounter{orig}{-1}
\StrBetween[\value{orig},\value{extrm}]{\scantokens\expandafter{\mainabspath\noexpand}}{/}{/}[\rep]
\addtocounter{extrm}{-1}
\addtocounter{orig}{-1}
\StrBetween[\value{orig},\value{extrm}]{\scantokens\expandafter{\mainabspath\noexpand}}{/}{/}[\repp]

\pagestyle{fancy}

\lhead{
	\begin{textbf}
		\repp \;
		\ding{43}
		\begin{large}
			\rep
		\end{large} \;
		\ding{43}
		\begin{Large}
			\scantokens\expandafter{\currfilebase\noexpand}
		\end{Large}
	\end{textbf}
}
Pour les contrôles, pour l'instant, je mets de côté ;)