问题描述
如果当前页面不适合,我想自动将 移动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}