Numérotation livret

Tout ce qui concerne le langage LaTeX et ses variantes. Ce langage est supporté sur le forum via les balises tex.

Modérateur : gdm_tex

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.
Eugene
Utilisateur confirmé
Utilisateur confirmé
Messages : 28
Inscription : mercredi 18 mars 2009, 08:01

[Résolu] Numérotation livret

Message par Eugene »

Bonjour

J'ai un document en LaTeX, en A5. J'ai utilisé un programme pdfbook pour organiser les pages de telles sortes qu'il forment des livrets de 32 pages.

Je voudrai mettre un numéro sur chacun de ces livrets (pour pouvoir faire une belle reliure). Le problème, c'est que je ne connais rien dans la programmation des fonctions en LaTeX.

Je pensais utiliser le paquet fancy pour pouvoir mettre en pied de page une numéro. Le problème, c'est que ce numéro doit apparaître que pour les pages dont le numéro est divisible par 32. J'ai pensé utiliser ifthenelse, mais je ne sais pas comment spécifier la condition divisible par 32. D'autre part, je ne vois pas comment diviser le numéro de la page par 32 pour avoir le numéro de livret.

Merci d'avance pour vos suggestions.
Dernière modification par Eugene le dimanche 22 novembre 2009, 08:45, modifié 1 fois.

rebouxo
Modérateur global
Modérateur global
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: Numérotation livret

Message par rebouxo »

Je pense que pg ou un bon petit vont te pondre un code kivabien. Le fait est que les calculs ne sont pas le point le plus simple de TeX, et que le ifthenelse de LaTeX est assez particulier. Le plus simple est certainement d'aller regarder du côté de TeX pour les calculs (il me semble qu'il y a un mod en TeX) et des tests de TeX, c'est parfois assez subtil, mais certainement plus efficace que \ifthenelse.


Aller les gars au boulot :mrgreen:
Olivier
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: Numérotation livret

Message par pg »

Voici deux commandes, l'une qui teste si un compteur est divisible par un certain nombre, l'autre qui divise un compteur par un nombre.

Code : Tout sélectionner

\documentclass{article}

\usepackage[francais]{babel}

\makeatletter
\newcount\temp@divisibility@count
\newcommand{\testifdivisibleby}[4]{%
% #1 = compteur dont on veut tester la divisibilité
% #2 = nombre par lequel on divise
% #3 = code à éxécuter si c'est le cas
% #4 = code à éxécuter dans le cas contraire
  \temp@divisibility@count=\value{#1}%
  \divide\temp@divisibility@count by #2\relax
  \multiply\temp@divisibility@count by #2\relax
  \ifnum\temp@divisibility@count=\value{#1}\relax
    #3%
  \else
    #4%
  \fi
}
\newcommand{\printdivisionresult}[2]{%
% #1 = compteur dont on veut tester la divisibilité
% #2 = nombre par lequel on divise
  \temp@divisibility@count=\value{#1}%
  \divide\temp@divisibility@count by #2\relax
  \the\temp@divisibility@count
}
\makeatother

\begin{document}

\setcounter{page}{0}
page~\thepage~\testifdivisibleby{page}{32}{livret \no \printdivisionresult{page}{32}}{}

\setcounter{page}{1}
page~\thepage~\testifdivisibleby{page}{32}{livret \no \printdivisionresult{page}{32}}{}

\setcounter{page}{2}
page~\thepage~\testifdivisibleby{page}{32}{livret \no \printdivisionresult{page}{32}}{}

\setcounter{page}{16}
page~\thepage~\testifdivisibleby{page}{32}{livret \no \printdivisionresult{page}{32}}{}

\setcounter{page}{32}
page~\thepage~\testifdivisibleby{page}{32}{ livret \no \printdivisionresult{page}{32}}{}

\setcounter{page}{64}
page~\thepage~\testifdivisibleby{page}{32}{ livret \no \printdivisionresult{page}{32}}{}

\end{document}

Eugene
Utilisateur confirmé
Utilisateur confirmé
Messages : 28
Inscription : mercredi 18 mars 2009, 08:01

Re: Numérotation livret

Message par Eugene »

Merci beaucoup pour le code, je n'aurais pas été capable d'en faire autant.

En réfléchissant un peu plus sur mon problème, je me suis aperçu que je m'étais trompé dans la formulation de mon problème. En effet, la première page est la page 1 et vue que je veux l'afficher sur la première page du livret, il faut donc que :
(numero_page - 1) soit divisible par 32.


De plus serait il possible que le numéro du premier livret soit 1 et non pas 0

Avec tous mes remerciements.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: Numérotation livret

Message par pg »

En changeant la syntaxe un peu (grâce au package xargs) avec des arguments optionnels, on peut obtenir ce que tu veux :

Code : Tout sélectionner

\documentclass{article}

\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{xargs}

\makeatletter
\newcount\temp@divisibility@count
\newcommandx{\testifdivisibleby}[5][2=]{%
% #1 = compteur dont on veut tester la divisibilité
% #2 = ajustement au numéro de page (par exemple +1, -1, etc.)
% #3 = nombre par lequel on divise
% #4 = code à éxécuter si c'est le cas
% #5 = code à éxécuter dans le cas contraire
  \temp@divisibility@count=\numexpr\value{#1}#2\relax
  \divide\temp@divisibility@count by #3\relax
  \multiply\temp@divisibility@count by #3\relax
  \ifnum\temp@divisibility@count=\numexpr\value{#1}#2\relax
    #4%
  \else
    #5%
  \fi
}
\newcommandx{\printdivisionresult}[4][1=0,3=]{%
% #1 = ajustement au résultat final (0, 1, -1, etc.)
% #2 = compteur dont on veut tester la divisibilité
% #3 = ajustement au compteur (+0, +1, -1, etc.)
% #4 = nombre par lequel on divise
  \temp@divisibility@count=\numexpr\value{#2}#3\relax
  \divide\temp@divisibility@count by #4\relax
  \advance\temp@divisibility@count#1\relax
  \the\temp@divisibility@count
}
\makeatother

\begin{document}

\setcounter{page}{1}
page~\thepage~\testifdivisibleby{page}[-1]{32}{livret \no \printdivisionresult[+1]{page}[-1]{32}}{}

\setcounter{page}{33}
page~\thepage~\testifdivisibleby{page}[-1]{32}{livret \no \printdivisionresult[+1]{page}[-1]{32}}{}

\setcounter{page}{65}
page~\thepage~\testifdivisibleby{page}[-1]{32}{livret \no \printdivisionresult[+1]{page}[-1]{32}}{}

\end{document}

Eugene
Utilisateur confirmé
Utilisateur confirmé
Messages : 28
Inscription : mercredi 18 mars 2009, 08:01

Re: [Résolu]Numérotation livret

Message par Eugene »

Ok merci bien, c'est juste ce qu'il me fallait.

J'en profite pour dire que si vous connaissez des tutos pour la programmation des fonctions je serais intéressé.