我正在寻找一种让文本跨多个 TikZ 节点流动的方法。我目前正在手动跨节点拆分文本(每个节点都包含一个minipage
我将文本放入的节点)。但是,如果文本可以自动从一个节点流到另一个节点,那就方便多了。
经过大量搜索后我发现最有希望的软件包是flowfram
,但是在阅读完它的文档后,我真的不明白它如何用于解决这个问题。
有没有什么软件包可以帮助我?还是手动拆分文本是唯一的方法?
编辑:这是一个(显然失败的) MWE。
这个想法是文本从顶部红色块流入底部红色块。
在我的实际使用中:
- 页面上的任意位置上可以有任意数量的此类块。
- 文档中每个页面的块数量(及其位置和大小)可能不同。
\documentclass{article}[a4paper]
\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{calc}
\newlength{\textAHeight}
\setlength{\textAHeight}{3cm}
\newlength{\textAMaxWidth}
\setlength{\textAMaxWidth}{6cm}
\newlength{\textBHeight}
\setlength{\textBHeight}{8cm}
\newlength{\textBMaxWidth}
\setlength{\textBMaxWidth}{10cm}
\newlength{\textCHeight}
\setlength{\textCHeight}{4cm}
\newlength{\textCMaxWidth}
\setlength{\textCMaxWidth}{4cm}
\begin{document}
\pagestyle{empty}
\begin{tikzpicture}[overlay, remember picture]
\node [draw=red, at=($(current page.north west)!0.2!(current page.south east)$), anchor=north west] (textA) {%
\begin{minipage}[t][\textAHeight][t]{\textAMaxWidth}
\lipsum[1]
\end{minipage}
};%
\end{tikzpicture}
\begin{tikzpicture}[overlay, remember picture]
\node [draw=red, at=($(current page.north west)!0.6!(current page.south east)$), anchor=north east] (textB) {%
\begin{minipage}[t][\textBHeight][t]{\textBMaxWidth}
\hfill
\end{minipage}
};%
\end{tikzpicture}
\begin{tikzpicture}[overlay, remember picture]
\node [draw=green, at={($(current page.west) + (15cm, 0cm)$)}, anchor=west] (textC) {%
\begin{minipage}[t][\textCHeight][t]{\textCMaxWidth}
Totally unrelated text.
\end{minipage}
};%
\end{tikzpicture}
\end{document}
这将生成以下文档:
答案1
magazine
库 ( tcolorbox
) 允许将一个框分成几个片段,并将每个片段放置在您想要的位置。以下代码显示了一个示例。在这种情况下,所有框都具有相同的大小并TiKZ
用于放置它们,尽管您只需使用命令即可将它们插入文本中\useboxarray
。
tcolorbox
还提供了poster
库,文本可以流入海报的多个区块。但这poster
是一个封闭且不可破坏的环境。magazine
每个片段都是独立的。
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\usetikzlibrary{positioning}
\begin{document}
\begin{tcolorbox}[enhanced, size=fbox, width=4cm,
colback=yellow!10, colframe=yellow!10!black,
breakable, break at=4cm, height fixed for =all,
reset box array,
store to box array]
\lipsum[1-2]
\end{tcolorbox}
\begin{tikzpicture}
\node[inner sep=0pt] (a) {\useboxarray{1}};
\node[inner sep=0pt, below left=1cm of a] (b) {\useboxarray{2}};
\node[inner sep=0pt, below right=1cm of a] (c) {\useboxarray{3}};
\node[inner sep=0pt, below left=1cm of c] (d) {\useboxarray{4}};
\draw[ultra thick, opacity=.5, ->, red] (a)--(b)--(c)--(d);
\end{tikzpicture}
\end{document}