[xlop] Affichage sous forme fractionnaire (\opdiv)

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.
Laurentfz
Utilisateur confirmé
Utilisateur confirmé
Messages : 35
Inscription : vendredi 22 mai 2020, 20:30
Statut actuel : Enseignant

[xlop] Affichage sous forme fractionnaire (\opdiv)

Message non lu par Laurentfz »

Bonjour,

En utilisant \opdiv[period,style=text]{150}{7} j'obtiens $150 \div 7 = 21,428571 \ldots$ avec un trait sur la période.
Je souhaiterais avoir l'écriture sous forme de fraction plutôt que $150 \div 7$.

Quelqu'un aurait-il une idée ?
Vous avez deviné que je ne suis pas un expert...
Merci d'avance.
Dernière modification par MB le mardi 10 novembre 2020, 10:10, modifié 1 fois.
Raison : Création d'un nouveau sujet.
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Re: [xlop] Affichage sous forme fractionnaire (\opdiv)

Message non lu par MB »

Bonjour, je ne suis pas certain que ce soit totalement évident.

Le code suivant permet d'effectuer la division sans rien imprimer, mais en stockant le quotient dans une variable q, puis à imprimer cette variable, précédée de l'écriture fractionnaire. Par contre, la période n'est plus soulignée.

Code : Tout sélectionner

\documentclass{article}
\usepackage{xlop}
\begin{document}

\[ \opdiv*[period]{150}{7}{q}{r}\frac{150}{7}=\opprint{q} \]

\end{document}
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry
Contact :

Re: [xlop] Affichage sous forme fractionnaire (\opdiv)

Message non lu par un bon petit »

La macro \op@divarg étant très monolithique (JC, si tu me lis, il faudrait peut-être penser à la scinder en sous-macros plus élémentaires), la redéfinir pour qu'elle admette un nouveau booléen \ifdivfrac conduit à un code long. Ce booléen sera false par défaut (comportement avec \div) alors que s'il est spécifié à true, la division s'affichera sous forme d'une fraction.

Du fait de la longueur de la macro \op@divarg, le code est long, mais très peu de modifications sont faites.

Code : Tout sélectionner

\documentclass{article}
\usepackage{xlop}
\newif\ifdivfrac
\divfracfalse
\makeatletter
\def\op@divarg[#1]#2#3{%
	\begingroup
		\opset{#1}%
		\op@split{#2}{a}%
		\op@split{#3}{b}%
		% add 20/11/2006
		% thanks to Christophe Poulain
		\op@cmp{b}{zero}%
		\ifopeq
			\op@error{divisor must be nonzero}%
							 {You have to learn some math}%
		\fi
		% end add
		\ifop@error
			\op@errorwrite
		\else
			\ifx\op@style\op@string@display
				\op@unzero{a}%
				\op@unzero{b}%
				\ifx\op@shiftdecimalsep\op@string@none
					\xdef\OP@a@i{\OP@a@w}%
					\xdef\OP@a@d{0}%
					\xdef\OP@b@i{\OP@b@w}%
					\xdef\OP@b@d{0}%
				\else\ifx\op@shiftdecimalsep\op@string@divisor
					\xdef\OP@a@i{\OP@a@w}%
					\xdef\OP@a@d{0}%
					\xdef\OP@b@i{\OP@b@w}%
					\xdef\OP@b@d{0}%
					\op@unzero{a}%
					\op@unzero{b}%
				\else
					\edef\op@shift{\op@max{\OP@a@d}{\OP@b@d}}%
					\op@mulpowerten{a}{\op@shift}%
					\op@mulpowerten{b}{\op@shift}%
				\fi\fi
			\fi
			\ifop@period
				\op@div{1}{a}{b}{q}{r}%
			\else
				\op@div{0}{a}{b}{q}{r}%
			\fi
			\ifx\op@style\op@string@display
				\op@split{#2}{a}%
				\op@split{#3}{b}%
				\op@copy{q}{qq}%
				\op@unzero{a}%
				\op@unzero{b}%
				\ifx\op@shiftdecimalsep\op@string@none
					\def\op@shift{0}%
					\op@count@v=\OP@a@d
					\advance\op@count@v by-\OP@b@d\relax
					\ifnum\op@count@v>0
						\op@divpowerten{qq}{\the\op@count@v}%
					\else
						\op@count@v=-\op@count@v
						\op@mulpowerten{qq}{\the\op@count@v}%
					\fi
				\else\ifx\op@shiftdecimalsep\op@string@divisor
					\edef\op@shift{\OP@a@d}%
					\op@count@v=\OP@a@d
					\advance\op@count@v by-\OP@b@d\relax
					\ifnum\op@count@v>0
						\op@divpowerten{qq}{\the\op@count@v}%
					\else
						\op@count@v=-\op@count@v
						\op@mulpowerten{qq}{\the\op@count@v}%
					\fi
					\edef\op@shift{\OP@b@d}%
					\op@split{#2}{a}%
					\ifx\op@strikedecimalsepsymbol\empty
						\op@unzero{a}%
					\else
						\op@count@z=\OP@a@w
					\fi
					\op@mulpowerten{a}{\OP@b@d}%
					\ifx\op@strikedecimalsepsymbol\empty\else
						\advance\op@count@z by-\OP@a@d
						\op@format{\the\op@count@z}{\OP@a@d}{a}%
					\fi
					\xdef\OP@b@i{\OP@b@w}%
					\xdef\OP@b@d{0}%
					\ifx\op@strikedecimalsepsymbol\empty
						\op@unzero{b}%
					\fi
				\else
					\edef\op@shift{\op@max{\OP@a@d}{\OP@b@d}}%
					\ifx\op@strikedecimalsepsymbol\empty
						\op@unzero{a}%
						\op@unzero{b}%
					\else
						\op@count@z=\OP@a@w
						\op@count@i=\OP@b@w
					\fi
					\op@mulpowerten{a}{\op@shift}%
					\op@mulpowerten{b}{\op@shift}%
					\ifx\op@strikedecimalsepsymbol\empty\else
						\advance\op@count@z by-\OP@a@d
						\op@format{\the\op@count@z}{\OP@a@d}{a}%
						\advance\op@count@i by-\OP@b@d
						\op@format{\the\op@count@i}{\OP@b@d}{b}%
					\fi
				\fi\fi
				\ifx\op@country\op@string@french
					\op@divdisplayone
				\else \ifx\op@country\op@string@american
					\op@divdisplayone
				\else \ifx\op@country\op@string@russian
					\op@divdisplayone
				\else
					\op@error{Country \op@country\space isn't recognize}
									 {For now, only `french', `american' and
										 `russian' are valid}%
				\fi\fi\fi
			\else
				\ifnum\OP@a@s=\OP@b@s\else
					\xdef\OP@q@s{1}%
				\fi
				\mathsurround=\z@\relax
				\ifop@deletezero
					\op@unzero{a}%
					\op@unzero{b}%
					\op@unzero{q}%
				\fi
				\op@unsplit{a}{@a}%
				\op@unsplit{b}{@b}%
				\op@unsplit{q}{@q}%
				\ifdivfrac
					$\displaystyle\frac\Op@@a\Op@@b$%
				\else
					\ifnum\OP@a@s=1\relax
						\ifx\op@parenthesisnegative\op@string@all
							$(\Op@@a)$%
						\else
							$\Op@@a$%
						\fi
					\else
						$\Op@@a$%
					\fi
					$\>$\nobreak\op@divsymbol$\>$\penalty\binoppenalty
					\ifnum\OP@b@s=1\relax
						\ifx\op@parenthesisnegative\op@string@all
							$(\Op@@b)$%
						\else \ifx\op@parenthesisnegative\op@string@last
							$(\Op@@b)$%
						\else
							$\Op@@b$%
						\fi\fi
					\else
						$\Op@@b$%
					\fi
				\fi
				\op@cmp{zero}{r}%
				\ifopeq
					$\;$\nobreak\op@equalsymbol$\;$\penalty\relpenalty
					\setbox0=\hbox{\Op@@q}%
				\else
					\ifop@period
						$\;$\nobreak\op@equalsymbol$\;$\penalty\relpenalty
						\setbox0=\hbox{%
							\Op@@q
							\setbox1=\hbox{0}%
							\begingroup
								\opcolumnwidth=\wd1
								\ophline(-\op@lengthperiod,\op@vruleperiod){\op@lengthperiod}%
							\endgroup
							\op@afterperiodsymbol
						}%
					\else
						$\;$\nobreak\op@approxsymbol$\;$\penalty\relpenalty
						\setbox0=\hbox{\Op@@q}%
					\fi
				\fi
				\ifnum\OP@q@s=1\relax
					\ifx\op@parenthesisnegative\op@string@all
						$(\box0)$%
					\else
						$\box0$%
					\fi
				\else
					$\box0$%
				\fi
			\fi
		\fi
	\endgroup
}
\makeatother
\begin{document}
\opdiv[period,style=text]{150}{7}% comportement par défaut

\divfractrue% afficher les divisions sou forme de fractions
\opdiv[period,style=text]{150}{7}
\end{document}
Screenshot_20201110_204917.png
PS : vu la capture d'écran, il doit y avoir des espaces parasites quelque part dans le code de xlop, mais j'ai la flemme de chercher où.
Programmer en TeX, TeXpérimental
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Re: [xlop] Affichage sous forme fractionnaire (\opdiv)

Message non lu par MB »

un bon petit a écrit : mardi 10 novembre 2020, 20:52 La macro \op@divarg étant très monolithique (JC, si tu me lis, il faudrait peut-être penser à la scinder en sous-macros plus élémentaires), la redéfinir pour qu'elle admette un nouveau booléen \ifdivfrac conduit à un code long.
C'est également ce que j'ai constaté en regardant le code.
Du coup j'ai abandonné la tentative d'adaptation. Merci d'avoir eu le courage de t'y attaquer. :thumbup:
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry
Contact :

Re: [xlop] Affichage sous forme fractionnaire (\opdiv)

Message non lu par un bon petit »

MB a écrit : mardi 10 novembre 2020, 21:05 Du coup j'ai abandonné la tentative d'adaptation. Merci d'avoir eu le courage de t'y attaquer. :thumbup:
Petit courage : 4 lignes à ajouter, j'ai survécu.
Programmer en TeX, TeXpérimental
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Re: [xlop] Affichage sous forme fractionnaire (\opdiv)

Message non lu par MB »

C'est vrai, mais dommage d'avoir à recopier toute la fonction pour ces quelques modifications.
Et je ne pense pas que Jean-Côme Charpentier passe souvent par ici ... Il avait un compte à une époque, mais je crois qu'il était inactif depuis un bon moment et qu'il a été supprimé lors du délestage.
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
Laurentfz
Utilisateur confirmé
Utilisateur confirmé
Messages : 35
Inscription : vendredi 22 mai 2020, 20:30
Statut actuel : Enseignant

Re: [xlop] Affichage sous forme fractionnaire (\opdiv)

Message non lu par Laurentfz »

C'est exactement ce que je cherchais. Impressionné !
Effectivement c'est un peu long...
Merci à tous.
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2238
Inscription : samedi 29 décembre 2007, 00:58

Re: [xlop] Affichage sous forme fractionnaire (\opdiv)

Message non lu par projetmbc »

MB a écrit : mercredi 11 novembre 2020, 00:04 ... Et je ne pense pas que Jean-Côme Charpentier passe souvent par ici ...
Il suffit de le contacter par pigeon voyageur ou par mail. :D
un bon petit
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 995
Inscription : vendredi 12 juin 2009, 22:35
Statut actuel : Enseignant
Localisation : Chambéry
Contact :

Re: [xlop] Affichage sous forme fractionnaire (\opdiv)

Message non lu par un bon petit »

projetmbc a écrit : mercredi 11 novembre 2020, 16:56 Il suffit de le contacter par pigeon voyageur ou par mail. :D
C'est fait, je lui ai envoyé un email ce matin. Il uploade une version sans espaces parasites sous peu. Pour de nouvelles fonctionnalités, il va falloir attendre encore un peu...
Programmer en TeX, TeXpérimental
MB
Administrateur
Administrateur
Messages : 8058
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant
Contact :

Re: [xlop] Affichage sous forme fractionnaire (\opdiv)

Message non lu par MB »

A propos des espaces parasites, je n'avais rien vu de spécial sur ta capture d'écran. Tout me semblait convenable ...
MB. (rejoignez pCloud et bénéficiez de 10Go de stockage en ligne gratuits)
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message