如何通过环境放置图形同时保持位置不变?

如何通过环境放置图形同时保持位置不变?

我正在使用以下代码来简化图形创建和引用。

\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}%
}

当我用环境替换所有图形时cfig,大多数图形都移到了单独的页面远的远离源代码中的原始位置。为什么图形位置(显然)受到周围环境的影响?我该如何修复此行为而不完全失去灵活性figure

答案1

如果选项列表中没有 p,则一个大数字可以强制所有后续数字到末尾。例如:

\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}

答案2

如果您打算将整个文档中的每个图形都包含在您的cfig环境中,那么您也可以重新定义 -environment figure。另外,您不必将\crefsub和包含\Crefsub在环境内部,它们可以全局定义(并且可能只是使用fig.~\thefigure而不是\cref)。我不知道这些变化是否会对您的放置问题产生影响。

我会按照建议的方式进行更改:

\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}

相关内容