Daumenkino in Fußzeile

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Daumenkino in Fußzeile

von Starship » Do 23. Jun 2016, 00:02

Ich konnte es mit ein bisschen rätseln lösen:

Die Berechnung darf keinen Wert <1 ergeben, das war der Fall. Daher folgender Code mit der Korrektur:
\newcommand*{\bildnr}{\numexpr(\intcalcMod{\numexpr(\value{page}-1)}{\numexpr\AnzBilder}+1)\relax} 
Liebe Grüße
Christian

von Starship » Mi 22. Jun 2016, 23:08

Hallo Kai,

ich würde mir Deine Lösung gerne abgucken (ebenfalls für eine Dissertation), aber mir ist nicht ganz klar, welche Zeilen durch deine beiden ersetzt werden können.

könntest Du vielleicht auch ein komplettes Minimalbeispiel liefern?

Vielen Dank,
Christian

von Kai Neumann » So 7. Feb 2016, 20:09

Hallo Zusammen,

ich schreibe derzeit meine Dissertation und war auch auf der Suche, wie ich eine Art Daumenkino erstelle.
Vielen Dank für das ausführliche Beispiel hier.

Ich hatte leider das Problem, dass ich nicht nur vier Bilder, sondern sechs brauchte. Dabei gab es ein Problem mit der Modulo-Rechnung, welche meiner Meinung nach falsch implementiert war.

Meine Lösung (getestet und funktioniert mit sechs Bildern) ist, das Paket intcalc zu nutzen und von dort die Funktion intcalcMod:
...
\usepackage{intcalc}
...
\newcommand*{\bildnr}{\numexpr\intcalcMod{\numexpr\value{page}}{\numexpr\AnzBilder}\relax}
...
Also nochmals vielen Dank!
Vielleicht kann dieser Beitrag ja dem Nächsten helfen, der auch mehr als vier Bilder benötigt!

von KOMA » Do 19. Feb 2009, 10:38

kFieLd hat geschrieben:Hab jetzt eine lauffähige Version gebastelt:
Ich sehe, Du hast das Prinzip verstanden. Freut mich!

Re: Daumenkino in Fußzeile

von kFieLd » Mi 18. Feb 2009, 18:19

oliverinspace hat geschrieben: Soll kein persönlicher Angriff sein, sondern soll nur zum Nachdenken anregen.
Du hast natürlich Recht. Es war auch erstmal eine Idee, deren Umsetzung mich gereizt hat.
Da du ja gerade selber mit deine Diplomarbeit dran bist, kannst du vielleicht nachvollziehen, dass ich mal was anderes zwischendurch machen möchte, um mich etwas abzulenken.
Ich weiß auch, dass ich diese Zeit trotzdem besser in die Bearbeitung der DA hätte investieren müssen :roll:

Endgültig hab ich mich noch nicht entschieden, ob ich dieses Daumenkino wirklich einbauen werde.

Viele Grüße,
kFieLd

von kFieLd » Mi 18. Feb 2009, 18:15

Danke KOMA für die Hinweise. Hab jetzt eine lauffähige Version gebastelt:
\documentclass{scrreprt}
\usepackage{scrpage2}
%Kopfzeilen anzeigen
\pagestyle{scrheadings}

\usepackage{graphicx}


%%%Daumenkino Start%%%%

%%%%Variablen%%%

\newcommand*{\AnzBilder}{4}              %<--Variablen anpassen
\newcommand*{\KinoPfad}{daumenkino/kino} %<--Variablen anpassen

%%%%Quelltext%%%
\newcommand*{\SafeboxName}{sbKino}

\usepackage{etex}

\makeatletter

%Erzeugt neue Saveboxen und füllt sie mit includegraphics-Anweisungen
%Aufruf: \NewSaveBoxes{sbKino}{5}{daumenkino/kino}
\newcommand*{\NewSaveBoxes}[3]{%
  \@tempcnta 1
  \@whilenum \@tempcnta< \numexpr(#2+1) \do{%
    %Savebox anlegen
    \expandafter\newsavebox\csname #1\the\@tempcnta\endcsname
    %Savebox mit Leben füllen
    \expandafter\savebox\csname #1\the\@tempcnta\endcsname{%
      \includegraphics{#3\the\@tempcnta}%
    }%
    \advance\@tempcnta 1
  }%
}

%Berechne (Aktuelle_Seitenzahl modulo Anzahl_Kino_Bilder)
\newcommand*{\bildnr}{\numexpr\value{page}-\AnzBilder*(\numexpr(\value{page}+1) / \AnzBilder\relax-1)\relax}

\newcommand*{\daumenkino}{%
  \usebox{\@nameuse{\SafeboxName\the\bildnr}}%
}

\makeatother
\NewSaveBoxes{\SafeboxName}{\AnzBilder}{\KinoPfad}
%%%%%%%%%%%%%%%%

%%%Aufruf%%%%%%%
\ofoot{\daumenkino} %<-- Eigentlicher Aufruf für Fußzeile

%%%Daumenkino Ende%%%%%


\begin{document}

a\newpage
b\newpage
c\newpage
d\newpage
e\newpage
f\newpage


\end{document}
Viele Grüße,
kFieLd

Re: Daumenkino in Fußzeile

von oliverinspace » Mi 18. Feb 2009, 16:56

kFieLd hat geschrieben:Hallo zusammen,

ich würde gerne in meiner Diplomarbeit ein kleines Daumenkino in der Fußzeile einfügen...
Ich denke auch wenn ihr schon fast die Lösung für das gesamte Problem gefunden habt muss ich hier mal den mahnenden Zeigefinger auspacken.
Überleg dir was du da machst. Da ich auch gerade am Schreiben meiner Diplomarbeit sitze kann ich das nachvollziehen. Man will was spezielles, was ganz besonderes machen, aber du musst auch versuchen keinen Kitsch einzubauen.

Ich weiss auch dass mein Professor nicht sehr glücklich darüber wäre, wenn ich meine wissenschaftliche Ausarbeitung mit nem Comic schmücke. Also vllt überlegst du selbst nochmal ob du das machen willst, bzw. suchst dir eine dritte Person die zu einer entsprechenden Meinung fähig ist (sollte also nicht gerade die Kindergärtnerin von deiner kleinen Schwester sein) und sprichst deine "Innovation" mit der durch.

Wenn einer meiner Kommilitonnen zu mir mit dieser Idee käme, würde ich sagen dass ich es nicht in einem wissenschaftlichen Artikel o.ä. angebracht finde.

Soll kein persönlicher Angriff sein, sondern soll nur zum Nachdenken anregen.

von KOMA » Mi 18. Feb 2009, 16:01

Nicht ganz. Wenn man \includegraphics im Kopf (oder auch im Fuß) der Seite verwendet, dann können sich die Argumente dieser Anweisung mit denen anderer \includegraphics-Anweisungen vermischen. Es kann also sein, dass irgendwo eine falsche Abbildung oder in falscher Größe oder Ausrichtung oder mit falschem Clipping gesetzt wird. Der Trick mit den Box-Registern ist nun, dass bei \savebox\BOX{foo} foo nicht erst expandiert (ausgeführt) wird, wenn die Box mit \usebox\BOX verwendet wird, sondern bereits, wenn die Box mit \savebox gespeichert wird. Damit ist das Problem dann beseitigt.

Wenn man viele Boxregister benötigt, kann man trotzdem diese Lösung verwenden. Man kann sich beispielsweise dann ein Makro schreiben, das eine ganze Reihe an Boxregistern anfordert (ungetestet):
\makeatletter
\newcommand*{\NewSaveBoxes}[2]{%
  \@tempcnta 1
  \@whilenum \@tempcnta<#2 \do{%
    \expandafter\newsavebox\csname #1\the\@tempcnta\endcsname
    \advance\@tempcnta 1
  }%
}
\NewSaveBoxes{kino}{20}
\@tempcnta 1
\@whilenum \@tempcnta<#2 \do{%
  \expandafter\savebox\csname kino\the\@tempcnta\endcsname{%
    \includegraphics{kino\the\@tempcnta}%
  }%
  \advance\@tempcnta 1
}%
\makeatother
Das sollte die Boxregister \kino1 bis \kino20 mit den Bildern kino1 bis kino20 füllen. Ähm, Anfänger nehmen vermutlich besser die while-Geschichte aus dem ifthen-Paket und einen eigenen Zähler, den man dann mit \stepcounter hochzählen kann, an Stelle des Zählerregisters \@tempcnta.

Damit einem dabei dann nicht die Boxregister ausgehen, sollte man noch
\usepackage{etex}
verwenden.

Achso: Das Problem mit graphicx ist bekannt und befindet sich auch schon seit langem in der "bugs database" des LaTeX-Projects.

von kFieLd » Mi 18. Feb 2009, 12:34

Wow, vielen Dank KOMA für die Lösungsvorschläge!

Der erste Vorschlag mit dem \edef funktioniert soweit. Der Zweite scheint mir doch etwas umständlicher, insbesondere wenn ich später doch mal 20 Bildchen im Daumenkino haben möchte.
KOMA hat geschrieben: Dann sei noch erwähnt, dass es ein grundsätzliches Problem mit \includegraphics im Kopf oder Fuß gibt. graphicx definiert leider diverse Variablen global, wertet diese dann aus, was dann zur Ausgabe führt. Diese Ausgabe wiederum kann noch bevor die eigentliche Ausgabe erfolgt dazu führen, dass eine neue Seite begonnen wird. Hat man dann eine \includegraphics-Anweisung im Kopf, so kommen sich die Variablendefinitionen gegenseitig ins Gehege. Besser wäre es deshalb die vier Abbildungen in vier Boxen abzulegen und diese dann in den Kopf zu setzen.
Könntest du das evtl. noch etwas genauer erklären? Ich hab nämlich noch ein zweites Logo in der Fußzeile per \includepraphics eingefügt.

Hab ich das richtig verstanden, dass dadurch unter Umständen eine leere Seite eingefügt werden kann? Wenn ja, wann genau? In meinem bisherigen Dokument (ca. 30 Seiten) hab ich bisher keine Probleme entdeckt.

Ich muss zugeben, so tief bin ich noch nicht in der Latex-Materie, aber willig zu lernen :)

Danke,
kFieLd

von KOMA » Mi 18. Feb 2009, 11:26

Zunächst sei erwähnt, dass man nicht mit \the<Zähler> rechnen sollte. Das ist nämlich bereits die Darstellung des Zähler, nicht dessen Wert. Der Wert eines Zählers ist \value{Zähler}.

Dann sei noch erwähnt, dass es ein grundsätzliches Problem mit \includegraphics im Kopf oder Fuß gibt. graphicx definiert leider diverse Variablen global, wertet diese dann aus, was dann zur Ausgabe führt. Diese Ausgabe wiederum kann noch bevor die eigentliche Ausgabe erfolgt dazu führen, dass eine neue Seite begonnen wird. Hat man dann eine \includegraphics-Anweisung im Kopf, so kommen sich die Variablendefinitionen gegenseitig ins Gehege. Besser wäre es deshalb die vier Abbildungen in vier Boxen abzulegen und diese dann in den Kopf zu setzen. hier zunächst einmal eine Lösung, ohne diesen Zusatz:
\newcommand*{\Dateiname}{}% reserveren, weil wir gleich \edef verwenden
\newcommand*{\kino}[1]{\edef\Dateiname{kino#1}\includegraphics{\Dateiname}}
\ofoot{\kino{\the\numexpr\value{page}-4*(\numexpr(\value{page}+1) / 4\relax-1)\relax}}
Dabei wird mit \numexpr ein e-TeX-Feature verwendet. Das sollte aber kein Problem sein, da e-TeX seit Jahren als Unterbau für LaTeX empfohlen ist und KOMA-Script sich inzwischen ebenfalls darauf verlässt. \edef wird an der Stelle verwendet, um in \Dateiname bereits den fertigen Namen zu haben und nicht noch irgendwelche Anweisungen.

Nun die Lösung, die vier Boxregister verbraucht und deshalb so nur für eine sehr kleine Anzahl an Abbildungen brauchbar ist:
\newsavebox\kinoA
\newsavebox\kinoB
\newsavebox\kinoC
\newsavebox\kinoD
\savebox\kinoA{\includegraphics{kino1}}
\savebox\kinoB{\includegraphics{kino2}}
\savebox\kinoC{\includegraphics{kino3}}
\savebox\kinoD{\includegraphics{kino4}}
\newcommand*{\Dateiname}{}% reserveren, weil wir gleich \edef verwenden
\makeatletter
\newcommand*{\kino}[1]{%
  \@tempcnta#1
  \usebox{\@nameuse{kino\@Alph\@tempcnta}}%
}
\makeatother
\ofoot{\kino{\numexpr\value{page}-4*(\numexpr(\value{page}+1) / 4\relax-1)\relax}}
Der Haupttrick dabei ist, über den temporären Zählerregister \@tempcnta un dmit Hilfe von \@Alph (so etwas ähnliches wie \Alph für Zähler) aus den Zahlen 1 bis 4 die Buchstaben A bis D zu machen und über \@nameuse daraus dann die Boxregister-Namen \kinoA bis \kinoB zu erzeugen. Die Definition von \kino könnte man auch so machen (das nun ungetestet):
\newcounter{kino}
\makeatletter
\newcommand*{\kino}[1]{%
  \setcounter{kino}{#1}%
  \usebox{\@nameuse{kino\Alph{kino}}}%
}
\makeatother

Nach oben