Je débute en TeX et j'ai un souci de compilation avec le code ci-dessous, pourtant simple :

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\newread\monfichier%  
\def\iffileexists#1#2{  
  \openin#1=#2  
  \ifeof#1  
    \closein#1  
    \expandafter\secondoftwo  
  \else  
    \closein#1  
    \expandafter\firstoftwo  
  \fi  
}

\begin{document}  
a) \iffileexists\monfichier{fic.txt}{vrai}{faux}  
\end{document}

Le message d'erreur est le suivant :

! Undefined control sequence. \firstoftwo a) \iffileexists\monfichier{fic.txt} {vrai}{faux} The control sequence at the end of the top line of your error message was never def'ed

Par contre en mettant les commentaires cela compile !

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\newread\monfichier%  
\def\iffileexists#1#2{  
    \openin#1=#2  
    \ifeof#1  
        \closein#1  
        %\expandafter\secondoftwo  
        vrai  
    \else  
        \closein#1  
        \expandafter\firstoftwo  
        faux  
    \fi  
}  
\begin{document}  
%a) \iffileexists\monfichier{fic.txt}{vrai}{faux}  
a) \iffileexists\monfichier{fic.txt}  
\end{document}

Où se situe le problème ? Merci pour vos réponses.

Posée 03 Aoû '18, 16:54

kersaff's gravatar image

kersaff
2312
Taux d'acceptation : 0%

Modifiée 05 Aoû '18, 02:52

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

1

\firstoftwo et \secondoftwo ne sont pas définies. Le noyau LaTeX a définie \@firstoftwo et \@secondoftwo.

(03 Aoû '18, 18:27) touhami touhami's gravatar image
1

@kersaff votre réponse n'était pas une. J'ai modifie donc votre question en ajoutant le texte de la réponse.

(03 Aoû '18, 18:40) touhami touhami's gravatar image

Comme l'indique le message d'erreur

! Undefined control sequence. firstoftwo

la commande \firstoftwo n'est pas définie. En effet LaTeX a deux commandes internes d'orthographes très proches : \@firstoftwo et \@secondoftwo.

Vous avez deux options :

1) Utiliser les commandes définie par LaTeX et dans ce cas il n'oublier pas d'encadrer la définition de \iffileexists par \makeatletter et \makeatother i.e. \makeatletter \iffileexists#1{...} \makeatother.

ECM 1

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\newread\monfichier
\makeatletter 
\def\iffileexists#1{%
  \openin\monfichier=#1 
  \ifeof\monfichier
    \closein\monfichier
    \expandafter\@secondoftwo
  \else
    \closein\monfichier
    \expandafter\@firstoftwo
  \fi}
\makeatother
\begin{document}  
a) \iffileexists{fic.txt}{vrai}{faux}  
\end{document}

2) Définir vos propres commandes \firstoftwo et \secondoftwo, il suffit alors de taper

Ouvrir dans l'éditeur Overleaf
\newcommand{\firstoftwo}[2]{#1}
\newcommand{\secondoftwo}[2]{#2}

ECM 2

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\newcommand{\firstoftwo}[2]{#1}
\newcommand{\secondoftwo}[2]{#2}
\newread\monfichier
\def\iffileexists#1{%
  \openin\monfichier=#1 
  \ifeof\monfichier
    \closein\monfichier
    \expandafter\secondoftwo
  \else
    \closein\monfichier
    \expandafter\firstoftwo
  \fi}
\begin{document}  
a) \iffileexists{fic.txt}{vrai}{faux}  
\end{document}

Remarque 1 : Comme le premier argument de la commande \iffileexists est forcément un flot d'entrée qui doit être déjà réserver (\newread\monfichier) j'ai redéfini \iffileexists avec un seul argument.

Remarque 2 : On peut définir \iffileexists avec trois arguments comme suit

ECM 3

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\newread\monfichier
\def\iffileexists#1#2#3{%
  \openin\monfichier=#1 
  \ifeof\monfichier #2 \else #3 \fi
  \closein\monfichier}
\begin{document}  
a) \iffileexists{fic.txt}{Le fichier n'existe pas}{Le fichier existe}  
\end{document}
Lien permanent

Publiée 03 Aoû '18, 23:11

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

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.