cerhu > comp.* > comp.text.tex

Alexandre Pachot (14/08/2019, 14h03)
Bonjour,

Je suis en train de regarder le code situé sur cette page :
[..]

Actuellement, la fonction \currtime[00:20] affiche l?heure courant plus
20 minutes. J?aimerai que cela m?ajoute également 20 minutes à l?heure
courante.

Lorsque j?ai :
\setcurrtime{10:00}
\currtime[00:20]
\currtime[00:20]

Cela m?affiche deux fois 10:20, alors que j?aimerais avoir 10:20 puis 10:40.

Quelqu?un a une idée??

Pour l?instant, j?ai du mal à comprendre ce type de fonction. Si
quelqu?un a un lien vers de la documentation afin que j?approfondisse
mes compétences, c?est le bienvenu :-)
Un bon petit (14/08/2019, 15h08)
Le 14/08/2019 à 14:03, Alexandre Pachot a écrit :
> Quelqu?un a une idée??


Moi ! Le programme est un peu amélioré afin de correctement gérer des
ajouts d'un grand nombre de minutes et/ou d'heures.

\documentclass{article}
\makeatletter
\newcount\curr@h
\newcount\curr@m
\newcount\tmp@cnt
\newcommand*\settime[1]{%
  \set@time#1\@nil \check@time
}
\def\set@time#1:#2\@nil{%
  \curr@h#1\relax\curr@m#2\relax\check@time
}
\def\add@time#1:#2\@nil{%
  \curr@h\numexpr\curr@h+#1\relax
  \curr@m\numexpr\curr@m+#2\relax
}
\def\check@time{%
  \tmp@cnt\curr@m \divide\tmp@cnt60
  \curr@m\numexpr\curr@m-60*\tmp@cnt\relax
  \advance\curr@h\tmp@cnt
  \tmp@cnt\curr@h \divide\tmp@cnt24
  \curr@h\numexpr\curr@h-24*\tmp@cnt\relax
}
\newcommand*\addtime[1]{%
  \add@time#1\@nil \check@time
}
\newcommand*\printtime{%
  \two@digits\curr@h\relax:\two@digits\curr@m\relax
}
\makeatother
\begin{document}
\settime{23:00}
\printtime

\addtime{00:20}
\printtime

\addtime{00:50}
\printtime

\addtime{49:600}
\printtime
\end{document}

> Pour l?instant, j?ai du mal à comprendre ce type de fonction. Si
> quelqu?un a un lien vers de la documentation afin que j?approfondisse
> mes compétences, c?est le bienvenu :-)


Sans vouloir fourguer le bouzin à tout prix, il y a une description des
la programmation sur les entiers pages 197 à 169, et même un exo sur les
heures p 169. Cela vous aidera peut-être...

[..]
Alexandre Pachot (14/08/2019, 16h30)
Le 19-08-14 à 09:08, Un bon petit a écrit :
> Moi ! Le programme est un peu amélioré afin de correctement gérer des
> ajouts d'un grand nombre de minutes et/ou d'heures.


Merci beaucoup, ça marche du feu de Dieu?!

Avec fctt, pas le temps de faire une sieste qu?on a déjà la réponse :-)

Merci pour le lien, j?ai de la lecture en réserve :-)

Pour information, pour ceux qui passent après et pour qui le code ne
marcherait pas, il y a un conflit avec [french]{babel}, il suffit de
remplacer les : par des h, voire par ~h~ dans la commande printtime? et
on obtient un résultat plus conforme à la typo française :-)
Alexandre Pachot (14/08/2019, 16h52)
Le 19-08-14 à 09:08, Un bon petit a écrit :
> Moi ! Le programme est un peu amélioré afin de correctement gérer des
> ajouts d'un grand nombre de minutes et/ou d'heures.


Oups? j?ai parlé trop rapidement.

Voilà un ECM. À la troisième section, je cherche à avoir 8 h 10 - 8 h 20
plutôt que 8 h 00 - 8 h 10

\documentclass{article}
\usepackage[french]{babel}

\makeatletter
\newcount\curr@h
\newcount\curr@m
\newcount\tmp@cnt
\newcommand*\settime[1]{%
\set@time#1\@nil \check@time
}
\def\set@time#1h#2\@nil{%
\curr@h#1\relax\curr@m#2\relax\check@time
}
\def\add@time#1h#2\@nil{%
\curr@h\numexpr\curr@h+#1\relax
\curr@m\numexpr\curr@m+#2\relax
}
\def\check@time{%
\tmp@cnt\curr@m \divide\tmp@cnt60
\curr@m\numexpr\curr@m-60*\tmp@cnt\relax
\advance\curr@h\tmp@cnt
\tmp@cnt\curr@h \divide\tmp@cnt24
\curr@h\numexpr\curr@h-24*\tmp@cnt\relax
}
\newcommand*\addtime[1]{%
\add@time#1\@nil \check@time
}
\newcommand*\printtime{%
\two@digits\curr@h\relax~h~\two@digits\curr@m\rela x
}
\makeatother

\newcommand{\duree}[1]{%
\marginpar{%
\begin{flushright}
\printtime \addtime{#1} \printtime
\end{flushright}
}
}

\begin{document}

\section{Ce qui marche}
\settime{23h00}
\printtime

\addtime{00h20}
\printtime

\addtime{00h50}
\printtime

\addtime{49h600}
\printtime

\settime{8h00}
\section{Dix minutes d?échauffement}\duree{0h10}
Un peu de blabla.

\section{Ce qui ne marche pas}\duree{0h10}
Encore du blabla.

\end{document}
Un bon petit (14/08/2019, 17h27)
Le 14/08/2019 à 16:52, Alexandre Pachot a écrit :
> Le 19-08-14 à 09:08, Un bon petit a écrit :
>> Moi ! Le programme est un peu amélioré afin de correctement gérer des
>> ajouts d'un grand nombre de minutes et/ou d'heures.

> Oups? j?ai parlé trop rapidement.
> Voilà un ECM. À la troisième section, je cherche à avoir 8 h 10 - 8 h
> 20 plutôt que 8 h 00 - 8 h 10


Cela « ne marche pas » car les affectations des compteurs ne sont pas
globales (c'est une fonctionnalité _voulue_ ce n'est pas un bug) et dès
lors qu'elles sont faites dans un groupe (\marginpar, intérieur d'un
environnement, etc), elles sont perdues lorsque le groupe se referme.

Il faut donc rendre les affectations globales.

\makeatletter
\newcount\curr@h
\newcount\curr@m
\newcount\tmp@cnt
\newcommand*\settime[1]{%
    \set@time#1\@nil \check@time
}
\def\set@time#1h#2\@nil{%
    \global\curr@h#1\relax\global\curr@m#2\relax\check @time
}
\def\add@time#1h#2\@nil{%
    \global\curr@h\numexpr\curr@h+#1\relax
    \global\curr@m\numexpr\curr@m+#2\relax
}
\def\check@time{%
    \tmp@cnt\curr@m \divide\tmp@cnt60
    \global\curr@m\numexpr\curr@m-60*\tmp@cnt\relax
    \global\advance\curr@h\tmp@cnt
    \tmp@cnt\curr@h \divide\tmp@cnt24
    \global\curr@h\numexpr\curr@h-24*\tmp@cnt\relax
}
\newcommand*\addtime[1]{%
    \add@time#1\@nil \check@time
}
\newcommand*\printtime{%
    \two@digits\curr@h\relax~h~\two@digits\curr@m\rela x
}
\makeatother
Alexandre Pachot (14/08/2019, 17h44)
Le 19-08-14 à 11:27, Un bon petit a écrit :
> Cela « ne marche pas » car les affectations des compteurs ne sont pas
> globales (c'est une fonctionnalité _voulue_ ce n'est pas un bug) et dès
> lors qu'elles sont faites dans un groupe (\marginpar, intérieur d'un
> environnement, etc), elles sont perdues lorsque le groupe se referme.
> Il faut donc rendre les affectations globales.


Merci pour le changement? mea culpa, je n?avais pas précisé ce que je
voulais en faire au départ?!
Discussions similaires
Je veux convertir des heures en minutes; ex.: 2h20 = 140 minutes

Dans une requête, conversion minutes en heures minutes

St Quentin en Yvelines, parking à 1,60 Euros jusqu'a 15 minutes, de 16 minutes à 4 heures gratuit

HS: Excel une fonction qui passe de minutes en heures-minutes ?


Fuseau horaire GMT +2. Il est actuellement 12h20. | Privacy Policy