Soit un texte qui serait édité en trois versions. Sa syntaxe ne changerait pas de l'une à l'autre, mais son vocabulaire, si :

  • la première version serait en français strict ; tout mot d'origine anglaise y serait remplacé par un ou plusieurs mots français. Par exemple, dans un registre automobile, on y parlerait d'un volet de démarrage à froid ;

  • la deuxième version serait en français actuel : raisonnablement teinté d'emprunts à l'anglais, il ne présenterait aucune surprise pour le lecteur français (de France). Ainsi y parlerait-on de starter ;

  • la troisième et dernière version serait en franglais ; on y parlerait de choke (cela ne surprendrait pas le lecteur québécois, mais c'est une autre histoire).

Comment réaliser ça en LaTeX ?

Il s'agirait de n'avoir qu'un seul fichier source, qui contiendrait par exemple des commandes du type \selecteur{volet de démarrage à froid, starter, choke}.

Et c'est lors de la compilation que, par l'entreprise de quelque makefile (ce mot est très mystérieux pour moi), on déciderait si l'on compile en français strict, en français actuel ou en franglais.

Quelque TeXnicien saurait-il m'expliquer comment faire ça ?

Posée 28 Jui '17, 20:24

Pathe's gravatar image

Pathe ♦♦
7.4k29197245
Taux d'acceptation : 55%

Modifiée 03 Jul '19, 20:53

il y a l'extension optional.

(28 Jui '17, 22:56) touhami touhami's gravatar image
1

faire ça en LaTeX n'est peut être pas la meilleure idée. Il ne suffit pas toujours de changer des mots isolés. Personnellement je scripterais. Je placerais les parties à changer entre balises. Un premier script créerait une liste des expressions à remplacer. Cette liste serait éditée pour ajouter le remplacement proposé. Une recherche et remplacement utilisant cette liste fait le travail. sed peut faire ça. On peut aussi faire ça avec quelques lignes de code Elisp dans Emacs. Emacs permet même d'adapter la chaîne de remplacement "à la volée"

(30 Jui '17, 16:55) Jean-jacques Rétorré Jean-jacques%20R%C3%A9torr%C3%A9's gravatar image

Merci pour votre contribution, mais je n'ai guère envie de scripter. La liste des expressions à remplacer serait évidemment précieuse, mais j'ai envie de taper du texte courant et pas des chaînes à remplacer.

En revanche, je serais heureux de piger comment sortir de mon fichier la liste des correspondances entre les différentes expressions ! Cela fera peut-être l'objet d'une nouvelle question.

(05 Jul '17, 01:04) Pathe ♦♦ Pathe's gravatar image

Voici une solution, avec l'extension optional.

Ouvrir dans l'éditeur Overleaf
\documentclass[french]{article}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}

\usepackage{optional}

\newcommand{\selecteur}[3]{%
\opt{fr}{#1}%
\opt{en}{#2}%
\opt{fe}{#3}}

\begin{document}
Il s'agirait de n'avoir qu'un seul fichier source, qui contiendrait par exemple des commandes du type \selecteur{volet de démarrage à froid}{starter}{choke}
\end{document}

À compiler en utilisant la commande pdflatex \def\UseOption{fe} \input{monfichier.tex}

Remarque 1 \UseOption est soit fr, fe ou en selon la version.

Remarque 2 le nom de commande \UseOption est utilisé par l'extension et ne doit pas être changé.

Remarque 3 On peut remplacer \UseOption par une autre commande, par exemple :

pdflatex \def\lan{fe} \input{monfichier.tex}

mais il faut alors remplacer \usepackage{optional} par \usepackage[\lan]{optional}.


Deuxième solution (sans extensions supplémentaires)

Ouvrir dans l'éditeur Overleaf
\documentclass[french]{article}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}

\newcounter{fr}
\providecommand\lan{1}% par défault c'est (1) fr strict
\setcounter{fr}{\lan}
\makeatletter
\let\selecteur\@nameuse
\newcommand{\mtselecteur}[3]{%   %\mtselecteur{franglais}{fr strict}{fr actuel}
\ifcase\value{fr}\or
\@namedef{#1}{#2}\or% si 1 fr strict
\@namedef{#1}{#3}\or% si 2 fr actuel
\@namedef{#1}{#1}\fi}% si 3 franglais
\makeatother

\mtselecteur{choke}{volet de démarrage à froid}{starter}

\begin{document}
\tableofcontents
\section{\selecteur{choke}}
Il s'agirait de n'avoir qu'un seul fichier source, qui contiendrait par exemple des commandes du type \selecteur{choke}  mais

\end{document}

À compiler avec la commande pdflatex \def\lan{1} \input{monfichier.tex} (resp. \def\lan{2} ou \def\lan{3}).

Les différentes versions sont données au préambule (ou n'importe où avant l'utilisation) comme dans \mtselecteur{choke}{volet de démarrage à froid}{starter} (\mtselecteur{franglais}{fr strict}{fr actuel}) puis elles sont utilisées dans le corps du document avec \selecteur{choke}.

Lien permanent

Publiée 29 Jui '17, 00:19

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 05 Jul '17, 00:51

Le soin que vous mettez à fournir une explication, tant claire que détaillée, est remarquable.

(29 Jui '17, 00:45) Pathe ♦♦ Pathe's gravatar image

J'ai tenté la compilation. Malheureusement, j'obtiens :

Ouvrir dans l'éditeur Overleaf
$ pdflatex \def\UseOption{fe} \input{monfichier.tex}
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
! I can't find file `defUseOption{fe}'.
<*> defUseOption{fe} 
                     input{monfichier.tex}
(Press Enter to retry, or Control-D to exit)
Please type another input file name:
(29 Jui '17, 07:46) Pathe ♦♦ Pathe's gravatar image

Je suis sous windows, ça marche pour moi, mais je ne sait pas pour les autres systèmes. Pouvez vous essayer $ pdflatex \\def\\UseOption{fe} \\input{monfichier.tex}?

(29 Jui '17, 09:54) touhami touhami's gravatar image

Cela fonctionne parfaitement (je me sers de linux et du shell bash). Pourquoi diantre faut-il des caractères d'échappement ? Je ne comprends pas.

(29 Jui '17, 12:04) Pathe ♦♦ Pathe's gravatar image
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.