使文本跨不同的 TikZ 节点流动

使文本跨不同的 TikZ 节点流动

我正在寻找一种让文本跨多个 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}

这将生成以下文档:

未通过 MWE

答案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}

在此处输入图片描述

相关内容