Flexible Einbindung schwebender Umgebungen aus externen Dateien

Flexible Einbindung schwebender Umgebungen aus externen Dateien

Ich bin daran interessiert, den im folgenden Austausch beschriebenen Ansatz zu verwenden:

Verschieben Sie Abbildungen in einem Dokument mit einem einfachen Befehl

Kurz gesagt besteht die Idee darin, beschriftete Abbildungs- und Tabellenumgebungen in einer Datei zu speichern und sie in Ihrer Master-Tex-Datei durch Verweisen auf ihre Beschriftung zu positionieren. Auf diese Weise wird das Verschieben von Abbildungen/Tabellen und das wiederholte Einfügen oder die gemeinsame Nutzung von Abbildungen über mehrere Dokumente hinweg vereinfacht.

Der Code geschrieben vonegregund wie oben beschrieben funktioniert gut für Abbildungen und Tabellen, funktioniert aber nicht mehr mit der sidewaysfigureUmgebung des rotatingPakets.Frage 1: Kann der Code angepasst werden, um eine seitliche Figur zu akzeptieren?

Um diese Frage in sich geschlossen zu machen, werde ich kopierenegreg's Code. Ich habe den Originalcode ein wenig geändert, um ihn meinem Geschmack anzupassen.

Den Code speichere ich in einer .styDatei und rufe ihn mit auf \usepackage{floats}.

Der ursprüngliche Code sah vor, dass der Benutzer die Floats in einer Datei mit demselben Namen wie die Masterdatei, aber mit einer .floErweiterung, speichert. Ich stellte fest, dass ich mehrere Masterdokumente verwenden/wiederverwenden wollte, daher bestand die wichtigste Änderung, die ich am ursprünglichen Code vornahm, darin, dem Benutzer zu ermöglichen, den Namen der .texDatei anzugeben, in der die Floats gespeichert sind. Dies geschieht mit dem Befehl \loadfloats{figures}, wobei die Floats figures.texim selben Verzeichnis wie die Masterdatei gespeichert werden.

Kommentare sind natürlich willkommen. Ich habe noch zwei weitere Fragen, die ich möglicherweise separat stelle, wenn sie relevant sind.

Frage 2: Kann der Code an Zulassungslisten angepasst werden?Beispielsweise \loadfloats{figures,tables}wenn man schwebende Umgebungen nach Kapiteln organisieren und/oder Abbildungen und Tabellen trennen möchte

Frage 3: Kann der gleiche Ansatz auf die beamerKlasse portiert und angewendet werden frames?

Es gibt 3 Dateien mit dem Namenfloats-template.tex(die Masterdatei),floats.sty(egregCode umbenannt und verpackt) undfiguren.tex(die schwebenden Umgebungen). Außerdem wurde ein Bild mit dem NamenPlatzhaltermit Standarderweiterungen wird im selben Verzeichnis wie alles andere erwartet.

floats-template.tex

    \documentclass{article}
    \usepackage{lipsum}% \lipsum prints random text
    \usepackage{floats}% provides the \includefloat and \loadfloat commands
    \loadfloat{figures}% stores labeled figure environments

    \usepackage{rotating}% provides \sidewaysfigure environment

    \begin{document}
    \section{Lorem}
    \lipsum[5]
    \includefloat{fig:test1}

    \section{Dolor}
    \lipsum[5]
    \includefloat{fig:test2}

    \section{Final section}
    \lipsum[5]
    \includefloat{fig:test3}

    \end{document}

floats.sty

    \NeedsTeXFormat{LaTeX2e}

    \ProvidesPackage{floats}[2014/12/12 custom LaTeX style]

    % https://tex.stackexchange.com/questions/118323/
    %move-figures-around-in-a-document-with-a-simple-command/

    \RequirePackage{environ}%

    \AtBeginDocument{%
      \begingroup
      \InputIfFileExists{\thefloats.tex}{\setupprefloats}{}%
      \endgroup
    }

    \makeatletter
      \newcommand{\loadfloat}[1]{%
        \newcommand{\thefloats}{#1}%
    }

    \newcommand{\setupprefloats}{%
      \let\figure\relax\let\endfigure\relax
      \let\table\relax\let\endtable\relax
      \prefloat@rename{figure}\prefloat@rename{table}%
    }

    \newcommand{\prefloat@rename}[1]{%
      \NewEnviron{#1}{%
        \let\label\prefloat@label
        \renewcommand\caption[2][]{####2}%
        \setbox\z@=\vbox{\BODY}
        \toks@=\expandafter{\BODY}
        \expandafter\xdef\csname prefloat@\theprefloat@label\endcsname{%
          \noexpand\begin{#1}\the\toks@\noexpand\end{#1}}%
      }%
    }
    \newcommand{\prefloat@label}[1]{%
      \gdef\theprefloat@label{#1}%
    }
    \newcommand{\includefloat}[1]{%
    \expandafter\show\csname prefloat@#1\endcsname
      \@nameuse{prefloat@#1}%
    }
    \makeatother

    \endinput

figuren.tex

    % A multi-paragraph \caption[short]{long} without a short caption option produces an error

    \begin{figure}[thbp]
      \centering%
      \includegraphics[width=\textwidth]{placeholder}%
      \caption[test]{\lipsum[2]}
      \label{fig:test1}
    \end{figure}

    \begin{figure}[thbp]
      \centering%
      \includegraphics[width=\textwidth]{placeholder}%
      \caption[test]{\lipsum[2]}
      \label{fig:test2}
    \end{figure}

    % OFFENDING PIECE OF CODE
    %\begin{sidewaysfigure}
    %  \includegraphics[width=\textwidth]{placeholder}%
    %  \caption[test]{\lipsum[2]}
    %  \label{fig:test3}
    %\end{sidewaysfigure}

Antwort1

Wie in der Antwort, auf die ich in meinem Kommentar verwiesen habe, habe ich mein boxhandlerPaket als Ausgangspunkt verwendet und es durch Erstellen der Makros \storeFigure[label]{caption}{content}und geändert \recallFigure[htbp]{label}.

Mit boxhandlerwerden Abbildungen (und Tabellen) mit Makros und nicht mit Umgebungen erstellt. Das Paket bietet flexible Beschriftungsoptionen. Haftungsausschluss: Die Speicher- und Abrufoptionen sollten eindeutig nicht in Verbindung mit den \holdFiguresOptionen des Pakets verwendet werden.

In meinem MWE definiere ich drei Abbildungen in einer externen Datei, beginnend mit einer 1/2" breiten Abbildung mit der Überschrift „Seitenüberschrift“. Dann erstelle ich eine 1" breite Abbildung mit „Überschrift1“, gefolgt von einer 2" breiten Abbildung mit „Überschrift2“. Dann rufe ich die Abbildungen im MWE in der Reihenfolge „Überschrift2“, „Überschrift 1“ „Seitenüberschrift“ ab und verweise sie anhand ihrer Beschriftungen.

Das MWE wurde BEARBEITET, um die Verwendung sidewaysfigurein der endgültigen Abbildung zu ermöglichen.

\documentclass{article}
\usepackage{lipsum}
\usepackage[demo]{graphicx}
\usepackage{boxhandler, filecontents, rotating}

\begin{filecontents}{myfigures.tex}
% DEFINE ALL FIGURES AT THE BEGINNING
\storeFigure{fig:test3}{side caption}
{\includegraphics[width=0.5in]{testfig}}

\storeFigure{fig:test1}{caption1}
{\includegraphics[width=1in]{file1}}

\storeFigure{fig:test2}{caption2}
{\includegraphics[width=2in]{file2}}
\end{filecontents}

\makeatletter

\newcommand\storeFigure[3]{\@StoreFigure[#1]{#2}{#3}{\WrapperText}{\wrapper}}

\newcommand\@StoreFigure[5][]{%
  \addtocounter{FigureIndex}{1}%
  \setlength\DeadMargin\FigureDeadMargin%
  \def\FigureBoxLabel{fig\roman{FigureIndex}}%
  \def\FigureCaptionLabel{figcap\roman{FigureIndex}}%
  \def\FigCaptionWidthLabel{figcapwdth\roman{FigureIndex}}%
  \def\FigureWrapper{figwrap\roman{FigureIndex}}%
  \def\WrapperStatus{figwrapstatus\roman{FigureIndex}}%
  \expandafter\SaveCBox\csname\FigureBoxLabel\endcsname{#3}%
  \expandafter\def\csname\FigureCaptionLabel\endcsname{#2\label{#1}}%
  \expandafter\newlength\csname\FigCaptionWidthLabel\endcsname%
  \expandafter\setlength\csname\FigCaptionWidthLabel\endcsname%
                                              \CaptionBoxWidth%
  \expandafter\edef\csname\FigureWrapper\endcsname{#4}%
  \expandafter\edef\csname\WrapperStatus\endcsname{#5}%
%% After storing figure, reset wrapper to default value
  \global\def%
   \WrapperText{\noexpand\WrapperTextStyle\WrapperTextDefault}%
  \expandafter\def\csname FigureRefLabel\roman{FigureIndex}\endcsname{#1}%
}

\newcounter{loopfigindex}
\newcommand\recallFigure[2][ht]{%
  \setcounter{loopfigindex}{0}%
  \whiledo{\value{loopfigindex} < \value{FigureIndex}}{%
    \stepcounter{loopfigindex}%
    \ifthenelse{\equal{#2}{\csname FigureRefLabel\roman{loopfigindex}\endcsname}}{%
%%  \FigureBoxLabel:     : figi,    figii,    figiii,    figiv,    etc.
%%  \FigureCaptionLabel  : figcapi, figcapii, figcapiii, figcapiv, etc.
%%  \FigCaptionWidthLabel: figcapwdthi, figcapwdthii, figcapwdthiii,etc.
    \def\FigureBoxLabel{fig\roman{loopfigindex}}%
    \def\FigureCaptionLabel{figcap\roman{loopfigindex}}%
    \def\FigCaptionWidthLabel{figcapwdth\roman{loopfigindex}}%
    \def\FigureWrapper{figwrap\roman{loopfigindex}}%
    \def\WrapperStatus{figwrapstatus\roman{loopfigindex}}%
    \ReciteFigure[#1]{\csname\FigureCaptionLabel\endcsname}%
                     {\csname\FigureBoxLabel\endcsname}%
                     {\csname\FigCaptionWidthLabel\endcsname}%
                     {\csname\FigureWrapper\endcsname}%
                     {\csname\WrapperStatus\endcsname}%
  }{}}%
}

\newcommand\recallsidewaysFigure[2][ht]{%
  \setcounter{loopfigindex}{0}%
  \whiledo{\value{loopfigindex} < \value{FigureIndex}}{%
    \stepcounter{loopfigindex}%
    \ifthenelse{\equal{#2}{\csname FigureRefLabel\roman{loopfigindex}\endcsname}}{%
%%  \FigureBoxLabel:     : figi,    figii,    figiii,    figiv,    etc.
%%  \FigureCaptionLabel  : figcapi, figcapii, figcapiii, figcapiv, etc.
%%  \FigCaptionWidthLabel: figcapwdthi, figcapwdthii, figcapwdthiii,etc.
    \def\FigureBoxLabel{fig\roman{loopfigindex}}%
    \def\FigureCaptionLabel{figcap\roman{loopfigindex}}%
    \def\FigCaptionWidthLabel{figcapwdth\roman{loopfigindex}}%
    \def\FigureWrapper{figwrap\roman{loopfigindex}}%
    \def\WrapperStatus{figwrapstatus\roman{loopfigindex}}%
    \begin{sidewaysfigure}
    \centering
    \usebox{\csname\FigureBoxLabel\endcsname}
    \caption{\csname\FigureCaptionLabel\endcsname}
    \end{sidewaysfigure}
%    \ReciteFigure[#1]{\csname\FigureCaptionLabel\endcsname}%
%                     {\csname\FigureBoxLabel\endcsname}%
%                     {\csname\FigCaptionWidthLabel\endcsname}%
%                     {\csname\FigureWrapper\endcsname}%
%                     {\csname\WrapperStatus\endcsname}%
  }{}}%
}

\makeatother

\renewcommand\nextFigure[1][]{}% COMMENT THIS OUT TO PLACE FIGURES INLINE
\begin{document}
\input{myfigures.tex}

Figures were created in the order \ref{fig:test1} then \ref{fig:test2}.  That they
show up here as numbers means that the labeling worked.

\section{Lorem}
\lipsum[5]
\recallFigure[ht]{fig:test2}
\lipsum[3]

\section{Dolor}
\lipsum[1]
\recallFigure[ht]{fig:test1}

\section{Final section}
\lipsum[2]

\recallsidewaysFigure{fig:test3}

\lipsum[4-7]

\end{document}

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

verwandte Informationen