如果“tikzpicture”不适合当前页面,则自动将其移动到下一页

如果“tikzpicture”不适合当前页面,则自动将其移动到下一页

问题描述

如果当前页面不适合,我想自动将 移动tikzpicture到新页面。请参阅 MWE — 如果您按原样编译它, 将从tikzpicture当前页面开始,但会超出页面边缘。当发生这种情况时,整个tikzpicture必须自动移动到下一页(就像您取消注释\newpage命令一样)。

我用xelatex

最小工作示例

\documentclass[10pt, chapterprefix=false, twoside]{scrbook}

\usepackage[a4paper, top=1in, bottom=1in, right=1in, left=1in, portrait]{geometry}
\usepackage{tikz, multicol, lipsum}

\newcommand{\colbreak}{\vfill\null\columnbreak}%

\begin{document}
    \lipsum
    % \newpage
    \setlength{\columnsep}{-2.5cm}
    \begin{multicols}{2}
        \begin{tikzpicture}
            \draw[red, line width=1.6mm] (0,-9) node[below=10] {{Ω}} -- (0,0) -- (1,0) node[above=10] {{0}} node[below=10] {{0}} -- (3,0) -- (0,0) -- (0,3) node[above=10] {{Α}} -- (0,0) -- (-1,0) node[above=10] {{2}} node[below=10] {{2}} -- (-3,0);
        \end{tikzpicture}

        \colbreak

        \lipsum[1]
    \end{multicols}
\end{document}

答案1

实现这一点的一种方法是把 放入tikzpicture(\savebox这样我们就知道它的高度),测量页面上的剩余空间,将其与的高度进行比较,如果不合适,tikzpicture则发出。\newpage

\documentclass[10pt, chapterprefix=false, twoside]{scrbook}

\usepackage[a4paper, top=1in, bottom=1in, right=1in, left=1in, portrait]{geometry}
\usepackage{tikz, multicol, lipsum}

\newcommand{\colbreak}{\vfill\null\columnbreak}%
% from https://tex.stackexchange.com/a/17813/121799
\newcommand\measurepage{\dimexpr\pagegoal-\pagetotal-\baselineskip\relax}
\newsavebox{\TikZPic}
\begin{document}

    \lipsum

    \begin{lrbox}{\TikZPic}
    \begin{tikzpicture}
     \draw[red, line width=1.6mm] (0,-9) node[below=10] {{AAA}} -- (0,0) -- (1,0) node[above=10] {{0}} node[below=10] {{0}} -- (3,0) -- (0,0) -- (0,3) node[above=10] {{AAA}} -- (0,0) -- (-1,0) node[above=10] {{2}} node[below=10] {{2}} -- (-3,0);
    \end{tikzpicture}%
    \end{lrbox}
    \setlength{\columnsep}{-2.5cm}
    \ifdim\ht\TikZPic>\measurepage
    \newpage
    \fi
    \begin{multicols}{2}
    \usebox\TikZPic

        \colbreak

        \lipsum[1]
    \end{multicols}
\end{document}

相关内容