Chemins relatifs non compris par latexmk ou pdflatex

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 utilisateurs 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.
petitours
Utilisateur confirmé
Utilisateur confirmé
Messages : 33
Inscription : samedi 03 décembre 2022, 18:11
Statut actuel : Enseignant

Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par petitours »

Bonjour

J'ai fait une application c# qui modifie des fichiers .tex puis lance pdflatex.exe ou latexmk.exe pour les compiler.
Avec des fichiers tex sans input tout fonctionne bien mais si dans mon document je mets quelquechose comme
\input{./labas/UnFichier}
alors je peux compiler sans soucis ce fichier avec TeXstudio mais l'appel de latexmk.exe me donne une erreur
! LaTeX Error: File `./labas/UnFichier}.tex' not found.
Pourquoi latex ne comprends il pas le chemin relatif alors qu'un outil comme TexStudio le fait sans rien avoir à modifier où que ce soit sur la même machine ?

J'ai trouvé pleins de choses qui parlent de variables d'environnement avec TEXINPUTS mais je n'arrive pas à comprendre ce que ça peut faire dans la mesure où je ne trouve même pas où ni comment ça te "tape" ; est ce à mettre dans les fichiers Tex ? est ce à taper dans une ligne de commande (donc à exécuter avant de lancer mon appel à latexmk) ?

Merci par avance
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2822
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par gigiair »

TEXINPUTS est une variable d'environnement décrivant l'ensemble des répertoires dans lesquels le système TeX va chercher les fichiers dont il a besoin (en particulier ceux qui sont appelés par la commande \\input).
Voir la documentation du moteur de recherche kapthsea.

Sa valeur dépend de l'installation. Pour la révéler, taper dans un interpréteur de commande du système

Code : Tout sélectionner

kpsewhich -var-value TEXINPUTS
La réponse est une suite de chemins séparés par des virgules. Une expression entre accolades représente la mise en facteur commun de son contenu.
Ainsi TOTO/{TATA,TITI} représente TOTO/TATA,TOTO/TITI
Les doubles barres obliques // signifient que les chemins incluent tous les sous-répertoires.

Je ne suis pas compétent en latexmk qui est un script perl. Le mieux est de placer ses fichiers -- ou un lien symbolique vers ses fichiers -- dans un répertoire décrit par TEXINPUTS (par exemple dans TEXMFHOME) et de les appeler par un simple \\input sans préciser de chemin.

La création de liens symboliques est possible sous Windows qui semble être ton système. Il y a plus de vingt ans que je n'ai plus de machine sous ce système d'exploitation et à l'époque ça n'existait pas. MM. Duckduckgo ou Google qui savent tout doivent pouvoir expliquer comment s'y prendre.

Pour ton information, texstudio n'effectue aucune compilation, il se contente d'envoyer une commande (paramétrable) à un moteur tex.
JJR.
LaTeXien migrateur.
petitours
Utilisateur confirmé
Utilisateur confirmé
Messages : 33
Inscription : samedi 03 décembre 2022, 18:11
Statut actuel : Enseignant

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par petitours »

Bonjour et merci

Je ne doutais pas que TexStudio appelle un compilateur comme je cherche à le faire mais du coup comment fait-il pour respecter les liens relatifs que je lui donne en \input ?

J'ai des dizaines de documents qui ont des \input avec le même lien relatif vers des fichiers du même nom mais qui sont donc différents pour tous mes documents.
Si je comprends bien TEXINPUTS est l’équivalent du PATH mais je ne me vois pas demander à latexmk d'aller chercher toujours au même endroit au risque qu'il prenne le même fichier input pour tous mes documents alors que je veux que celui qui est local soit pris en compte et aucun autre qui trainerait quelque part dans les dossiers référencés par TEXINPUTS.

Merci
anonyme74170
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 110
Inscription : jeudi 21 avril 2016, 11:34

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par anonyme74170 »

Bonjour,

sur des sujets délicats, il m'est arrivé de contacter le mainteneur ici TeXstudio. J'ai toujours eu un bon accueil
https://www.texstudio.org/ rubrique About.
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2822
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par gigiair »

Comme je n'ai dit, TeXStudio n'a rien à voir dans le débat. Il faudrait savoir quelle commande il envoie et à quel moteur. En principe ça figure dans les première lignes du log, du moins sous TeXLive, du genre

Code : Tout sélectionner

Running `LaTeX' on `TeX-tmpsWl6zm' with ``pdflatex  -file-line-error    -interaction=nonstopmode TeX-tmpsWl6zm.tex''
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022/Debian) (preloaded format=pdflatex)
 restricted \write18 enabled.
Ce qui signifie que le compilateur pdflatex est appelé avec les arguments ``pdflatex -file-line-error -interaction=nonstopmode '' sur le fichier sur TeX-tmpsWl6zm.tex.
La ligne de commande est de ma responsabilité donc ça peut varier d'une installation à l'autre.
Visiblement le moteur que tu emploies se débrouille bien avec l'insertion de fichiers dont l'URI donnée n'est pas dans TEXINPUTS, ce qui visiblement n'est pas le cas si la compilation est lancée par latexmk.
Je trouve que c'est une très mauvaise idée de désigner un fichier par son chemin complet, il vaut mieux procéder comme je t'ai dit : placer le fichier à inclure dans un répertoire de TEXINPUTS. À défaut, créer un lien symbolique vers ce fichier dans un des répertoire de TEXINPUTS.

Le répertoire le plus directement accessible appartenant à TEXINPUTS est le répertoire contenant le fichier source lui-même, représenté par un point '.'
Certains latexiens créent un répertoire pour chaque fichier tex et placent dans ce répertoire le fichier source et tous les fichiers à inclure. Ça facilite le travail collaboratif et l'archivage puisque il suffit de créer une archive du répertoire pour le conserver ou le partager.
Je n'utilise pas latexmk, donc je ne saurais pas modifier son comportement pour qu'il se comporte comme tu le désires. Peut-être que d'autres intervenants savent le faire, mais je n'en vois pas l'intérêt.
Sans doute que latexmk doit pouvoir se paramétrer pour que la ligne de commande qu'il utilise soit la même que celle de TeXStudio. Tout comme TeXStudio, latexmk n'effectue lui-même aucune compilation.
JJR.
LaTeXien migrateur.
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2822
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par gigiair »

petitours a écrit : samedi 14 janvier 2023, 18:00 Bonjour et merci

Je ne doutais pas que TexStudio appelle un compilateur comme je cherche à le faire mais du coup comment fait-il pour respecter les liens relatifs que je lui donne en \input ?

J'ai des dizaines de documents qui ont des \input avec le même lien relatif vers des fichiers du même nom mais qui sont donc différents pour tous mes documents.
Si je comprends bien TEXINPUTS est l’équivalent du PATH mais je ne me vois pas demander à latexmk d'aller chercher toujours au même endroit au risque qu'il prenne le même fichier input pour tous mes documents alors que je veux que celui qui est local soit pris en compte et aucun autre qui trainerait quelque part dans les dossiers référencés par TEXINPUTS.

Merci
latexmk n'a rien à voir dans le débat, il n'y a strictement rien à lui demander. Il n'y a que les fichiers à insérer qui sont à déplacer ou bien à être pointés par un lien symbolique sauvegardé dans la portée de TEXINPUTS.
Les fichiers ainsi traités sont visibles de partout par le moteur TeX, exactement comme les fichiers fournis par la distribution.
Une autre solution consisterait à modifier la variable TEXINPUTS pour inclure les répertoires dans lesquels on veut que TeX puisse lire des fichiers sans avoir besoin de préciser le chemin d'accès. C'est assez complexe et ça ne présente aucun avantage par rapport à la méthode que je préconise.
JJR.
LaTeXien migrateur.
petitours
Utilisateur confirmé
Utilisateur confirmé
Messages : 33
Inscription : samedi 03 décembre 2022, 18:11
Statut actuel : Enseignant

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par petitours »

gigiair a écrit : samedi 14 janvier 2023, 18:58 Le répertoire le plus directement accessible appartenant à TEXINPUTS est le répertoire contenant le fichier source lui-même, représenté par un point '.'
Certains latexiens créent un répertoire pour chaque fichier tex et placent dans ce répertoire le fichier source et tous les fichiers à inclure. Ça facilite le travail collaboratif et l'archivage puisque il suffit de créer une archive du répertoire pour le conserver ou le partager.
C'est exactement ce que je fais, au détail prés que les fichiers à inclure sont rangés de manière appropriés dans des répertoires placés là où se trouve le .tex principal
\input{./DossierPourRangerProprementLesChosesDeTypeFoo/inputDeTypeFoo}
(ou autre organisation logique) me semble tellement plus propre que de tout laisser en vrac au même niveau que le .tex principal.

Comme ces fichiers existent dans plusieurs archives indépendantes, ça me chagrine beaucoup que le système puisse aller chercher et trouver l'input autre part que dans le dossier local.
gigiair a écrit : samedi 14 janvier 2023, 18:58 Running `LaTeX' on `TeX-tmpsWl6zm' with ``pdflatex -file-line-error -interaction=nonstopmode TeX-tmpsWl6zm.tex''
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022/Debian) (preloaded format=pdflatex)
restricted \write18 enabled.
TexStudio m'affiche
Processus en cours : pdflatex.exe -synctex=1 -interaction=nonstopmode "test".tex
Mais je n'ai pas la ligne équivalente à vous à la première ligne du log alors que je suis aussi sous TexLive

Le log commence par votre deuxième ligne avec
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.10.18) 14 JAN 2023 20:33
entering extended mode
restricted \write18 enabled.
et là je regarde l'aide de pdflatex (qui se comporte comme latexmk pour mon affaire) et.... l'option -synctex=1 n'existe pas :wtf:
petitours
Utilisateur confirmé
Utilisateur confirmé
Messages : 33
Inscription : samedi 03 décembre 2022, 18:11
Statut actuel : Enseignant

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par petitours »

En tous cas comme synctex semble être un utilitaire fait pour lier la source au pdf (donc rien à voir) il semblerait que la gestion des input ne passe pas par la nature de la commande.
TexStudio gère ça autrement pour que TexLive fasse le job approprié.
petitours
Utilisateur confirmé
Utilisateur confirmé
Messages : 33
Inscription : samedi 03 décembre 2022, 18:11
Statut actuel : Enseignant

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par petitours »

J'ai fait des essais via la variable d'environnement TEXINPUTS et j'arrive à des choses mais dans la mesure où .// ne fait pas le job il me faudrait modifier cette variable d'environnement à chaque compilation et comme il faut laisser des choses pour le bon fonctionnement de Texlive c'est sans fin et d'une complexité inouïe.

Je suis sidéré qu'un truc aussi abouti que LaTex soit déficient pour gérer un truc aussi basique qu'une chemin relatif

En tous cas il y a forcément une autre solution que TEXINPUTS pour gérer ça puisque TexStudio sait faire autrement. La question c'est quoi ? Je n'ai rien trouvé d'autres que des choses parlant de TEXINPUTS.
petitours
Utilisateur confirmé
Utilisateur confirmé
Messages : 33
Inscription : samedi 03 décembre 2022, 18:11
Statut actuel : Enseignant

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par petitours »

J'avais mal essayé .// dans TEXINPUTS en fait ça fonctionne. Donc si je fais des
\input{nomFichier}
ça fait le job.

Sauf que je perds au passage en productivité dans TexStudio qui ne voit plus les fichiers (dans l'ide uniquement, la compilation fonctionne "grâce" au TEXINPUTS).

Que de complexité !! pourquoi le .// n'a t-il pas été inclus par défaut dans TEXINPUTS pour que tout roule ? ou tout simplement gérer les chemin relatifs ?

Si vous avez des explications je suis preneur parce que je comprends absolument pas la logique que je vois ici débile or ce n'est pas trop la caractéristique de LaTex... Accessoirement si je pouvais résoudre la perte de productivité que ça engendre dans texstudio ce serait super.
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2822
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par gigiair »

Le mécanisme de la recherche des fichiers est géré par la bibliothèque kpathsea. C'est expliqué dans le document texlive-fr.pdf § 8.1 Kpathsea et la recherche de fichiers. (accessible par texdoc) et de manière plus complète (mais en anglais) dans kpathsea.pdf.
JJR.
LaTeXien migrateur.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par un bon petit »

Je réponds, mais je pense, vu le volume des échanges que je n'ai pas lu avec attention, qu'il y a un truc que j'ai pas compris.
je tente quand même le coup.

TeXlive à jour, linux : J'ai créé un dossier "essai" dans mon répertoire "Téléchargement" qui est hors de la vue de TeX.
Il y a 3 sous dossiers :
  • main qui contient le fichier à compiler main.tex
  • foo avec un fichier à inclure foo.tex
  • bar avec un fichier à inclure bar.tex
Le code du fichier main.tex est :

Code : Tout sélectionner

\documentclass{article}
\begin{document}
Fichier principal \verb|/essai/main/main.tex|.

\input{../foo/foo.tex}
% ou bien : \input ../foo/foo.tex

\input{../bar/bar.tex}
% ou bien : \input ../bar/bar.tex

\end{document}
La compilation ne pose aucun problème, qu'elle soit faite par texstudio ou en ligne de commande avec pdflatex. Les 2 fichier foo.tex et bar.tex sont correctement trouvés.

Le fichier essai.zip, qui contient le répertoire "essai" se trouve en pièce jointe.
Pièces jointes
essai.zip
(26.24 Kio) Téléchargé 294 fois
Programmer en TeX, TeXpérimental
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2822
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par gigiair »

un bon petit a écrit : dimanche 15 janvier 2023, 10:24 Je réponds, mais je pense, vu le volume des échanges que je n'ai pas lu avec attention, qu'il y a un truc que j'ai pas compris.
je tente quand même le coup.
Le problème est que latexmk ne supporte pas \\input{/chemin/vers/fichier} fichiers, pour une raison que j'ignore.
Personnellement, je ne fais jamais de telles commandes, si le fichier à importer n'est pas dans l'arborescence de TEXINPUTS, je crée un lien symbolique dans cette arborescence pour y accéder. S'ils s'agit d'un fichier tex à partager, le plus raisonnable est de le sauvegarder dans son espace personnel de TEXINPUTS.
Autrement, il faudrait chercher dans la doc de latexmk ou dans son code...
JJR.
LaTeXien migrateur.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par un bon petit »

gigiair a écrit : dimanche 15 janvier 2023, 11:07 Le problème est que latexmk ne supporte pas \\input{/chemin/vers/fichier} fichiers, pour une raison que j'ignore.
Je n'ai jamais utilisé latexmk, mais si je tente latexmk -pdf main.tex la compilation ne produit aucune erreur et le fichier pdf est correctement généré.
Programmer en TeX, TeXpérimental
petitours
Utilisateur confirmé
Utilisateur confirmé
Messages : 33
Inscription : samedi 03 décembre 2022, 18:11
Statut actuel : Enseignant

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par petitours »

Merci un bon petit pour votre message qui m'a obligé à tout reprendre et à tester avec cmder en tapant directement les lignes de commandes, sans passer par process start de c#.

Et en effet latexmk.exe comme pdflatex font parfaitement le job avec mes chemins relatifs appelés en ligne de commande depuis cmder ! (mélange de joie et désespoir en moi...).

C'est la même commande, appelée depuis process start de c# qui fait que ça ne se comporte pas pareil.

Je vais creuser ce problème qui est j'imagine à coté du lumbago entre la chaise et le clavier.

Merci.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2282
Inscription : samedi 29 décembre 2007, 00:58

Re: Chemins relatifs non compris par latexmk ou pdflatex

Message non lu par projetmbc »

Un classique, je pense.

Tenter d'abord un chdir depuis C# avant de lancer le reste devrait réparer le problème.