Einfaches Figurenplatzierungssystem

Einfaches Figurenplatzierungssystem

Ich ertappe mich häufig dabei, große Codeblöcke in meinen Dokumenten zu kopieren und einzufügen {figure}, {table}um die Platzierung meiner Abbildungen zu verbessern. Das ist fehleranfällig und etwas nervig.

Ich kenne das [H]-Argument für eine Float-Umgebung. Hier versuche ich nicht, die Float-Position im resultierenden PDF-Dokument exakt mit der Position meiner Float-Umgebung abzustimmen. Ich möchte nur eine einfachere Möglichkeit, Code für Floats in meiner Tex-Datei zu verschieben, ohne große Codeblöcke kopieren und einfügen zu müssen.

Ich frage mich, ob es möglich ist, ein System mit neuen Umgebungen und Makros zu erstellen, mit dem ich so etwas tun kann

\begin{placer}{tag}
\begin{figure}
...
\end{figure}
\end{placer}

Meine Idee ist, dass die neue placerUmgebung einfach alles erfasst und unter einem Namen basierend auf dem Argument-Tag speichert.

Anschließend platziere ich meine Figur mit einem neuen Makro an der gewünschten Stelle.

\place{tag}

Im Idealfall wäre es möglich,\place{tag} Vorden obigen Codeausschnitt und trotzdem das gewünschte Ergebnis erhalten. Und im Idealfall wäre es nicht auf das Schreiben von Dateien oder zusätzliche Kompilierungsschritte angewiesen. Ich denke, es wäre sehr schön, wenn der Float standardmäßig an der \begin{placer}{tag}Stelle platziert würde, an der \place{tag}er nie aufgerufen wurde.

Ist ein solches System realisierbar?

Wenn das der Fall ist, möchte ich noch weiter gehen. Ich möchte die Float-Umgebungen für Abbildungen und Tabellen neu definieren, damit deren Inhalt wie oben automatisch zwischengespeichert wird und er mithilfe einiger Beschriftungen über das Place-Makro wie oben platziert werden kann.

Ich könnte ein Paket laden, das dies implementiert, und anfangen, Abbildungen und Tabellen in einem Dokument zu verschieben, indem ich einfach die \place{fig:whatever}-Befehle mit dem Argument hinzufüge, das einem Tag der relevanten Abbildung entspricht. So etwas wie das hier

\usepackage{placer}
\begin{document}

This is a document with one figure.

\begin{figure}
...
\label{fig:whatever}
\end{figure}

Actually, let’s put the figure code below this text.

\place{fig:whatever}.

Antwort1

Sie können xparseeine Umgebung definieren, in der der Inhalt gespeichert wird. Eine Eigenschaftenliste scheint das geeignete Werkzeug zu sein.

\documentclass{article}
\usepackage{xparse}

\usepackage{graphicx}
\usepackage{booktabs}

\usepackage{lipsum} % just for mock text

\ExplSyntaxOn

\prop_new:N \g_innisfree_floats_prop

\NewDocumentEnvironment{placer}{m +b}
 {
  \prop_gput:Nnn \g_innisfree_floats_prop { #1 } { #2 }
 }
 {}

\NewDocumentCommand{\place}{m}
 {
  \prop_item:Nn \g_innisfree_floats_prop { #1 }
 }

\ExplSyntaxOff

%%% define the objects (can be in a different file to be \input)

\begin{placer}{fig:example}
\begin{figure}[htp]
\centering
\includegraphics[width=4cm]{example-image}

\caption{A figure\label{fig:example}}
\end{figure}
\end{placer}

\begin{placer}{tab:example}
\begin{table}[tp]
\centering

\caption{A table\label{tab:example}}

\begin{tabular}{lc}
\toprule
X & Y \\
\midrule
A & 1 \\
B & 2 \\
\bottomrule
\end{tabular}
\end{table}
\end{placer}

\begin{document}

\lipsum[2]

\place{fig:example}

\lipsum[3-5]

\place{tab:example}

\lipsum

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen