
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 cfig
Umgebung 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 figure
vollstä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 \crefsub
und nicht \Crefsub
innerhalb der Umgebung einschließen, sie können global definiert werden (und können einfach fig.~\thefigure
anstelle 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}