Wie platziere ich eine Figur über die Umgebung, während die Platzierung intakt bleibt?

Wie platziere ich eine Figur über die Umgebung, während die Platzierung intakt bleibt?

Ich verwende den folgenden Code, um die Abbildungserstellung und Referenzierung zu vereinfachen.

\newenvironment{figcontext}[1]{%
\newcommand{\thefig}{#1}%
\newcommand{\crefsub}[1]{\cref{\thefig}.##1}%
\newcommand{\Crefsub}[1]{\Cref{\thefig}.##1}%
}{}

\newenvironment{cfig}[1]{%
\begin{figcontext}{#1}%
\begin{figure}[h!tb]% only 'H' is respected
\centering%
}{%
\label{\thefig}%
\end{figure}%
\end{figcontext}%
}

Beim Ersetzen aller meiner Figuren durch die cfigUmgebung wurden die meisten Figuren auf separate Seiten verschobenweitvon ihrer ursprünglichen Position im Quellcode weg. Warum wird die Platzierung der Abbildung (anscheinend) von der Umgebung beeinflusst? Wie kann ich dieses Verhalten beheben, ohne die Flexibilität figurevollständig zu verlieren?

Antwort1

Wenn Sie p nicht in der Optionsliste haben, kann eine große Zahl alle folgenden Zahlen ans Ende zwingen. Als Beispiel:

\documentclass{article}
\usepackage{lipsum}

\begin{document}
\lipsum[1]

\begin{figure}[thb!] %compare with [thb!p]
\rule{1cm}{0.98\textheight}
\caption{blub}
\end{figure}

\lipsum[1]
\begin{figure}[thb!]
blbl
\caption{blub}
\end{figure}

\lipsum\lipsum
\end{document}

Antwort2

Wenn Sie vorhaben, jede Abbildung in Ihrem gesamten Dokument in Ihre Umgebung einzuschließen cfig, können Sie die -Umgebung auch einfach neu definieren figure. Außerdem müssen Sie \crefsubund nicht \Crefsubinnerhalb der Umgebung einschließen, sie können global definiert werden (und können einfach fig.~\thefigureanstelle von verwenden \cref). Ich weiß nicht, ob diese Änderungen Auswirkungen auf Ihr Platzierungsproblem haben.

Ich würde die vorgeschlagenen Änderungen folgendermaßen umsetzen:

\documentclass{article}

% for MWE
\usepackage[english]{babel}
\usepackage{blindtext}
\usepackage{todonotes}
\usepackage{tikz}

\usepackage{cleveref}

%\newcommand{\crefsub}[1]{fig.~\thefigure.#1}% without using cref
%\newcommand{\Crefsub}[1]{Figure~\thefigure.#1}% without using cref
\newcommand{\crefsub}[2][\myfiglabel]{\cref{#1}.#2}% with using cref
\newcommand{\Crefsub}[2][\myfiglabel]{\Cref{#1}.#2}% with using cref

\let\figurebak\figure
\let\endfigurebak\endfigure
\renewenvironment{figure}[2][tbhp]{
    \def\myfiglabel{#2}%
    \begin{figurebak}[#1]%
        \centering%
}{%
        \label{\myfiglabel}%
    \end{figurebak}%
}


\begin{document}

\blindtext[1]

\blindtext[1]

\blindtext[1]

\begin{figure}{fig:label}
    \begin{tikzpicture}[yscale=1.5]
        \draw [help lines, <->]  (0,0) -- (6.5,0) node{a};
        \draw [help lines, ->] (0,-1.1) -- (0,1.1) node{b};
        \draw [green,domain=0:2*pi] plot (\x, {(sin(\x r)* ln(\x+1))/2});
        \draw [red,domain=0:pi] plot (\x, {sin(\x r)});
        \draw [blue, domain=pi:2*pi] plot (\x, {cos(\x r)*exp(\x/exp(2*pi))});
    \end{tikzpicture}
    \caption{caption to my fig. Please note \Crefsub{a} and \crefsub{b}}
\end{figure}

See \cref{fig:label} as well as \crefsub[fig:label]{a}.

\blindtext[1]

\blindtext[1]

\blindtext[1]


\end{document}

verwandte Informationen