![如果“tikzpicture”不适合当前页面,则自动将其移动到下一页](https://linux22.com/image/394758/%E5%A6%82%E6%9E%9C%E2%80%9Ctikzpicture%E2%80%9D%E4%B8%8D%E9%80%82%E5%90%88%E5%BD%93%E5%89%8D%E9%A1%B5%E9%9D%A2%EF%BC%8C%E5%88%99%E8%87%AA%E5%8A%A8%E5%B0%86%E5%85%B6%E7%A7%BB%E5%8A%A8%E5%88%B0%E4%B8%8B%E4%B8%80%E9%A1%B5.png)
问题描述
如果当前页面不适合,我想自动将 移动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}