%----------------------------------------------------------------------%
%        ------------------------------------------------------        %
%        |          opérations posées, cryptarithmes          |        %
%        ------------------------------------------------------        %
% Auteur : Aymeric Picaud                                              %
% créé le : 28 octobre 2017                                            %
%----------------------------------------------------------------------%
%                                                                      %
%~~~~~~~~~~~~~~~~~~~~~~~~~~ début préambule ~~~~~~~~~~~~~~~~~~~~~~~~~~~%
%
% Le texte saisi après le symbole "%" est un commentaire
%
% partie déclarative
%
\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{inputenc} % encodage du fichier source
\usepackage[T1]{fontenc} % encodage du fichier cible
\usepackage[francais]{babel} % césure et règles de typographie
%
\usepackage{amsmath}
%
% Packages spécifiques
%
\usepackage{titlesec}
%
% Début correction
% problème de numérotation des sections dans le document version 2.10.1 de titlesec
%
% https://tex.stackexchange.com/questions/299969/titlesec-loss-of-section-numbering-with-the-new-update-2016-03-15
%
\usepackage{etoolbox}
\makeatletter
\patchcmd{\ttlh@hang}{\parindent\z@}{\parindent\z@\leavevmode}{}{}
\patchcmd{\ttlh@hang}{\noindent}{}{}{}
\makeatother
%
% fin correction
%
\usepackage{xlop}
\usepackage{hyperref}
%
% fin Packages
%
\hypersetup{
    unicode=false,          % non-Latin characters in Acrobat’s bookmarks
    pdftoolbar=true,        % show Acrobat’s toolbar?
    pdfmenubar=true,        % show Acrobat’s menu?
    pdffitwindow=false,     % window fit to page when opened
    pdfstartview={FitH},    % fits the width of the page to the window
    pdftitle={Usage de LaTeX et du package xlop pour présenter des opérations à trous et autres cryptarithmes},    % title
    pdfauthor={Aymeric Picaud},     % author
    pdfsubject={},   % subject of the document
    pdfcreator={PDFLaTeX},   % creator of the document
    pdfproducer={}, % producer of the document
    pdfkeywords={}, % list of keywords
    pdfnewwindow=true,      % links in new PDF window
    colorlinks=true,       % false: boxed links; true: colored links
    linkcolor=red,          % color of internal links (change box color with linkbordercolor)
    citecolor=green,        % color of links to bibliography
    filecolor=magenta,      % color of file links
    urlcolor=blue           % color of external links
}
%
%
\titleformat{\section}{\scshape\bfseries\Large}{}{1em}{}
\renewcommand{\thesection}{\Roman{section}}
\titleformat{\subsection}{\itshape\bfseries\large}{}{1em}{}

%
%
%
% Fin personalisation
%
%
% mise en page
%
\setlength{\marginparwidth}{0pt}
\setlength{\headheight}{0pt}
\setlength{\evensidemargin}{2cm}
\setlength{\oddsidemargin}{2cm}
\setlength{\headsep}{0pt}
\setlength{\textwidth}{17cm}
\setlength{\textheight}{25.7cm}
\setlength{\topmargin}{1cm}
\setlength{\hoffset}{-1in}
\setlength{\voffset}{-1in}
%
% Informations sur le document
%
\title{Usage de \LaTeX{} et du package xlop pour présenter des opérations à trous et autres cryptarithmes}
\author{Aymeric Picaud} % Auteur
\date{\today} % la date de création du document final est celle de la compilation
%~~~~~~~~~~~~~~~~~~~~~~~~~~~ fin préambule ~~~~~~~~~~~~~~~~~~~~~~~~~~~~%
%~~~~~~~~~~~~~~~~~~~~~~ début corps du document ~~~~~~~~~~~~~~~~~~~~~~~%
%
%
%
\begin{document}


\maketitle

\newcommand\hole[1]{$\bullet$}

\section{Usage classique : un exemple de division}

Le package xlop se charge en ajoutant \verb!\usepackage{xlop}! dans le préambule du document \LaTeX{}.

On peut avec ce package présenter rapidement la division euclidienne de 10~915 par 106 :

\begin{verbatim}
\opidiv[displayintermediary=all,voperation=top]{10915}{106}
\end{verbatim}

Ce qui donne à l'affichage :

\begin{center}
\opidiv[displayintermediary=all,voperation=top]{10915}{106}
\end{center}

La package xlop est disponible dans les distributions de \LaTeX{} et dans les dépots CTAN (\url{https://ctan.org/pkg/xlop}). La documentation associée est disponible à l'adresse suivante : \url{http://ctan.mines-albi.fr/macros/generic/xlop/doc/xlop-doc-fr.pdf}

\section{Usage pour des opérations à trous}

Le package peut être utilisé pour présenter l'opération posée en remplaçant certains chiffres par d'autres caractères.

Pour ce faire on crée une commande pour le caractère de remplacement :

\begin{verbatim}
\newcommand\hole[1]{$\bullet$}
\end{verbatim}

On part de cette multiplication

\opmul[voperator=bottom,
		displayshiftintermediary=none]{453}{1001205}

obtenue à l'aide du code suivant :

\begin{verbatim}
\opmul[voperator=bottom,
       displayshiftintermediary=none]{453}{1001205}
\end{verbatim}

Le code précédent est modifié et commenté :

\begin{verbatim}
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       operandstyle.1.1=\hole,
% LE PREMIER CHIFFRE (EN PARTANT DE LA DROITE) DU PREMIER
% FACTEUR EST REMPLACÉ PAR LE CARACTÈRE DE LA COMMANDE \hole
       operandstyle.1.2=\hole,
% LE DEUXIÈME CHIFFRE (EN PARTANT DE LA DROITE) DU PREMIER
% FACTEUR EST REMPLACÉ PAR LE CARACTÈRE DE LA COMMANDE \hole
       operandstyle.2.3=\hole,
% LE TROISIÈME CHIFFRE (EN PARTANT DE LA DROITE) DU DEUXIÈME
% FACTEUR EST REMPLACÉ PAR LE CARACTÈRE DE LA COMMANDE \hole
       resultstyle.2=\hole
% LE DEUXIÈME CHIFFRE (EN PARTANT DE LA DROITE) DU RESULTAT
% EST REMPLACÉ PAR LE CARACTÈRE DE LA COMMANDE \hole
      ]{453}{1001205}
\end{verbatim}

Ce qui donne après compilation :

\begin{center}
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       operandstyle.1.1=\hole,
% LE PREMIER CHIFFRE (EN PARTANT DE LA DROITE) DU PREMIER
% FACTEUR EST REMPLACÉ PAR LE CARACTÈRE DE LA COMMANDE \hole
       operandstyle.1.2=\hole,
% LE DEUXIÈME CHIFFRE (EN PARTANT DE LA DROITE) DU PREMIER
% FACTEUR EST REMPLACÉ PAR LE CARACTÈRE DE LA COMMANDE \hole
       operandstyle.2.3=\hole,
% LE TROISIÈME CHIFFRE (EN PARTANT DE LA DROITE) DU DEUXIÈME
% FACTEUR EST REMPLACÉ PAR LE CARACTÈRE DE LA COMMANDE \hole
       resultstyle.2=\hole
% LE DEUXIÈME CHIFFRE (EN PARTANT DE LA DROITE) DU RESULTAT
% EST REMPLACÉ PAR LE CARACTÈRE DE LA COMMANDE \hole
      ]{453}{1001205}
\end{center}

Dans l'article \href{http://revue.sesamath.net/spip.php?article1033}{Les cryptarithmes} paru dans le \href{http://revue.sesamath.net/spip.php?rubrique148}{numéro 58} de MathemaTICE\footnote{\url{http://revue.sesamath.net/}}, plusieurs cryptarithmes étaient donnés à lire et à résoudre.

L'un\footnote{On remarque que la solution est donnée dans le code \LaTeX{}.} d'eux  est présenté ainsi :

\begin{center}
\opmul[voperator=bottom,
		displayshiftintermediary=none,
		operandstyle=\hole,
		intermediarystyle=\hole,
		resultstyle=\hole,
		operandstyle.1.2=,
		operandstyle.2.1=,
		intermediarystyle.1.4=,
		intermediarystyle.2.1=,
		intermediarystyle.2.2=]{1237}{893}
\end{center}

Quasiment tous les chiffres sont cachés sauf les 3 et tous les 3.

On procède en deux étapes :

\begin{verbatim}
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       operandstyle=\hole,
       % tous les chiffres des opérandes sont cachés
       intermediarystyle=\hole,
       % tous les chiffres des produits partiels sont cachés
       resultstyle=\hole 
       % tous les chiffres du résultat sont cachés
      ]{1237}{893}
\end{verbatim}

ce qui donne :

\begin{center}
      \opmul[voperator=bottom,
       displayshiftintermediary=none,
       operandstyle=\hole,
       % tous les chiffres des opérandes sont cachés
       intermediarystyle=\hole,
       % tous les chiffres des produits partiels sont cachés
       resultstyle=\hole 
       % tous les chiffres du résultat sont cachés
      ]{1237}{893}
\end{center}      

Pour faire \og{} réapparaître \fg{} les \og{} 3 \fg{} on modifie ainsi :

\begin{verbatim}
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       operandstyle=\hole,
       % tous les chiffres des opérandes sont cachés
       intermediarystyle=\hole,
       % tous les chiffres des produits partiels sont cachés
       resultstyle=\hole,
       % tous les chiffres du résultat sont cachés	
       operandstyle.1.2=,
       % on change le comportement pour le deuxième
       % chiffre du premier facteur (qui est 3)
       % ne rien mettre après "=".
       operandstyle.2.1=,
       intermediarystyle.1.4=,
       intermediarystyle.2.1=,
       intermediarystyle.2.2=
      ]{1237}{893}
\end{verbatim}

ce qui donne :

\begin{center}
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       operandstyle=\hole,
       % tous les chiffres des opérandes sont cachés
       intermediarystyle=\hole,
       % tous les chiffres des produits partiels sont cachés
       resultstyle=\hole,
       % tous les chiffres du résultat sont cachés	
       operandstyle.1.2=,
       % on change le comportement pour le deuxième
       % chiffre du premier facteur (qui est 3)
       % ne rien mettre après "=".
       operandstyle.2.1=,
       intermediarystyle.1.4=,
       intermediarystyle.2.1=,
       intermediarystyle.2.2=
      ]{1237}{893}
\end{center}


\section{Usage pour les cryptarithmes}

Il y a sans doute d'autres manières plus simples de présenter les opérations posées pour les cryptarithmes (notamment le point de départ). La méthode utilisant le package xlop a l'avantage de pouvoir présenter le point de départ, la solution, des étapes intermédiaires (ou des chiffres ont été découverts) en un code \LaTeX{} facilement réutilisable par \og{}copier-coller\fg{}.

J'utilise pour exemple ce  cryptarithme où certains chiffres sont remplacés par des lettres. Une lettre correspondant à un et un seul chiffre. La solution est présentée à coté : 

\newcommand\lettreA[1]{A}
\newcommand\lettreB[1]{B}
\newcommand\lettreC[1]{C}
%
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       intermediarystyle=\hole,
       resultstyle=\hole,
       operandstyle.1.3=\lettreA,
       operandstyle.1.2=\lettreB,
       operandstyle.1.1=\lettreC,
       operandstyle.2.2=\lettreA,
       operandstyle.2.3=\lettreB,
       operandstyle.2.1=\lettreC,
       intermediarystyle.2.1=\lettreA,
       intermediarystyle.3.1=\lettreB]{286}{826}
%
\hspace{2cm}
\opmul[voperator=bottom,
		displayshiftintermediary=none]{286}{826}

Dans la présentation du cryptarithme, 2 est remplacé par A, 8 par B et C par 6 dans les opérandes. Dans les produits partiels seuls deux chiffres sont indiqués, les autres chiffres sont cachés et peuvent être égaux à 2, 8 ou 6.

L'ajout simple de \verb!operandstyle.1.1=C! dans la zone d'option de la commande \verb!\opmul! ne fonctionne pas :

\begin{minipage}{0.6\textwidth}
\begin{verbatim}
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       operandstyle.1.1=C]{286}{826}
\end{verbatim}
\end{minipage}
\hfill
\begin{minipage}{0.35\textwidth}
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       operandstyle.1.1=C]{286}{826}
\end{minipage}

On doit passer par la création d'une commande :

\begin{minipage}{0.6\textwidth}
\begin{verbatim}
%
% commande nécessaire 
% pour écrire la lettre C
%
\newcommand\lettreC[1]{C}
%
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       operandstyle.1.1=\lettreC]{286}{826}
\end{verbatim}
\end{minipage}
\hfill
\begin{minipage}{0.35\textwidth}
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       operandstyle.1.1=\lettreC]{286}{826}
\end{minipage}

On répète l'opération pour toutes les lettres, et on cache les autres chiffres :

\begin{verbatim}
\newcommand\lettreA[1]{A}
\newcommand\lettreB[1]{B}
\newcommand\lettreC[1]{C}
%
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       intermediarystyle=\hole,
       resultstyle=\hole,
       operandstyle.1.3=\lettreA,
       operandstyle.1.2=\lettreB,
       operandstyle.1.1=\lettreC,
       operandstyle.2.2=\lettreA,
       operandstyle.2.3=\lettreB,
       operandstyle.2.1=\lettreC,
       intermediarystyle.2.1=\lettreA,
       intermediarystyle.3.1=\lettreB]{286}{826}
\end{verbatim}

La première étape de résolution de ce cryptarithme consiste à déterminer que $\text{C}=6$. Une fois cette étape réalisée, on peut aisément \og{}découvrir\fg{} C :


\begin{verbatim}
\newcommand\lettreA[1]{A}
\newcommand\lettreB[1]{B}
\newcommand\lettreC[1]{C}
%
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       intermediarystyle=\hole,
       resultstyle=\hole,
       operandstyle.1.3=\lettreA,
       operandstyle.1.2=\lettreB,
       operandstyle.1.1=,
       operandstyle.2.2=\lettreA,
       operandstyle.2.3=\lettreB,
       operandstyle.2.1=,
       intermediarystyle.2.1=\lettreA,
       intermediarystyle.3.1=\lettreB]{286}{826}
\end{verbatim}

\begin{center}
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       intermediarystyle=\hole,
       resultstyle=\hole,
       operandstyle.1.3=\lettreA,
       operandstyle.1.2=\lettreB,
       operandstyle.1.1=,
       operandstyle.2.2=\lettreA,
       operandstyle.2.3=\lettreB,
       operandstyle.2.1=,
       intermediarystyle.2.1=\lettreA,
       intermediarystyle.3.1=\lettreB]{286}{826}
\end{center}

On peut également ajouter les chiffres connus après analyse :

\begin{verbatim}
\newcommand\lettreA[1]{A}
\newcommand\lettreB[1]{B}
\newcommand\lettreC[1]{C}
%
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       intermediarystyle=\hole,
       resultstyle=\hole,
       operandstyle.1.3=\lettreA,
       operandstyle.1.2=\lettreB,
       operandstyle.1.1=,
       operandstyle.2.2=\lettreA,
       operandstyle.2.3=\lettreB,
       operandstyle.2.1=,
       intermediarystyle.2.1=\lettreA,
       intermediarystyle.3.1=\lettreB,
       intermediarystyle.1.1=,
       resultstyle.1=]{286}{826}
\end{verbatim}

\begin{center}
\opmul[voperator=bottom,
       displayshiftintermediary=none,
       intermediarystyle=\hole,
       resultstyle=\hole,
       operandstyle.1.3=\lettreA,
       operandstyle.1.2=\lettreB,
       operandstyle.1.1=,
       operandstyle.2.2=\lettreA,
       operandstyle.2.3=\lettreB,
       operandstyle.2.1=,
       intermediarystyle.2.1=\lettreA,
       intermediarystyle.3.1=\lettreB,
       intermediarystyle.1.1=,
       resultstyle.1=]{286}{826}
\end{center}


\section{Les autres exemples}

Il faut ajouter les commandes suivantes :
\begin{verbatim}
\newcommand\lettreD[1]{D}
\newcommand\lettreE[1]{E}
\newcommand\lettreF[1]{F}
\newcommand\lettreG[1]{G}
\newcommand\lettreH[1]{H}
%
\newcommand\lettreR[1]{R}
\newcommand\lettreO[1]{O}
\newcommand\lettreT[1]{T}
\newcommand\lettreS[1]{S}
\newcommand\lettreX[1]{X}
%
\newcommand\lettreM[1]{M}
\end{verbatim}

\newcommand\lettreD[1]{D}
\newcommand\lettreE[1]{E}
\newcommand\lettreF[1]{F}
\newcommand\lettreG[1]{G}
\newcommand\lettreH[1]{H}
%
\newcommand\lettreR[1]{R}
\newcommand\lettreO[1]{O}
\newcommand\lettreT[1]{T}
\newcommand\lettreS[1]{S}
\newcommand\lettreX[1]{X}
%
\newcommand\lettreM[1]{M}
		
		
\bigskip

\opmul[voperator=bottom,
		displayshiftintermediary=none,
		operandstyle.1.3=\lettreA,
		operandstyle.1.2=\lettreB,
		operandstyle.1.1=\lettreC,
		operandstyle.2.2=\lettreD,
		operandstyle.2.1=\lettreE,
		intermediarystyle.1.1=\lettreC,
		intermediarystyle.1.2=\lettreE,
		intermediarystyle.1.3=\lettreF,
		intermediarystyle.2.1=\lettreC,
		intermediarystyle.2.2=\lettreE,
		intermediarystyle.2.3=\lettreD,
		resultstyle.1=\lettreC,
		resultstyle.2=\lettreB,
		resultstyle.3=\lettreG,
		resultstyle.4=\lettreH]{125}{37}		
\hspace{2cm}
\opmul[voperator=bottom,
		displayshiftintermediary=none]{125}{37}

\bigskip
		
\opmul[voperator=bottom,
		displayshiftintermediary=none,
		operandstyle=\hole,
		intermediarystyle=\hole,
		resultstyle=\hole,
		operandstyle.1.2=,
		operandstyle.2.1=,
		intermediarystyle.1.4=,
		intermediarystyle.2.1=,
		intermediarystyle.2.2=]{1237}{893}
\hspace{2cm}
\opmul[voperator=bottom,
		displayshiftintermediary=none]{1137}{893}
\hspace{2cm}		
\opmul[voperator=bottom,
		displayshiftintermediary=none]{1237}{893}

\bigskip
	
\opmul[voperator=bottom,
		displayshiftintermediary=none,
		intermediarystyle=\hole,
		operandstyle.1.1=\lettreX,
		operandstyle.1.2=\lettreE,
		operandstyle.1.3=\lettreS,		
		operandstyle.2.1=\lettreX,
		operandstyle.2.2=\lettreE,
		operandstyle.2.3=\lettreS,		
		intermediarystyle.1.4=\lettreB,
		intermediarystyle.2.4=\lettreB,
		resultstyle.1=\lettreT,
		resultstyle.2=\lettreO,
		resultstyle.3=\lettreD,
		resultstyle.4=\lettreR,
		resultstyle.5=\lettreA,
		resultstyle.6=\lettreB]{567}{567}
\hspace{2cm}
\opmul[voperator=bottom,
		displayshiftintermediary=none]{567}{567}

\bigskip

\opmul[voperator=bottom,
		displayshiftintermediary=none,
		operandstyle.1.1=\lettreH,
		operandstyle.1.2=\lettreT,
		operandstyle.1.3=\lettreA,		
		operandstyle.1.4=\lettreM,
		operandstyle.2.1=\lettreH,
		operandstyle.2.2=\lettreT,
		operandstyle.2.3=\lettreA,		
		operandstyle.2.4=\lettreM,
		intermediarystyle=\hole,
		resultstyle=\hole,
		resultstyle.1=\lettreH,
		resultstyle.2=\lettreT,
		resultstyle.3=\lettreA,		
		resultstyle.4=\lettreM]{9376}{9376}
\hspace{2cm}
\opmul[voperator=bottom,
		displayshiftintermediary=none]{9376}{9376}


\subsection{Le code \LaTeX{} des exemples ci-dessus}

\begin{verbatim}
\opmul[voperator=bottom,
		displayshiftintermediary=none,
		operandstyle.1.3=\lettreA,
		operandstyle.1.2=\lettreB,
		operandstyle.1.1=\lettreC,
		operandstyle.2.2=\lettreD,
		operandstyle.2.1=\lettreE,
		intermediarystyle.1.1=\lettreC,
		intermediarystyle.1.2=\lettreE,
		intermediarystyle.1.3=\lettreF,
		intermediarystyle.2.1=\lettreC,
		intermediarystyle.2.2=\lettreE,
		intermediarystyle.2.3=\lettreD,
		resultstyle.1=\lettreC,
		resultstyle.2=\lettreB,
		resultstyle.3=\lettreG,
		resultstyle.4=\lettreH]{125}{37}		
\hspace{2cm}
\opmul[voperator=bottom,
		displayshiftintermediary=none]{125}{37}

\bigskip
		
\opmul[voperator=bottom,
		displayshiftintermediary=none,
		operandstyle=\hole,
		intermediarystyle=\hole,
		resultstyle=\hole,
		operandstyle.1.2=,
		operandstyle.2.1=,
		intermediarystyle.1.4=,
		intermediarystyle.2.1=,
		intermediarystyle.2.2=]{1237}{893}
\hspace{2cm}
\opmul[voperator=bottom,
		displayshiftintermediary=none]{1137}{893}
\hspace{2cm}		
\opmul[voperator=bottom,
		displayshiftintermediary=none]{1237}{893}

\bigskip
	
\opmul[voperator=bottom,
		displayshiftintermediary=none,
		intermediarystyle=\hole,
		operandstyle.1.1=\lettreX,
		operandstyle.1.2=\lettreE,
		operandstyle.1.3=\lettreS,		
		operandstyle.2.1=\lettreX,
		operandstyle.2.2=\lettreE,
		operandstyle.2.3=\lettreS,		
		intermediarystyle.1.4=\lettreB,
		intermediarystyle.2.4=\lettreB,
		resultstyle.1=\lettreT,
		resultstyle.2=\lettreO,
		resultstyle.3=\lettreD,
		resultstyle.4=\lettreR,
		resultstyle.5=\lettreA,
		resultstyle.6=\lettreB]{567}{567}
\hspace{2cm}
\opmul[voperator=bottom,
		displayshiftintermediary=none]{567}{567}

\bigskip

\opmul[voperator=bottom,
		displayshiftintermediary=none,
		operandstyle.1.1=\lettreH,
		operandstyle.1.2=\lettreT,
		operandstyle.1.3=\lettreA,		
		operandstyle.1.4=\lettreM,
		operandstyle.2.1=\lettreH,
		operandstyle.2.2=\lettreT,
		operandstyle.2.3=\lettreA,		
		operandstyle.2.4=\lettreM,
		intermediarystyle=\hole,
		resultstyle=\hole,
		resultstyle.1=\lettreH,
		resultstyle.2=\lettreT,
		resultstyle.3=\lettreA,		
		resultstyle.4=\lettreM]{9376}{9376}
\hspace{2cm}
\opmul[voperator=bottom,
		displayshiftintermediary=none]{9376}{9376}
\end{verbatim}


\end{document}
%
% Le document se termine avant l'instruction précédente
%

%~~~~~~~~~~~~~~~~~~~~~~~ fin corps du document ~~~~~~~~~~~~~~~~~~~~~~~~%
