8
2

Cela fait plusieurs questions que je pose via ce site et j'ai toujours du mal à réaliser correctement un ECM.

Où pourrais-je trouver des informations sur comment le réaliser et sur les raccourcis à utiliser (exemple : l'introduction dans le document .tex de références bibliographiques pouvant être appelées dans le document sans avoir de bibliographie externe, etc.).

Posée 05 Jul '17, 01:31

Aur%C3%A9lienCocq's gravatar image

AurélienCocq
1.2k115566
Taux d'acceptation : 26%

Modifiée 20 Avr '19, 19:25

Pathe's gravatar image

Pathe ♦♦
7.5k43204251


Comme indiqué dans cette FAQ, un exemple complet minimal (ECM) est un fichier source :

  • exemple du problème rencontré ;
  • complet, c’est-à-dire contenant tout ce qui permet de le compiler directement (de \documentclass à \end{document} en passant par \begin{document}), sans devoir ajouter une seule ligne ;
  • minimal, c’est-à-dire allégé de tout ce qui n’est pas en rapport direct avec la question posée :
    • packages (sauf éventuellement inputenc, fontenc, lmodern et, dans une moindre mesure, babel) ;
    • définitions de macros personnelles ;
    • texte ;
    • etc.

Ce fichier doit pouvoir être compilé directement par ceux qui veulent aider à résoudre le problème rencontré et cela suppose donc qu'il ne contient :

  1. aucun fichier inclus (au moyen de \include) ou importé (au moyen de \input) : les contenus de tels fichiers ne doivent être fournis que s'ils sont nécessaires pour mettre en évidence le problème rencontré et doivent alors figurer directement dans l'ECM (à moins qu'ils ne soient générés à la volée : cf. package filecontents ci-dessous) ;
  2. aucun graphique inclus (au moyen de \includegraphics). Cela est problématique lorsque le problème rencontré concerne justement l'inclusion d'images. Dans ce cas, il suffit de charger dans l'ECM le package mwe qui fournit une vingtaine d'images, accessibles à tout un chacun sans nécessité d'indiquer le chemin qui y mène. Ainsi, l'ECM suivant est compilable avec n'importe quelle distribution TeX incluant le package mwe :

    Ouvrir dans l'éditeur Overleaf
    \documentclass{article}
    \usepackage{mwe}
    \begin{document}
    \includegraphics[width=.25\linewidth]{image}
    \end{document}
    
  • aucun fichier .bib inaccessible. Cela est problématique lorsque le problème rencontré concerne justement la bibliographie. Dans ce cas, si l'outil de bibliographie utilisé est biblatex :

    • soit le contenu du fichier .bib est sans importance et il suffit de charger dans l'ECM le fichier d'exemple biblatex-examples.bib fourni par le package biblatex, accessible à tout un chacun sans nécessité d'indiquer le chemin qui y mène. Ainsi, l'ECM suivant est compilable avec n'importe quelle distribution TeX incluant le package biblatex :

      Ouvrir dans l'éditeur Overleaf
      \documentclass{article}
      \usepackage[backend=biber]{biblatex}
      \addbibresource{biblatex-examples.bib}
      \begin{document}
      Please look at \autocite{knuth:ct:a}.
      %
      \printbibliography
      \end{document}
      
    • soit le contenu de la bibliographie a son importance et il suffit de charger dans l'ECM le package filecontents qui permet de créer des fichiers à la volée lors de la compilation du fichier .tex au moyen de l'environnement filecontents dont l'argument obligatoire est le nom (et l'extension) donné au fichier généré ; pour éviter d'avoir à se poser la question du nom du fichier généré et à condition que celui-ci doive avoir une extension autre que .tex, on peut utiliser la commande \jobname qui contient le nom du fichier compilé. Ainsi, l'ECM suivant est compilable avec n'importe quelle distribution TeX incluant le package biblatex :

      Ouvrir dans l'éditeur Overleaf
      \documentclass{article}
      \usepackage[backend=biber]{biblatex}
      \usepackage{filecontents}
      \begin{filecontents}{\jobname.bib}
      @unpublished{foo,
        author = {Foo, Bar},
        title = {Foo},
        date = {2017},
      }
      \end{filecontents}
      \addbibresource{\jobname.bib}
      \begin{document}
      Please look at \autocite{foo}.
      \printbibliography
      \end{document}
      

    Si le fichier .tex précédent se nomme toto.tex, le fichier .bib généré sera toto.bib.

    Par ailleurs, s'il est nécessaire de faire figurer de nombreuses lignes de texte (quel qu'il soit) pour illustrer le problème rencontré, il est inutile d'en inventer ou d'en copier depuis un document réel : il suffit en effet de charger le package mwe (déjà cité, ce package est plus généralement dédié à la production d'ECM : l'acronyme « MWE » signifie « minimal working example » traduit en français par « exemple complet minimal ») qui lui-même charge le package lipsum, et ce dernier fournit des paragraphes de faux-texte (« Lorem ipsum ») au moyen de la commande \lipsum. Ainsi, l'ECM suivant affiche les paragraphes 1 à 8 (sur 150) de faux-texte :

    Ouvrir dans l'éditeur Overleaf
    \documentclass{article}
    \usepackage{mwe}
    \begin{document}
    \lipsum[1-8]
    \end{document}
    
    Lien permanent

    Publiée 05 Jul '17, 22:26

    denis's gravatar image

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

    Modifiée 06 Jul '17, 01:27

    Je copie-colle une partie des « Conseils d’utilisation » qu’a rédigé Manuel Pégourié-Gonnard, partie qui correspond à cette notion.

    Ouvrir dans l'éditeur Overleaf
    3 La notion d'exemple complet minimal (ECM)
    ----------------------------------------
    
    Quand vous rencontrez un problème, et que votre code ne produit pas le
    résultat que vous attendez, il est indispensable d'accompagner la
    description du problème d'un exemple de code qui permette de le reproduire.
    Cet exemple doit être si possible complet et minimal, c'est ce qu'on appelle
    un ECM.
    
    **Complet** : l'exemple doit être compilable sans ajouter une seule ligne.
    
    En particulier, si vous utilisez LaTeX, il doit commencer par
    `\documentclass{...}`, appeler au moins les packages de base (inputenc,
    fontenc, babel), contenir le `\begin{document}` et le `\end{document}`.
    N'utilisez pas de packages non-standard ou fournissez un lien vers ceux-ci.
    
    **Minimal** : l'exemple ne doit pas contenir une ligne de code superflue.
    
    Ceci implique qu'il ne s'agit pas de votre document complet de 300 pages. Il
    est indispensable de supprimer de votre préambule tous les appels de
    packages et définitions de commandes inutiles à la reproduction du problème.
    
    La production d'un ECM est un exercice difficile mais instructif et souvent
    suffisant pour résoudre le problème. N'hésitez pas à commenter/décommenter
    des portions de code pour trouver le résultat complet minimal. Et n'oubliez
    pas : « Aide-toi, fr.comp.text.tex t'aidera. »  :-)
    

    L’extension mwe disponible dans TeXlive et MikTeX permet d’aider à la réalisation d’un ECM.

    Lien permanent

    Publiée 05 Jul '17, 21:01

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

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

    Modifiée 06 Jul '17, 22:38

    Pathe's gravatar image

    Pathe ♦♦
    7.5k43204251

    Les réponses déjà publiées sont très bonnes. On s'intéresse ici à donner quelques exemples.

    ECM par l'exemple

    Table des matières

    Introduction

    Les problème rencontrés sont généralement de trois types :

    • rendu indésirable : espace verticale avant une liste ou taille de police, ...
    • erreur de syntaxe : ! LaTeX Error: There's no line here to end. ou ! Undefined control sequence.
    • problèmes mystérieux (ou inexplicables)

    Minimale

    Ouvrir dans l'éditeur Overleaf
    \documentclass{article}
    \begin{document}
    \Tableofcontents
    \end{document}
    

    est minimale.

    Ouvrir dans l'éditeur Overleaf
    \documentclass{article}
    \begin{document}
    \Tableofcontents
    \section{Foo} Bla bla
    \end{document}
    

    n'est pas minimale.

    Ouvrir dans l'éditeur Overleaf
    \documentclass{yathesis}
    \begin{document}
    \Tableofcontents
    \end{document}
    

    n'est pas minimale.

    Complet

    Ouvrir dans l'éditeur Overleaf
    \documentclass{yathesis}
    \begin{document}
    \Tableofcontents[name=Sommaire]
    \end{document}
    

    est complet.

    Ouvrir dans l'éditeur Overleaf
    \begin{document}
    \Tableofcontents[name=Sommaire]
    \end{document}
    

    n'est pas complet.

    Ouvrir dans l'éditeur Overleaf
    \documentclass{article}
    \begin{document}
    \begin{theorem}
    Bla bla \foo
        \begin{code}
        if x=y then 
        \end{code}
    \end{theorem}
    \end{document}
    

    n'est pas complet.

    Tout en un

    les deux exemples suivants

    Ouvrir dans l'éditeur Overleaf
    \documentclass{article}
    \input{monstyle}
    \begin{document}
    Bla bla
    \end{document}
    

    et

    Ouvrir dans l'éditeur Overleaf
    \documentclass{article}
    \begin{document}
    \include{introduction}
    \include{chapitre1}
    \include{chapitre2}
    \include{conclusion}
    \end{document}
    

    ne sont pas des bons ECMs.

    Exemple pratique

    Ouvrir dans l'éditeur Overleaf
    \documentclass[12pt,space=onehalf]{yathesis}
    \usepackage{kpfonts}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage{microtype}
    
    \usepackage{booktabs}
    \usepackage{graphicx}
    
    % d'autres packages
    
    \usepackage[autostyle]{csquotes}
    \usepackage[xindy]{imakeidx}
    \usepackage[backend=biber]{biblatex}
    % fichier bib
    \addbibresource{mybib1.bib}
    \usepackage{hyperref}
    \usepackage[xindy,acronyms,symbols]{glossaries}
    % fichier pour les acronymes, symboles
    \loadglsentries{acro1}
    \makeindex
    \makeglossaries
    
    % mes commandes soit avec \input{mescmds} soit direct
    \newcommand{\mt}{foo}
    \newcommand{\cmd}[1]{foo #1}
    \newlength\mtwidth
    
    \begin{document}
    \maketitle[frametitle=shadowbox]
    \tableofcontents[name=Sommaire]
    \listoffigures
    \listoftables
    \printsymbols
    \mainmatter
    \include{corps/introduction}
    \include{corps/chapitre1}
    \include{corps/chapitre1}
    \include{corps/conclusion}
    \appendix 
    \include{Appendices/AppendixA}
    \backmatter
    \printbibliography
    \printindex
    \end{document}
    

    Tout d'abord enregistrer le fichier sous ECMmonfichier.tex c'est avec cette copie que nous allons travailler.

    Localiser le problème

    Commenter d'abord les parties où se pose le problèmes :

    • pour les problèmes de type 1 avec les yeux;
    • pour les problèmes de type 2 la plupart des éditeurs permet d'aller à la ligne de l'erreur;
    • alors que pour les problèmes de type 3 on peut procéder par dichotomie.

    L'exemple doit donc ne pose pas du problème. Supprimer alors les parties non commenter puis décommenter le reste. Le corps du document ressemble à

    Ouvrir dans l'éditeur Overleaf
    \begin{document}
    \include{corps/chapitre1}
    \end{document}
    

    Remplacer \include{corps/chapitre1} par le contenu de fichier chapitre1.tex puis recommence.

    Simplifier

    On passe maintenant au préambule.

    Supprimer toutes les commandes personnelles inutiles, commande par commande. Parfois, la suppression d'une commande cause un problème supplémentaire de type 2. Dans ce cas, supprimer toutes les occurrences de cette commande, sans importance, du corps du document.

    Supprimer Toutes les extensions non indispensables : on peut supprimer les extensions une par une. Attention, cet opération peut causer des problèmes de type 1 ou 2. En cas des problèmes de type 2, procédé comme auparavant, et laisser tranquille les extensions qui provoquent des problèmes de type 1.

    Liens

    Lien permanent

    Publiée 06 Jul '17, 22:05

    touhami's gravatar image

    touhami
    9.7k410
    Taux d'acceptation : 51%

    Modifiée 07 Jul '17, 09:50

    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.