Journal Le retour de pacman en beamer

Posté par (page perso) . Licence CC by-sa
Tags :
25
28
mar.
2014

Salut à tous !

Il y a quelque temps déjà, j'avais présenté ici même une nouvelle façon d'afficher le compteur de slide en beamer, à l'aide d'une petit pacman dévorant avidement le nombre de page…

Tout y était : le pacman, les p'tits bonbons blancs, les plus gros… mais il manquait le fantôme, malheureux protagoniste oublié de l'histoire.

L'erreur est réparée, comme vous pouvez l'observer avec émotion sur cette présentation. Le paquet LaTeX à inclure est bien sûr dispo.

Alors, c'est ringard beamer ?

  • # Merci

    Posté par . Évalué à 3.

    Merci de partager !
    Est-ce que c'est normal que le pied-de page (avec pacman justement) descendent entre les slides 19-20 et 22-23 ?

    • [^] # Re: Merci

      Posté par (page perso) . Évalué à 4.

      Non, c'était un « bug », problème de taille de bounding box, grâce aux conseils avisés d'un collègue, c'est corrigé ! Merci pour l'œil de Lynx !

  • # classe !

    Posté par . Évalué à 2.

    C'est bien cool… Merci de partager ça avec nous ! Bon week-end !

  • # Merci infiniement.

    Posté par . Évalué à 3.

    Une journée chiante et fade s'annonçait. Heureusement ce grandiose paquet est là.

  • # Coquilles

    Posté par (page perso) . Évalué à 2.

    Il me semble que page 8 il faille écrire dragon et non canard.
    Et — peut-être faute de culture — page 9 j'aurais employé le verbe to believe et non to belive.

  • # Indispensable.

    Posté par . Évalué à 10.

    Excellent!
    Ça serait sympa par contre si les points les plus gros pouvaient apparaître non pas tout les 10 slides, mais plutôt à chaque changement de section? De telle façon, on se retrouverait mieux dans la présentation.

    • [^] # Re: Indispensable.

      Posté par . Évalué à 2.

      Bon je ne sais pas trop comment on peut faire cela avec Beamer/LaTeX, mais le hack dégueu c'est de le faire dans un script python à exécuter dans le Makefile qui compile la présentation…

      1. Générer une liste de booléens qui décrit si chaque frame suit directement une section
      2. Ajouter une condition à tester dans la boucle qui définit la taille du cercle correspondant dans pacman.sty.

      1.

      #!/usr/bin/python
      if __name__ == "__main__":
          # 2 solutions équivalentes pour le faire:
          # a) Pur Python, une boucle: (je plussoie celui qui réécrit ça de manière plus pythonesque)
          arr = []
          isnew = False
          with open('slides.tex', 'r') as f:
              for line in f:
                  if r"\section" in line:
                      isnew = True
                  if r'begin{frame}' in line:
                      arr.append(isnew)
                      isnew = False
      
          print "\def\newsec{{",
          for ii in arr: print "%d," % int(ii),
          print "0}}"
      
          # b) Idem, mais avec NumPy
          with open('slides.tex', 'r') as f:
              data = f.readlines()
          sections = [r"\section" in line for line in data]
          frames = [r"begin{frame}" in line for line in data]
          cframes = np.cumsum(frames) # Cumulative frame position
          secpos = np.where(sections) # positions of the sections
          frame_at_sec = cframes[secpos] # frame number at section positions
          sec_lists = np.zeros(cframes[-1])
          sec_lists[frame_at_sec] = 1
          print "\def\newsec{{",
          for ii in sec_lists: print "%d," % int(ii),
          print "0}}"

      (je suis sûr qu'il existe une regex pour faire pareil…)

      1. Insérer la sortie du code précédent quelque part dans le fichier tex (sed est notre ami, sinon le code Python pourrait le faire), et dans le pacman.sty, remplacer:
      \pgfmathparse{mod(\x,10) ? ".2mm" : ".4mm"}

      par:

      \pgfmathparse{ {\newsec[\x-A]}>0 ? ".4mm" : ".2mm"}

      Ou l'on remplace A par un offset (1 ou 2, selon la config du document).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.