Grafiken "automatisch" in den Anhang kopieren?

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Keba
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Do 18. Nov 2010, 19:57

Grafiken "automatisch" in den Anhang kopieren?

Beitrag von Keba »

Hallo,

In der Hoffnung im richtigem Forum zu sein:

In meinem LaTeX-Dokument füge ich eine Reihe Bilder ein, so z.B.:
{\includegraphics[width=0.5\textwidth, height=0.25\textwidth]{../img/foo}}
Nun sind diese Bilder doch eher klein, so dass ich meinen Lesern im Anhang größere Versionen zur Verfügung stellen möchte. Dabei haben die Bilder den gleichen Namen; es wird nur ein _big angehangen:
{\includegraphics{../img/foo_big}}
Da ich das für recht viele Grafiken genauso mache, wäre es sinnvoll ein Makro zu schreiben, das sich im Verlauf des Dokuments die Namen merkt und schließlich im Anhang nacheinander ausgibt.

Leider hab ich keine Ahnung wie das geht und bitte euch um entsprechende Tips :)

Vielen Dank schonmal, Keba :)

alan-g
Forum-Anfänger
Forum-Anfänger
Beiträge: 19
Registriert: Fr 1. Jul 2011, 19:09

Beitrag von alan-g »

Obwohl du mit "Anhang" vmtl. nicht das meinst was ich gleich schreibe... Ein minimal anderer Vorschlag: Verwende das "embedfile"-Paket von Heiko Oberdiek. Du müsstest dann
\includegraphics[width=0.5\textwidth, height=0.25\textwidth]{../img/foo}
\embedfile{../img/foo_big}
im Code schreiben (könnte natürlich mit einem "newcommand"-Befehl abgekürzt werden).

Hätte folgende Vorteile:
- Deine Lesern erhalten die Bilder so, wie du sie auch hast, also möglicherweise mit EXIF-, IPTC- und/oder XMP-Metadaten.
- Seitenzahl der PDF-Datei wird nicht größer.

Hagbard Celine
Forum-Century
Forum-Century
Beiträge: 152
Registriert: Mi 23. Feb 2011, 22:13
Wohnort: Halle (Saale)

Beitrag von Hagbard Celine »

Hier mein Vorschlag:
\usepackage{graphicx}
\usepackage{etoolbox}
\usepackage{xifthen}

\newcount\bilderzaehler% zaehlt die eingefuegten Bilder
\newcount\schleifenzaehler% Zaehlvariable in while-Schleife

\bilderzaehler=1% Bilderzaehler auf eins setzen

\newcommand{\bildrein}[1]% Befehl zum einfuegen eines Bildes
{%
	\includegraphics[width=0.5\textwidth, height=0.25\textwidth]{#1}% Bild einfuegen
	\csgdef{bild\number\bilderzaehler}{\includegraphics{#1_big}}% Befehl definieren, um Bild spaeter gross einzufuegen
	\advance\bilderzaehler by 1% Bilderzaehler um eins erhoehen
}

\newcommand{\bilderauslesen}% Befehl zum ausgeben der grossen Bilder
{%
	\schleifenzaehler=1% Schleifenzaehler auf eins setzen
	\advance\bilderzaehler by 1% Bilderzaehler erhoehen fuer Vergleich in Schleife
	\whiledo{\number\schleifenzaehler<\number\bilderzaehler}% Schleife zur Ausgabe der Bilder
	{%
		\csuse{bild\number\schleifenzaehler}% Ausgabe eines Bildes
		\advance\schleifenzaehler by 1% Schleifenzaehler um eins erhoehen
	}
	\advance\bilderzaehler by -1% Bilderzaehler um eins reduzieren (auf alten Stand setzen)
}
Der erste Befehl ist zum einfügen eines (kleinen) Bildes. Der zweite zur Ausagbe aller großen Bilder. An der Formatierung muss natürlich noch gefeilt werden.

Keba
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Do 18. Nov 2010, 19:57

Beitrag von Keba »

Hallo,
alan-g hat geschrieben: Hätte folgende Vorteile:
- Deine Lesern erhalten die Bilder so, wie du sie auch hast, also möglicherweise mit EXIF-, IPTC- und/oder XMP-Metadaten.
- Seitenzahl der PDF-Datei wird nicht größer.
Danke für den Vorschlag, aber das hat leider den Nachteil, dass es ausgedruckt keine großen Versionen der Bilder gibt…
Hagbard Celine hat geschrieben:Hier mein Vorschlag […]
Der erste Befehl ist zum einfügen eines (kleinen) Bildes. Der zweite zur Ausagbe aller großen Bilder. An der Formatierung muss natürlich noch gefeilt werden.
Danke, genau sowas hab ich gesucht! :)

Allerdings wird bei einem \bilderauslesen nur das letzte Bild ausgegeben, irgendwas passt da leider nicht. :(

Grüße, Keba.

Hagbard Celine
Forum-Century
Forum-Century
Beiträge: 152
Registriert: Mi 23. Feb 2011, 22:13
Wohnort: Halle (Saale)

Beitrag von Hagbard Celine »

Das kann daran liegen, dass zwischen den Bildern keinerlei Formatierung angegeben war.
Ich habe den Eingabebefehl so geändert, dass standardmäßig nach dem großen Bild eine neue Seite angefangen wird. Über ein optionales Argument kann das bei der Eingabe für jedes Bild einzeln geändert werden.
\newcommand{\bildrein}[2][\newpage]% Befehl zum einfuegen eines Bildes
{%
	\includegraphics[width=0.5\textwidth, height=0.25\textwidth]{#2}% Bild einfuegen
	\csgdef{bild\number\bilderzaehler}{\includegraphics{#2_big}#1}% Befehl definieren, um Bild spaeter gross einzufuegen
	\advance\bilderzaehler by 1% Bilderzaehler um eins erhoehen
}

Keba
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Do 18. Nov 2010, 19:57

Beitrag von Keba »

Hallo,

Nein, ein \newpage hilft nicht, scheinbar liegt es an der von mir verwendeten Umgebung figure und/oder des Befehls subfloat. Bei diesem Minimalbeispiel
\documentclass{scrartcl}

% packages
\usepackage{subfig}
\usepackage{graphicx}
\usepackage{etoolbox}
\usepackage{xifthen}

% commands
\newcount\bilderzaehler% zaehlt die eingefuegten Bilder
\newcount\schleifenzaehler% Zaehlvariable in while-Schleife

\bilderzaehler=1% Bilderzaehler auf eins setzen 

\newcommand{\bildrein}[1]% Befehl zum einfuegen eines Bildes
{%
   \includegraphics[width=0.5\textwidth, height=0.25\textwidth]{#1}% Bild einfuegen
   \csgdef{bild\number\bilderzaehler}{bla}% Befehl definieren, um Bild spaeter gross einzufuegen
   \advance\bilderzaehler by 1% Bilderzaehler um eins erhoehen
}

\newcommand{\bilderauslesen}% Befehl zum ausgeben der grossen Bilder
{%
   \schleifenzaehler=1% Schleifenzaehler auf eins setzen
   \advance\bilderzaehler by 1% Bilderzaehler erhoehen fuer Vergleich in Schleife
   \whiledo{\number\schleifenzaehler<\number\bilderzaehler}% Schleife zur Ausgabe der Bilder
   {%
      \csuse{bild\number\schleifenzaehler}% Ausgabe eines Bildes
      \advance\schleifenzaehler by 1% Schleifenzaehler um eins erhoehen
   }
   \advance\bilderzaehler by -1% Bilderzaehler um eins reduzieren (auf alten Stand setzen)
}

% document
\begin{document}
\section{small images}
  \begin{figure}[htbp] 
    \subfloat[1]{\bildrein{foobar}}
    \subfloat[2]{\bildrein{foobar}}\\
    \subfloat[3]{\bildrein{foobar}}
    \subfloat[4]{\bildrein{foobar}}
    \caption{foo}
  \end{figure}

\section{big images}
  \bilderauslesen

\end{document}
… wird im zweiten Abschnitt nur einmal „bla“ ausgegeben, statt der erwarteten vier mal. Außerhalb der figure funktioniert das ganze wie gewollt.

Ich benötige allerdings figure, da ich zum einem Bildunterschriften einfügen und zum anderen auf Bilder verweisen möchte.

Wie bringe ich deine Makros nun mit der Umgebung in Einklang? :)

Vielen Dank schonmal, Keba[/code]

Hagbard Celine
Forum-Century
Forum-Century
Beiträge: 152
Registriert: Mi 23. Feb 2011, 22:13
Wohnort: Halle (Saale)

Beitrag von Hagbard Celine »

Hallo,
da habe ich offenbar nicht ausreichend getestet, was ich gepostet habe. Soweit ich das sehe, liegt es dran, dass im Befehl \bildrein noch ein \global vor das \advance\bilderzaehler muss. Das sollte das Problem beheben und nur noch die Frage der Formatierung offen lassen.
Gruß,
Jonas

Keba
Forum-Anfänger
Forum-Anfänger
Beiträge: 21
Registriert: Do 18. Nov 2010, 19:57

Beitrag von Keba »

Hallo,
Hagbard Celine hat geschrieben:Hallo,
Soweit ich das sehe, liegt es dran, dass im Befehl \bildrein noch ein \global vor das \advance\bilderzaehler muss. Das sollte das Problem beheben und nur noch die Frage der Formatierung offen lassen.
Vielen Dank, ja das löst das Problem :)

Die Formatierung hinzubiegen ist ja kein großes Thema mehr, das bekomm ich schon hin. :)

Grüße, Keba.

Antworten