我在环境中有一个巨大的 TikZ 图形figure
。我希望它覆盖跨页,以便图形被切成两半,左半部分放在偶数页(左侧),右半部分放在下一页(奇数页/右侧)。我希望应用常规页边距,以及文档布局的其余部分。我需要使用 IEEE 双栏纸张格式。
我知道我可以手动将 TikZ 图形重新制作成两部分,并将每部分放在新figure
环境中,然后采取一些技巧将图形强制放到我想要的页面上。但如果我可以独立于页面上的位置来制作图形,那么更新图形会更干净、更容易。此外,如果我决定用 EPS 或 PDF 替换 TikZ 图形(或者当我有这样的图像时再次遇到同样的问题),我希望解决方案与我碰巧在figure
.
那么,我怎样才能制作一个figure
跨越两页的内容呢?
答案1
您可以使用我发布的解决方案如何在两页上添加图片,左侧部分在左侧,右侧部分在右侧(用于书籍)?然后将其替换为来自软件包的任何\includegraphics[<options>]{<image file>}
内容。它基于提供的选项键构建并与其完全兼容,但将它们应用于文本或图片环境,而不是 graphicx。\adjustbox{<some options>}{<your tikzpicture or similar>}
adjustbox
graphicx
你基本上要做的是:
tikzpicture
使用\clipbox
或\adjustbox{clip=...}
从包中拆分adjustbox
。您需要将其插入两次,然后先剪切左侧部分,然后剪切右侧部分。为此,您应该先将图像存储到盒子寄存器中,然后使用该寄存器两次。更好的是,使用我的storebox
包和\storebox\mystore{<your image>}
and\usestorebox
宏,它只将整个图片存储在 PDF 中一次,而\savebox
/\usebox
将其存储两次。实际上,我已经为这种事情编写了一个\splitbox
宏作为其中的一部分adjustbox
,但它尚未发布。
环境figure
会让事情变得有点棘手。你需要确保两者都在顶部或底部,并且不会落在一个只有图形的页面上,如果周围没有足够的文本,就会发生这种情况。
以下是代码如何在两页上添加图片,左侧部分在左侧,右侧部分在右侧(用于书籍)?针对图片环境进行了修改。如果您使用多个彼此靠近的寄存器,则需要使用不同的寄存器来保存它们。
\documentclass[twoside]{book}
\usepackage{graphicx}
\usepackage{adjustbox}
\usepackage{afterpage}
\usepackage{placeins}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage[disable]{storebox}
\newstorebox\twopagestorebox
% For the `memoir` class remove the following two packages.
% This class already provide the functionality of both
\usepackage{caption}
\usepackage[strict]{changepage}
%%%
\setcounter{totalnumber}{1}
\setcounter{topnumber}{1}
\setcounter{bottomnumber}{1}
\renewcommand{\topfraction}{.99}
\renewcommand{\bottomfraction}{.99}
\renewcommand{\textfraction}{.01}
\makeatletter
\newenvironment{twopagepicture}[3]{%
\def\@dotwopagepicture{\@twopagepicture{#1}{#2}{#3}}%
\begin{storebox}{\twopagestorebox}%
}{%
\end{storebox}%
\ifstorebox
\global\let\twopagestorebox=\twopagestorebox
\else
\global\setbox\twopagestorebox=\box\twopagestorebox
\fi
\@dotwopagepicture{\usestorebox\twopagestorebox}%
}
\newcommand*{\@twopagepicture}[4]{%
\checkoddpage
\ifoddpage
\expandafter\@firstofone
\else
\expandafter\afterpage
\fi
{\afterpage{%
\if #1t%
\if #2p%
\thispagestyle{empty}%
\afterpage{\thispagestyle{empty}}%
\fi
\fi
\begin{figure}[#1]
\if #2p%
\if #1t%
\vspace*{-\dimexpr1in+\voffset+\topmargin+\headheight+\headsep\relax}%
\fi
\fi
\if #1b%
\caption{#3}%
\fi
\makebox[\textwidth][l]{%
\if #2p\relax
\let\mywidth\paperwidth
\hskip-\dimexpr1in+\hoffset+\evensidemargin\relax
\else
\let\mywidth\linewidth
\fi
\adjustbox{width=2\mywidth,Clip=0 0 {\mywidth} 0}{#4}}%
\if #1b\else
\caption{#3}%
\fi
\if #2p%
\if #1b%
\vspace*{-\dimexpr\paperheight-\textheight-1in-\voffset-\topmargin-\headheight-\headsep\relax}%
\fi
\fi
\end{figure}%
\begin{figure}[#1]
\if #2p%
\if #1t%
\vspace*{-\dimexpr1in+\voffset+\topmargin+\headheight+\headsep\relax}%
\fi
\fi
\makebox[\textwidth][l]{%
\if #2p%
\let\mywidth\paperwidth
\hskip-\dimexpr1in+\hoffset+\oddsidemargin\relax
\else
\let\mywidth\linewidth
\fi
\adjustbox{width=2\mywidth,Clip={\mywidth} 0 0 0}{#4}}%
\if #2p%
\if #1b%
\vspace*{-\dimexpr\paperheight-\textheight-1in-\voffset-\topmargin-\headheight-\headsep\relax}%
\fi
\fi
\end{figure}%
}}%
}
\makeatother
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{twopagepicture}{b}{l}{Test}
\begin{tikzpicture}
\draw (0,0) -- (2\linewidth,10);
\draw (0,10) -- (2\linewidth,0);
\draw (\linewidth,5) circle (2);
\end{tikzpicture}
\end{twopagepicture}
\lipsum
\lipsum
\end{document}
结果如下:
请注意,当前版本 (v1.0) 中有一个storebox
由 更新引起的错误collectbox
。我已经修复了它并将 v1.1 上传到 CTAN。disabled
获得新版本后,请从中删除该选项。到目前为止,它以回退模式运行,实际上使用的是保存箱。