diff options
author | Karl Berry <karl@freefriends.org> | 2023-04-17 19:58:32 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-04-17 19:58:32 +0000 |
commit | c367803eac95c4cb442cc97f0fc3ac63846bf885 (patch) | |
tree | 446c8d97b6bdee20f7b605531ddc9babf45ffc13 | |
parent | 0f04be16f7c95e84cd17884ce759b58426c407eb (diff) |
profcollege (17apr23)
git-svn-id: svn://tug.org/texlive/trunk@66871 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.pdf | bin | 9138986 -> 9158838 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.zip | bin | 2647945 -> 2321615 bytes | |||
-rw-r--r-- | Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex | 22 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/profcollege/PfCNonogramme.tex | 587 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty | 5 |
5 files changed, 601 insertions, 13 deletions
diff --git a/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.pdf b/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.pdf Binary files differindex 0d70c7ff9d0..28279dff29b 100644 --- a/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.pdf +++ b/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.pdf diff --git a/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.zip b/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.zip Binary files differindex 70e4a9bb4f1..1483362cd59 100644 --- a/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.zip +++ b/Master/texmf-dist/doc/latex/profcollege/ProfCollege-doc.zip diff --git a/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex b/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex index 3bd25ff4dc3..81a1b3003f0 100644 --- a/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex +++ b/Master/texmf-dist/tex/latex/profcollege/PfCEcritureUnites.tex @@ -296,30 +296,30 @@ \DeclareSIUnit{\Tempo}{\are}% }{% \ifboolKV[Unites]{nm}{% - \DeclareSIUnit{\Tempo}{\nano\meter}% + \DeclareSIUnit{\Tempo}{\square\nano\meter}% }{% \ifboolKV[Unites]{um}{% - \DeclareSIUnit{\Tempo}{\micro\meter}% + \DeclareSIUnit{\Tempo}{\square\micro\meter}% }{% \ifboolKV[Unites]{km}{% - \DeclareSIUnit{\Tempo}{\kilo\meter}% + \DeclareSIUnit{\Tempo}{\square\kilo\meter}% }{% \ifboolKV[Unites]{hm}{% - \DeclareSIUnit{\Tempo}{\hecto\meter}% + \DeclareSIUnit{\Tempo}{\square\hecto\meter}% }{% \ifboolKV[Unites]{dam}{% - \DeclareSIUnit{\Tempo}{\deca\meter}% + \DeclareSIUnit{\Tempo}{\square\deca\meter}% }{% \ifboolKV[Unites]{m}{% - \DeclareSIUnit{\Tempo}{\meter}% + \DeclareSIUnit{\Tempo}{\square\meter}% }{% \ifboolKV[Unites]{dm}{% - \DeclareSIUnit{\Tempo}{\deci\meter}% + \DeclareSIUnit{\Tempo}{\square\deci\meter}% }{% \ifboolKV[Unites]{mm}{% - \DeclareSIUnit{\Tempo}{\milli\meter}% + \DeclareSIUnit{\Tempo}{\square\milli\meter}% }{% - \DeclareSIUnit{\Tempo}{\centi\meter}% + \DeclareSIUnit{\Tempo}{\square\centi\meter}% }% }% }% @@ -331,10 +331,10 @@ }% }% \ifboolKV[Unites]{Nombre}{% - \SI{#2}{\square\Tempo}% + \SI{#2}{\Tempo}% }{% \setlength{\PfCLgUnites}{\useKV[Unites]{Dots}}% - \pointilles[\PfCLgUnites]\,\si{\square\Tempo}% + \pointilles[\PfCLgUnites]\,\si{\Tempo}% }% }% diff --git a/Master/texmf-dist/tex/latex/profcollege/PfCNonogramme.tex b/Master/texmf-dist/tex/latex/profcollege/PfCNonogramme.tex new file mode 100644 index 00000000000..8c72ca696e4 --- /dev/null +++ b/Master/texmf-dist/tex/latex/profcollege/PfCNonogramme.tex @@ -0,0 +1,587 @@ +\setKVdefault[Nono]{Largeur=10pt,Taille=5,Unite=1cm,Solution=false,Enonce=true} + +\newtoks\toklistenonoa% +\newtoks\toklistenonob% +\def\UpdatetoksNonoa#1\nil{\addtotok\toklistenonoa{#1,}}% +\def\UpdatetoksNonob#1\nil{\addtotok\toklistenonob{#1,}}% + +\def\UpdatetoksNonoA#1\nil{\addtotok\toklistenonoa{"#1",}}% +\def\UpdatetoksNonoB#1\nil{\addtotok\toklistenonob{"#1",}}% + +\NewDocumentCommand\Nonogrammeold{o m m}{% + \useKVdefault[Nono]% + \setKV[Nono]{#1}% + \setsepchar{,}% + \readlist*\PfCListeNonoa{#2}% + \readlist*\PfCListeNonob{#3}% + \toklistenonoa{}% + \foreachitem\compteur\in\PfCListeNonoa{\expandafter\UpdatetoksNonoa\compteur\nil}% + \toklistenonob{}% + \foreachitem\compteur\in\PfCListeNonob{\expandafter\UpdatetoksNonob\compteur\nil}% + \BuildNono{\the\toklistenonoa}{\the\toklistenonob}% +}% + +\NewDocumentCommand\Nonogramme{o m}{% + \useKVdefault[Nono]% + \setKV[Nono]{#1}% + \setsepchar{,}% + \readlist*\PfCListeNonoa{#2}% + \toklistenonoa{}% + \toklistenonob{}% + \foreachitem\compteur\in\PfCListeNonoa{\expandafter\UpdatetoksNonoA\compteur\nil}% + \xintFor* ##2 in{\xintSeq{1}{\useKV[Nono]{Taille}}}\do{% + \xdef\PfCNonoFoo{}% + \xintFor* ##1 in{\xintSeq{1}{\PfCListeNonoalen}}\do{% + \StrChar{\PfCListeNonoa[##1]}{##2}[\PfCNonoRetiens] + \xdef\PfCNonoFoo{\PfCNonoFoo\PfCNonoRetiens} + }% + \expandafter\UpdatetoksNonoB\PfCNonoFoo\nil% + }% + \BuildNono{\the\toklistenonoa}{\the\toklistenonob}% + }% + +\NewDocumentCommand\BuildNono{m m}{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + Taille:=\useKV[Nono]{Taille}; + u:=\useKV[Nono]{Unite}; + boolean Solution,Enonce; + Solution:=\useKV[Nono]{Solution}; + Enonce:=\useKV[Nono]{Enonce}; + + color NonoFill; + NonoFill=white; + + numeric nbretenir[][]; + numeric nbretenircol[][]; + + vardef NombreLigne(text t)= + retiens:=0; + nblignes:=0; + for p_=t: + nblignes:=nblignes+1; + endfor; + enddef; + + path Square; + Square=unitsquare scaled u; + + vardef Nonoa(text t)= + cptretiensnblignes:=1; + for p_=t: + for k=0 upto Taille-1: + if substring(k,k+1) of p_="o": + elseif substring(k,k+1) of p_="X": + if Solution: fill ((Square scaled 0.95) shifted(u*((k,-cptretiensnblignes)+(0.025,0.025)))) fi; + fi; + trace (Square shifted(u*(k,-cptretiensnblignes))); + endfor; + cptretiensnblignes:=cptretiensnblignes+1; + endfor; + enddef; + + string Sequence[][]; + string SequenceCol[][]; + + vardef AffichageL(text t)= + cptnblignes:=0; + for p_=t: + pas:=0; + cptnblignes:=cptnblignes+1; + nbcoups:=0; + for k=0 upto Taille-1: + if substring(k,k+1) of p_="o": + pas:=pas+1; + nbcoups:=0; + elseif substring(k,k+1) of p_="X": + nbcoups:=nbcoups+1; + Sequence[cptnblignes][pas]:=decimal(nbcoups); + fi; + endfor; + nbpas:=0; + for k=pas downto 0: + if unknown Sequence[cptnblignes][k]: + else: + nbpas:=nbpas+1; + label.lft(TEX(Sequence[cptnblignes][k]),(0,0) shifted (-(nbpas-1)*5mm-2.5mm,u*(-cptnblignes+0.5))); + fi; + endfor; + endfor; + enddef; + + vardef AffichageC(text t)= + cptnbcolonnes:=0; + for p_=t: + pas:=0; + cptnbcolonnes:=cptnbcolonnes+1; + nbcoups:=0; + for k=0 upto nblignes-1: + if substring(k,k+1) of p_="o": + pas:=pas+1; + nbcoups:=0; + elseif substring(k,k+1) of p_="X": + nbcoups:=nbcoups+1; + SequenceCol[cptnbcolonnes][pas]:=decimal(nbcoups); + fi; + endfor; + nbpas:=0; + for k=pas downto 0: + if unknown SequenceCol[cptnbcolonnes][k]: + else: + nbpas:=nbpas+1; + label.top(TEX(SequenceCol[cptnbcolonnes][k]),(0,0) shifted (u*(cptnbcolonnes-0.5),(nbpas-1)*5mm+2.5mm)); + fi; + endfor; + endfor; + enddef; + + NombreLigne(#1); + Nonoa(#1); + if Enonce: + AffichageL(#1); + AffichageC(#2); + fi; + \end{mplibcode} + \else + \begin{mpost}[mpsettings={Taille:=\useKV[Nono]{Taille};u:=\useKV[Nono]{Unite};boolean Solution,Enonce;Solution:=\useKV[Nono]{Solution};Enonce:=\useKV[Nono]{Enonce};}] + color NonoFill; + NonoFill=white; + + numeric nbretenir[][]; + numeric nbretenircol[][]; + + vardef NombreLigne(text t)= + retiens:=0; + nblignes:=0; + for p_=t: + nblignes:=nblignes+1; + endfor; + enddef; + + path Square; + Square=unitsquare scaled u; + + vardef Nonoa(text t)= + cptretiensnblignes:=1; + for p_=t: + for k=0 upto Taille-1: + if substring(k,k+1) of p_="o": + elseif substring(k,k+1) of p_="X": + if Solution: fill ((Square scaled 0.95) shifted(u*((k,-cptretiensnblignes)+(0.025,0.025)))) fi; + fi; + trace (Square shifted(u*(k,-cptretiensnblignes))); + endfor; + cptretiensnblignes:=cptretiensnblignes+1; + endfor; + enddef; + + string Sequence[][]; + string SequenceCol[][]; + + vardef AffichageL(text t)= + cptnblignes:=0; + for p_=t: + pas:=0; + cptnblignes:=cptnblignes+1; + nbcoups:=0; + for k=0 upto Taille-1: + if substring(k,k+1) of p_="o": + pas:=pas+1; + nbcoups:=0; + elseif substring(k,k+1) of p_="X": + nbcoups:=nbcoups+1; + Sequence[cptnblignes][pas]:=decimal(nbcoups); + fi; + endfor; + nbpas:=0; + for k=pas downto 0: + if unknown Sequence[cptnblignes][k]: + else: + nbpas:=nbpas+1; + label.lft(LATEX(Sequence[cptnblignes][k]),(0,0) shifted (-(nbpas-1)*5mm-2.5mm,u*(-cptnblignes+0.5))); + fi; + endfor; + endfor; + enddef; + + vardef AffichageC(text t)= + cptnbcolonnes:=0; + for p_=t: + pas:=0; + cptnbcolonnes:=cptnbcolonnes+1; + nbcoups:=0; + for k=0 upto nblignes-1: + if substring(k,k+1) of p_="o": + pas:=pas+1; + nbcoups:=0; + elseif substring(k,k+1) of p_="X": + nbcoups:=nbcoups+1; + SequenceCol[cptnbcolonnes][pas]:=decimal(nbcoups); + fi; + endfor; + nbpas:=0; + for k=pas downto 0: + if unknown SequenceCol[cptnbcolonnes][k]: + else: + nbpas:=nbpas+1; + label.top(LATEX(SequenceCol[cptnbcolonnes][k]),(0,0) shifted (u*(cptnbcolonnes-0.5),(nbpas-1)*5mm+2.5mm)); + fi; + endfor; + endfor; + enddef; + + NombreLigne(#1); + Nonoa(#1); + if Enonce: + AffichageL(#1); + AffichageC(#2); + fi; + \end{mpost} + \fi +} + +\NewDocumentCommand\BuildNonoold{m m}{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + Taille:=\useKV[Nono]{Taille}; + u:=\useKV[Nono]{Unite}; + boolean Solution,Enonce; + Solution:=\useKV[Nono]{Solution}; + Enonce:=\useKV[Nono]{Enonce}; + + color NonoFill; + NonoFill=white; + + numeric nbretenir[][]; + numeric nbretenircol[][]; + + vardef NombreLigne(text t)= + retiens:=0; + nblignes:=0; + for p_=t: + retiens:=retiens+p_; + if retiens=Taille: + nblignes:=nblignes+1; + retiens:=0; + fi; + endfor; + enddef; + + path Square; + Square=unitsquare scaled u; + + vardef Nonoa(text t)= + nbcoups:=0; + nbcases:=0; + nbcaseslignes:=0; + cptretiensnb:=0; + cptretiensnblignes:=1; + for p_=t: + if p_=0: + cptretiensnb:=cptretiensnb+1; + nbretenir[cptretiensnblignes][cptretiensnb]=p_; + NonoFill:=black; + else: + nbcoups:=nbcoups+1; + for l=0 upto p_-1: + if Solution: fill ((Square scaled 0.95) shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille))+u*(0.025,0.025))) withcolor NonoFill; fi; + trace (Square shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille)))); + endfor; + nbcaseslignes:=nbcaseslignes+p_; + nbcases:=nbcases+p_; + if (nbcaseslignes mod Taille)=0: + NonoFill:=white; + cptretiensnb:=cptretiensnb+1; + nbretenir[cptretiensnblignes][cptretiensnb]=p_; + cptretiensnblignes:=cptretiensnblignes+1; + cptretiensnb:=0; + else: + if NonoFill=white: NonoFill:=black else: NonoFill:=white fi; + cptretiensnb:=cptretiensnb+1; + nbretenir[cptretiensnblignes][cptretiensnb]=p_; + fi; + fi; + endfor; + enddef; + + string SequenceColo; + + vardef Nonob(text t)= + nbcoups:=0; + nbcases:=0; + nbcasescolonnes:=0; + cptretiensnb:=0; + cptretiensnbcolonnes:=1; + SequenceColo=""; + for p_=t: + if p_=0: + cptretiensnb:=cptretiensnb+1; + nbretenircol[cptretiensnbcolonnes][cptretiensnb]=p_; + NonoFill:=black; + else: + nbcoups:=nbcoups+1; + nbcasescolonnes:=nbcasescolonnes+p_; + nbcases:=nbcases+p_; + if (nbcasescolonnes mod nblignes)=0: + NonoFill:=white; + cptretiensnb:=cptretiensnb+1; + nbretenircol[cptretiensnbcolonnes][cptretiensnb]=p_; + cptretiensnbcolonnes:=cptretiensnbcolonnes+1; + cptretiensnb:=0; + else: + if NonoFill=white: NonoFill:=black else: NonoFill:=white fi; + cptretiensnb:=cptretiensnb+1; + nbretenircol[cptretiensnbcolonnes][cptretiensnb]=p_; + fi; + fi; + endfor; + enddef; + + string Sequence[][]; + string SequenceCol[][]; + + boolean STOP; + STOP:=false; + + vardef Affichage= + for k=1 upto nblignes: + Sequence[k][1]=if nbretenir[k][1]=0:decimal(nbretenir[k][2]) else:"" fi; + if nbretenir[k][1]=0: + n:=2; + p:=1; + else: + n:=1; + p:=0; + fi; + forever: + n:=n+1; + if unknown nbretenir[k][n]: + STOP:=true; + else: + if nbretenir[k][n]>0: + if (n mod 2)=0: + p:=p+1; + Sequence[k][p]:=decimal(nbretenir[k][n]); + fi; + fi; + fi; + exitif STOP; + endfor; + for r=p downto 1: + label.lft(TEX(Sequence[k][r]),(0,0) shifted (-(r-1)*5mm,u*(-k+1+0.5))); + endfor; + STOP:=false; + endfor; + enddef; + + vardef Affichagecol= + STOP:=false; + for k=1 upto Taille: + SequenceCol[k][1]=if nbretenircol[k][1]=0:decimal(nbretenircol[k][2]) else:"" fi; + if nbretenircol[k][1]=0: + n:=2; + p:=1; + else: + n:=1; + p:=0; + fi; + forever: + n:=n+1; + if unknown nbretenircol[k][n]: + STOP:=true; + else: + if nbretenircol[k][n]>0: + if (n mod 2)=0: + p:=p+1; + SequenceCol[k][p]:=decimal(nbretenircol[k][n]); + fi; + fi; + fi; + exitif STOP; + endfor; + for r=p downto 1: + label.top(TEX(SequenceCol[k][r]),(0,0) shifted (k*u-0.5u,1u+(p-r)*5mm)); + endfor; + STOP:=false; + endfor; + enddef; + + NombreLigne(#1); + Nonoa(#1); + Nonob(#2); + if Enonce: + Affichage; + Affichagecol; + fi; + \end{mplibcode} + \else + \begin{mpost}[mpsettings={Taille:=\useKV[Nono]{Taille};u:=\useKV[Nono]{Unite};boolean Solution,Enonce;Solution:=\useKV[Nono]{Solution};Enonce:=\useKV[Nono]{Enonce};}] + color NonoFill; + NonoFill=white; + + numeric nbretenir[][]; + numeric nbretenircol[][]; + + vardef NombreLigne(text t)= + retiens:=0; + nblignes:=0; + for p_=t: + retiens:=retiens+p_; + if retiens=Taille: + nblignes:=nblignes+1; + retiens:=0; + fi; + endfor; + enddef; + + path Square; + Square=unitsquare scaled u; + + vardef Nonoa(text t)= + nbcoups:=0; + nbcases:=0; + nbcaseslignes:=0; + cptretiensnb:=0; + cptretiensnblignes:=1; + for p_=t: + if p_=0: + cptretiensnb:=cptretiensnb+1; + nbretenir[cptretiensnblignes][cptretiensnb]=p_; + NonoFill:=black; + else: + nbcoups:=nbcoups+1; + for l=0 upto p_-1: + if Solution: fill ((Square scaled 0.95) shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille))+u*(0.025,0.025))) withcolor NonoFill; fi; + trace (Square shifted(u*((nbcases mod Taille)+l,-(nbcases div Taille)))); + endfor; + nbcaseslignes:=nbcaseslignes+p_; + nbcases:=nbcases+p_; + if (nbcaseslignes mod Taille)=0: + NonoFill:=white; + cptretiensnb:=cptretiensnb+1; + nbretenir[cptretiensnblignes][cptretiensnb]=p_; + cptretiensnblignes:=cptretiensnblignes+1; + cptretiensnb:=0; + else: + if NonoFill=white: NonoFill:=black else: NonoFill:=white fi; + cptretiensnb:=cptretiensnb+1; + nbretenir[cptretiensnblignes][cptretiensnb]=p_; + fi; + fi; + endfor; + enddef; + + string SequenceColo; + + vardef Nonob(text t)= + nbcoups:=0; + nbcases:=0; + nbcasescolonnes:=0; + cptretiensnb:=0; + cptretiensnbcolonnes:=1; + SequenceColo=""; + for p_=t: + if p_=0: + cptretiensnb:=cptretiensnb+1; + nbretenircol[cptretiensnbcolonnes][cptretiensnb]=p_; + NonoFill:=black; + else: + nbcoups:=nbcoups+1; + nbcasescolonnes:=nbcasescolonnes+p_; + nbcases:=nbcases+p_; + if (nbcasescolonnes mod nblignes)=0: + NonoFill:=white; + cptretiensnb:=cptretiensnb+1; + nbretenircol[cptretiensnbcolonnes][cptretiensnb]=p_; + cptretiensnbcolonnes:=cptretiensnbcolonnes+1; + cptretiensnb:=0; + else: + if NonoFill=white: NonoFill:=black else: NonoFill:=white fi; + cptretiensnb:=cptretiensnb+1; + nbretenircol[cptretiensnbcolonnes][cptretiensnb]=p_; + fi; + fi; + endfor; + enddef; + + string Sequence[][]; + string SequenceCol[][]; + + boolean STOP; + STOP:=false; + + vardef Affichage= + for k=1 upto nblignes: + Sequence[k][1]=if nbretenir[k][1]=0:decimal(nbretenir[k][2]) else:"" fi; + if nbretenir[k][1]=0: + n:=2; + p:=1; + else: + n:=1; + p:=0; + fi; + forever: + n:=n+1; + if unknown nbretenir[k][n]: + STOP:=true; + else: + if nbretenir[k][n]>0: + if (n mod 2)=0: + p:=p+1; + Sequence[k][p]:=decimal(nbretenir[k][n]); + fi; + fi; + fi; + exitif STOP; + endfor; + for r=p downto 1: + label.lft(LATEX(Sequence[k][r]),(0,0) shifted (-(r-1)*5mm,u*(-k+1+0.5))); + endfor; + STOP:=false; + endfor; + enddef; + + vardef Affichagecol= + STOP:=false; + for k=1 upto Taille: + SequenceCol[k][1]=if nbretenircol[k][1]=0:decimal(nbretenircol[k][2]) else:"" fi; + if nbretenircol[k][1]=0: + n:=2; + p:=1; + else: + n:=1; + p:=0; + fi; + forever: + n:=n+1; + if unknown nbretenircol[k][n]: + STOP:=true; + else: + if nbretenircol[k][n]>0: + if (n mod 2)=0: + p:=p+1; + SequenceCol[k][p]:=decimal(nbretenircol[k][n]); + fi; + fi; + fi; + exitif STOP; + endfor; + for r=p downto 1: + label.top(LATEX(SequenceCol[k][r]),(0,0) shifted (k*u-0.5u,1u+(p-r)*5mm)); + endfor; + STOP:=false; + endfor; + enddef; + + NombreLigne(#1); + Nonoa(#1); + Nonob(#2); + if Enonce: + Affichage; + Affichagecol; + fi; + \end{mpost} + \fi +}
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty b/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty index c40b96f846a..1b4f7c5a7ba 100644 --- a/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty +++ b/Master/texmf-dist/tex/latex/profcollege/ProfCollege.sty @@ -2,9 +2,9 @@ % licence : Released under the LaTeX Project Public License v1.3c % or later, see http://www.latex-project.org/lppl.txtf \NeedsTeXFormat{LaTeX2e}% -\def\filedate{2023/04/15}% +\def\filedate{2023/04/17}% \let\PfCfiledate\filedate% -\def\fileversion{0.99-z-i}% +\def\fileversion{0.99-z-j}% \let\PfCfileversion\fileversion% \ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]% @@ -570,6 +570,7 @@ }%\raisebox } +\input{PfCNonogramme} \input{PfCJeuRangement} \input{PfCTrio} \input{PfCCalculsFractions} |