PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abbildungen "speichern" in bildlastigen Dokumenten



simon
01-04-2011, 07:44
Guten Tag.

Ich habe folgende Aufgabenstellung: In einem Dokument mit sehr vielen Abbildungen möchte ich alle Abbildungsumgebungen an einer Stelle sammeln, um sie im Hauptdokument an geeigneter Stelle dann jeweils mit einem einzigen (einzeiligen) Befehl aufrufen zu können.

Es ist einfach, die Abbildungen in Befehle der Form \xfigureA, \xfigureB etc. zu packen.

Ich möchte sie jedoch alle hintereinander mit demselben Befehl definieren können, wobei die Reihenfolge die Nummer vorgeben soll. Und zwar so, dass ich sie dann im Text mit \xfigure{1}, \xfigure{2} etc. aufrufen kann.

Meinen Versuch seht Ihr unten.
Die Verwendung von \csname etc. zeigt Euch, dass ich das Konzept (trotz www.mrunix.de/forums/showthread.php?t=64815) noch nicht verstanden habe.

Daher würde ich mich sehr über Eure Hilfe freuen!

Vielen Dank und einen schönen Tag,
simon



\documentclass{article}

\newcounter{figurecounter}
\setcounter{figurecounter}{0}

%% Definition des Befehls \figureN (N=1,2,....),
%% der Abbildung N beschreibt und setzt
\stepcounter{figurecounter}
\expandafter\xdef\csname figure\thefigurecounter \endcsname[1][t!]{
\begin{figure}[#1]
Hier binde ich meine Abbildung ein.
\end{figure}
}

%% Definition des Befehls \xfigure,
%% der durch \xfigure{N} den Befehl \figureN aufruft (N=1,2,...)
%% oder auch als \xfigure[b]{N} mit Positionierungsparameter.
\newcommand\xfigure[2][t!]{\csname figure#2\endcsname{#1}}

\begin{document}
Text Text Text\xfigure{1} Text Text\xfigure[b]{1}
\end{document}

Schweinebacke
01-04-2011, 08:47
\xdef expandiert die Definition bereits vollständig. Damit das geht, darf man in der Definition natürlich nur vollexpandierbaren Code verwenden. Darüber hinaus ist \xdef TeX und nicht LaTeX. Deshalb wird die Anzahl und Art der Argumente ganz anders definiert als bei \newcommand etc. Du könntest jetzt natürlich \xdef einfach durch \newcommand ersetzen. Aber ich bin ehrlich gesagt im Zweifel, ob Dein Ansatz überhaupt eine gute Idee ist. Gerade wenn es wirklich sehr viele Bilder sind, könnte das am Ende ein Speicherproblem werden. Warum packst Du nicht einfach alle Gleitumgebungen einzeln in filecontents-Umgebungen (Paket filecontents verwenden, damit Änderungen in den filecontents-Umgebungen auch in die Dateien geschrieben werden). Dann kannst Du sie später per \input laden.

simon
02-04-2011, 11:55
Guten Tag und vielen Dank für diesen sehr wertvollen Hinweis!

Ich habe das Problem also wie folgt (und wie von Schweinebacke vorgeschlagen) gelöst:


\documentclass{article}
\usepackage{filecontents}

\newcounter{figurecounter}
\setcounter{figurecounter}{0}

\stepcounter{figurecounter}
\begin{filecontents*}{figure\thefigurecounter.tex}
\begin{figure}[h!] ABBILDUNG 1 \end{figure}
\end{filecontents*}

\begin{document}
Text\input{figure1}
\end{document}

Allerdings will es mir nicht gelingen, die Umgebung filecontents* in eine andere Umgebung zu stecken. Ich würde nämlich gerne definieren:


\newenvironment{newfigure}
{\stepcounter{figurecounter}
\begin{filecontents*}{figure\thefigurecounter.tex} }
{\end{filecontents*}}

Fällt Euch hierzu eine Lösung ein?

Ein sonniges Wochenende wünscht
simon

simon
13-04-2011, 19:43
Guten Abend.

Ich wollte noch einmal nachfragen, ob jemand von Euch eine Idee hat, wie ich das geschilderte Problem mit der filecontents*-Umgebung lösen könnte.

Vielen Dank und Gruß,
Simon

voss
13-04-2011, 21:36
Ich wollte noch einmal nachfragen, ob jemand von Euch eine Idee hat, wie ich das geschilderte Problem mit der filecontents*-Umgebung lösen könnte.


Das Beispiel schreibt die alle figure-Ungebungsinhalte in externe
Dateien (dateiname.figNo), die Dann über \ReadFig{numemr} eingelsen werden können.


\documentclass{article}
\usepackage{fancyvrb}
\newcounter{figurecounter}
\setcounter{figurecounter}{0}

\let\Figure\figure
\let\endFigure\endfigure

\newcommand\ReadFig[2][htb]{\begin{Figure}[#1]
\input{\jobname.fig#2}
\end{Figure}}

\renewcommand\figure{%
\VerbatimEnvironment
\stepcounter{figurecounter}
\begin{VerbatimOut}{\jobname.fig\thefigurecounter} }
\def\endfigure{\end{VerbatimOut}}


\begin{document}
Text Text Text
\begin{figure}
\centering
foo bar bz
\caption{blah}\label{foo}
\end{figure}

Text Text

\begin{figure}
\centering
foo bar baz
\caption{blah blub}\label{bar}
\end{figure}

Text Text
\clearpage
\ReadFig{1}
\ReadFig[b]{2}

\end{document}


Herbert

simon
14-04-2011, 07:23
Lieber Herbert.

Vielen, vielen Dank. Deine Lösung wird mir bei Manuskripten mit zahlreichen Abbildungen sicherlich weiterhelfen.

Grüße aus Berlin,
Simon