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.
Numérotation livret
Numérotation livret
Dernière modification par Eugene le dimanche 22 novembre 2009, 08:45, modifié 1 fois.
-
- Modérateur honoraire
- Messages : 6962
- Inscription : mercredi 15 février 2006, 13:18
- Localisation : le havre
- Contact :
Re: Numérotation livret
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
Olivier
Aller les gars au boulot
Olivier
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.
Par solidarité, pas de MP.
Re: Numérotation livret
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}
Re: Numérotation livret
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 :
De plus serait il possible que le numéro du premier livret soit 1 et non pas 0
Avec tous mes remerciements.
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.
Re: Numérotation livret
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}
Re: [Résolu]Numérotation livret
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é.
J'en profite pour dire que si vous connaissez des tutos pour la programmation des fonctions je serais intéressé.
-
- Sujets similaires
- Réponses
- Vues
- Dernier message
-
- 2 Réponses
- 1327 Vues
-
Dernier message par aperus