J'utilise la librairie Calendar de PGF et j'ai un problème de
positionnement.
Je souhaite afficher un calendrier avec, au dessus des dates, pour
chaque colonne, le nom du jour, un peu comme le sort la commande `cal`
sur unix:
December 2008
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Voilà la partie utile de mon code (compile sans problème sur MiKTeX
2.7):
\documentclass{minimal}
\setlength{\paperwidth}{8cm}
\setlength{\paperheight}{8cm}
\usepackage{calc}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{calendar}
\setlength{\hoffset}{-1in}
\setlength{\voffset}{-1in}
\setlength\textwidth{\paperwidth}
\setlength\textheight{\paperheight}
% Let's get started
\begin{document}
% A counter
\newcount\MyDate
% Loop on the months
\foreach \month in
{01,02,03,04,05,06,07,08,09,10,11,12}
{
\begin{tikzpicture}%
\calendar (cal) [
dates=2009-\month-01 to 2009-\month-last,
week list,
month label above centered,
% Shift month a little to let space for the day names
every month/.append style={yshift=.5cm},
day xshift=1cm,
day yshift=1cm,
execute at begin day scope={\ifdate{at most=\month-07}{%
% Get the current date (between 1 and 7)
\MyDate=\pgfcalendarcurrentday%
% Move it between 0 and 6
\advance\MyDate by -1%
% If the date is > to the weekday, then shift by twice the height of a
cell
% Otherwise, only by the heigth of a cell
% Print the day name (they are all on the same line)
\ifnum \MyDate>\pgfcalendarcurrentweekday %
\node[yshift=2cm] {\pgfcalendarweekdayshortname
{\pgfcalendarcurrentweekday}}%
\else%
\node[yshift=1cm] {\pgfcalendarweekdayshortname
{\pgfcalendarcurrentweekday}}%
\fi}
{%
% For days after the seventh, do nothing
};%
}
]%
;
\end{tikzpicture}
\newpage
}
\end{document}
J'ai mis quelques commentaires pour expliquer ce que je fais.
Pour le mois de juin, pour lequel le 1er du mois est un lundi, j'ai:
\pgfcalendarcurrentday=01 et \pgfcalendarcurrentweekday=0
donc \MyDate=1
puis on décrémente \MyDate qui devient 0
puis on teste: \ifnum 0>0
C'est faux, donc je m'attends à passer dans
\node[yshift=1cm] {\pgfcalendarweekdayshortname
{\pgfcalendarcurrentweekday}}%
et pourtant, vu la position des noms des jours, on a pris la branche
"VRAI", où on décale de 2cm.
Est-ce que vous comprenez ce que je fais mal?
Question bonus: comment est-ce qu'on débugge efficacement, en LaTeX, à
part à coup d'affichage?
Merci
> Pour le mois de juin, pour lequel le 1er du mois est un lundi, j'ai:
> \pgfcalendarcurrentday=01 et \pgfcalendarcurrentweekday=0
> donc \MyDate=1
> puis on décrémente \MyDate qui devient 0
> puis on teste: \ifnum 0>0
>
> C'est faux, donc je m'attends à passer dans
> \node[yshift=1cm] {\pgfcalendarweekdayshortname
> {\pgfcalendarcurrentweekday}}%
> et pourtant, vu la position des noms des jours, on a pris la branche
> "VRAI", où on décale de 2cm.
>
> Est-ce que vous comprenez ce que je fais mal?
Je ne vois pas le probleme. Si je mets un x dans le VRAI-code
\ifnum \MyDate>\pgfcalendarcurrentweekday %
\node[yshift=2cm] {x\pgfcalendarweekdayshortname
{\pgfcalendarcurrentweekday}}%
\else%
\node[yshift=1cm] {\pgfcalendarweekdayshortname
{\pgfcalendarcurrentweekday}}%
\fi}
je ne vois pas ce x dans juin (mais dans lundi et mardi de juillet).
--
Ulrike Fischer
Ah, c'est intéressant... Parce que moi, j'obtiens ces x, en juin.
Chez moi, le mois de juin n'est pas calculé correctement, et les noms
des jours se retrouvent au-dessus du mois (et avec les x, dans votre
code), ce qui n'est apparemment pas ce que vous obtenez. C'est le seul
mois qui est comme ça, parce que c'est le seul mois pour lequel le
premier du mois est un lundi (pour un calendrier 2010, février, mars
et novembre présentent le même problème).
J'utilise pdflatex, voilà les détails de version:
$ pdflatex -version
MiKTeX-pdfTeX 2.7.3235 (1.40.9) (MiKTeX 2.7)
J'ai exactement le même problème sur une autre machine (une Debian à
jour):
$ pdflatex -version
pdfTeX using libpoppler 3.141592-1.40.3-2.2 (Web2C 7.5.6)
kpathsea version 3.5.6
Copyright 2007 Peter Breitenlohner (eTeX)/Han The Thanh (pdfTeX).
Kpathsea is copyright 2007 Karl Berry and Olaf Weber.
There is NO warranty. Redistribution of this software is
covered by the terms of both the pdfTeX using libpoppler copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the pdfTeX using libpoppler source.
Primary author of pdfTeX using libpoppler: Peter Breitenlohner (eTeX)/
Han The Thanh (pdfTeX).
Kpathsea written by Karl Berry, Olaf Weber, and others.
Compiled with libpng 1.2.27; using libpng 1.2.27
Compiled with zlib 1.2.3.3; using zlib 1.2.3.3
Compiled with libpoppler version 3.00
PGF est en 2.00-1 sur la Debian et estampillé 2008-02-26 17:29:22 sur
MiKTeX.
Merci
>> \ifnum \MyDate>\pgfcalendarcurrentweekday %
>> \node[yshift=2cm] {x\pgfcalendarweekdayshortname
>> {\pgfcalendarcurrentweekday}}%
>> \else%
>> \node[yshift=1cm] {\pgfcalendarweekdayshortname
>> {\pgfcalendarcurrentweekday}}%
>> \fi}
>>
>> je ne vois pas ce x dans juin (mais dans lundi et mardi de juillet).
>
> Ah, c'est intéressant... Parce que moi, j'obtiens ces x, en juin.
>
> Chez moi, le mois de juin n'est pas calculé correctement, et les noms
> des jours se retrouvent au-dessus du mois (et avec les x, dans votre
> code), ce qui n'est apparemment pas ce que vous obtenez. C'est le seul
> mois qui est comme ça, parce que c'est le seul mois pour lequel le
> premier du mois est un lundi (pour un calendrier 2010, février, mars
> et novembre présentent le même problème).
>
> J'utilise pdflatex, voilà les détails de version:
> PGF est en 2.00-1 sur la Debian et estampillé 2008-02-26 17:29:22 sur
> MiKTeX.
Mets \listfiles au debut du document et compare les versions:
minimal.cls 2001/05/25 Standard LaTeX minimal class
calc.sty 2005/08/06 v4.2 Infix arithmetic (KKT,FJ)
pgf.sty 2008/01/15 v2.00 (rcs-revision 1.12)
pgfrcs.sty 2008/02/20 v2.00 (rcs-revision 1.21)
pgfrcs.code.tex
pgfcore.sty 2008/01/15 v2.00 (rcs-revision 1.6)
graphicx.sty 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
keyval.sty 1999/03/16 v1.13 key=value parser (DPC)
graphics.sty 2006/02/20 v1.0o Standard LaTeX Graphics (DPC,SPQR)
trig.sty 1999/03/16 v1.09 sin cos tan (DPC)
graphics.cfg 2007/01/18 v1.5 graphics configuration of teTeX/TeXLive
pdftex.def 2008/09/08 v0.04l Graphics/color for pdfTeX
pgfsys.sty 2008/02/07 v2.00 (rcs-revision 1.31)
pgfsys.code.tex
pgfsyssoftpath.code.tex 2008/01/23 (rcs-revision 1.6)
pgfsysprotocol.code.tex 2006/10/16 (rcs-revision 1.4)
xcolor.sty 2007/01/21 v2.11 LaTeX color extensions (UK)
color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive
pgfcore.code.tex
pgfcomp-version-0-65.sty 2007/07/03 v2.00 (rcs-revision 1.7)
pgfcomp-version-1-18.sty 2007/07/23 v2.00 (rcs-revision 1.1)
tikz.sty 2008/02/13 v2.00 (rcs-revision 1.27)
pgffor.sty 2007/11/07 v2.00 (rcs-revision 1.8)
pgffor.code.tex
tikz.code.tex
pgfcalendar.sty
pgfcalendar.code.tex 2007/07/23 v2.00 (rcs-revision 1.11)
supp-pdf.tex
--
Ulrike Fischer
> pdftex.def 2008/09/08 v0.04l Graphics/color for pdfTeX
Sur la Debian: pdftex.def 2007/01/08 v0.04d Graphics/color for
pdfTeX
> supp-pdf.tex
N'apparaît pas, sur la Debian.
Merci
J'obtiens la même liste sur MiKTeX
> pdftex.def 2008/09/08 v0.04l Graphics/color for pdfTeX
Debian: pdftex.def 2007/01/08 v0.04d Graphics/color for pdfTeX
> supp-pdf.tex
Pas listé sur la Debian.
Merci
J'ai trouve la raison:
Ne termine pas la ligne suivante avec un % directement apres le -1,
sinon TeX continuera a executer les commandes suivantes en recherche de
nombres.
\advance\MyDate by -1
En general c'est mieux de termine les nombres avec \relax: -1\relax
(Je ne sais pas, pourquoi je n'ai pas vu le probleme, probablement un
change a cause du copier/coler).
--
Ulrike Fischer
Effectivement! :) Merci
> En general c'est mieux de termine les nombres avec \relax: -1\relax
D'accord. Je sens bien que les introductions à LaTeX ne me suffisent
plus, j'ai récupéré ce matin des documents sur TeX lui-même, en
particulier http://www.ctan.org/get/info/impatient/fr/fbook.pdf qui
m'a l'air adapté à ce que je cherche, ainsi que http://en.wikibooks.org/wiki/TeX
mais qui n'est pas encore très complet.
Bonne journée