TikZ 图形始终位于新页面的中心

TikZ 图形始终位于新页面的中心

我在将 TikZ 与 LyX 2 结合使用时遇到了这个相当奇怪的问题。我使用 TikZ 编写了此图表,它应该位于一段文本之后并位于下一个新页面的顶部。相反,它正好位于新页面的中心,在文本和其本身之间留出一大块空间。在我的文档中,我将图形的 tex 代码放在文本本身之后,中间留一个空格,TikZ 代码如下。

\usetikzlibrary{shapes}
\usetikzlibrary{fit}
\usetikzlibrary{calc}
\usetikzlibrary{arrows}
\begin{figure}[ht!]
    \centering
    \begin{tikzpicture} [label distance=2mm,
        vertice/.style={circle, fill=gray!30, thick, inner sep=0pt, minimum size=7mm},
        dot/.style={shape=circle, fill=black, minimum size=2pt, inner sep=0pt, outer sep=2pt}]
        \node [vertice] (a) at (0,7) {$t_1$};
        \node [vertice] (b) at (0,6) {$t_2$};
        \node [vertice] (c) at (0,5) {$t_3$};
        \node [dot] (d) at ($(c) + (270:1)$) {};
        \node [dot] (e) at ($(d) + (270:0.5)$) {};
        \node [dot] (f) at ($(e) + (270:0.5)$) {};
        \node[draw, ellipse, label=below:$T$, fit=(a) (b) (c) (d) (e) (f)] {};\node [vertice] (h) at (5,7) {$a_1$};
        \node [vertice] (i) at (5,6) {$a_2$};
        \node [vertice] (j) at (5,5) {$a_3$};
        \node [dot] (k) at ($(j) + (270:1)$) {};
        \node [dot] (l) at ($(k) + (270:0.5)$) {};
        \node [dot] (m) at ($(l) + (270:0.5)$) {};
        \node[draw, ellipse, label=below:$A$, fit=(h) (i) (j) (k) (l) (m)] {};

        \path (h) edge [-stealth, auto, swap] node {$w_1$} (a)
                  edge [-stealth, auto] node[below, sloped] {$w_2$} (e)
            (i) edge [-stealth, auto, swap] node {$w_3$} (b)
            (j) edge [-stealth, auto] node[below, sloped] {$w_4$} (a)
                  edge [-stealth, auto] node[above, sloped] {...} (f)
              (k) edge [-stealth, auto] node[above, sloped] {...} (c)
              (l) edge [-stealth, auto] node[below, sloped] {...} (d)
              (m) edge [-stealth, auto] node {...} (f);
    \end{tikzpicture}
    \caption{A graph $G$}
\end{figure}

有什么建议可以解决这个问题吗?

我正在使用 Springer LNCS 文档类,如果有任何区别的话。

答案1

如果图形恰好位于最后一页,并且其后没有文字,则它将居中,如下面的 MWE 所示(如果您注释掉该\setlength行)。

按照浮动页面的垂直布局控制浮点数之间距离的值是:

\@fptop定义从页面顶部到第一个浮动元素顶部的距离,

\@fpsep定义浮点数之间的间隔,以及

\@fpbot定义从页面上最后一个浮动元素的底部到页面底部的距离。

默认值为:

\@fptop = 0pt + 1fil
\@fpsep = 8pt + 2fil
\@fpbot = 0pt + 1fil

因此,设置\@fptop为不带 的内容1fill即可实现所需的结果。

\documentclass{article}
\usepackage[demo]{graphicx}% Remove [demo] option in real use
\usepackage[showframe]{geometry}
\usepackage{lipsum}

\makeatletter% Set distance from top of page to first float
\setlength{\@fptop}{5pt}
\makeatother

\begin{document}
\lipsum[1-5]
\begin{figure}[ht!]
    \centering
    \includegraphics{foo}
    \caption{A graph $G$}
\end{figure}
\end{document}

相关内容