TeX、自由浮动、锚点

TeX、自由浮动、锚点

我想要实现以下目标:

  1. 我希望单个页面由 N 个“区域”组成。

    每个区域都有一个 x 起点、y 起点和 a \hbox(表示区域的内容)。

  2. 此外,对于每个区域,我希望能够在原因范围内定义“锚点”。

  3. 我希望能够绘制从一个锚点指向另一个锚点的箭头。

在 TeX 中实现这一目标的最佳方法是什么?

答案1

这里有一个方法可以做到,但是还有什么其他方法tikz

在此处输入图片描述

内容放置在

\AnchoredRegion[<draw options>]{<name of region>}{x,y}{<content>}

在哪里:

  • <draw options>是用于设置框样式的可选参数。如果您不想要框,可以使用fill=none。如果您想要实心框draw=<color>,请使用 等...
  • <name of region>是赋予此节点的名称,稍后可用于引用其位置
  • x,y是与页面西南角的偏移量。默认单位为x,但如果您希望使用其他单位,您可以提供。例如,相当于或。ycm{1in,1in}{2.54cm,2.54cm}{2.54,2.54}
  • <content>是要放置的内容

放置好盒子后,您可以根据需要用以下命令从一个盒子到另一个盒子画线:

\DrawLines[<draw options>]{<name of region>}{<name of region>}

这里仅展示了一小部分可用选项。有关其他绘制选项,请参阅tikz/pgf用户手册。

笔记:

  • 这确实需要两次运行。第一次确定位置,第二次进行绘图。
  • 请注意,没有进行任何测试来确保您没有重叠的框。因此,如果不希望如此,您可能需要调整这些节点位置的x坐标。ytikz

代码:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand{\AnchoredRegion}[4][]{%
    % #1= draw options
    % #2= name of this node
    % #3= x,y offset from south west of current page
    % #4= content for node
    \begin{tikzpicture}[overlay,remember picture, outer sep=0, inner sep=5pt]
        \node [#1] (#2) at
            ($(current page.south west)+(#3)$)
            {#4};
    \end{tikzpicture}%
}

\newcommand{\DrawLines}[3][]{%
    \begin{tikzpicture}[overlay,remember picture, outer sep=0, inner sep=5pt]
        \draw [ultra thick, #1] (#2) to (#3);
    \end{tikzpicture}%
}%

\newcommand*{\TextA}{\parbox{3.0cm}{\raggedright Some small text over two lines.}}%
\newcommand*{\TextB}{\parbox{3.0cm}{\raggedright Some longer piece of text that takes up three lines.}}%
\newcommand*{\TextC}{\parbox{3.0cm}{\raggedright Some even longer piece of text thatjust goes on and on and on and on..... Well you get the idea.}}%

\begin{document}
    \AnchoredRegion[fill=yellow!40]{YellowRegion}{7,7}{\TextA}
    \AnchoredRegion[fill=cyan!40]{BlueRegion}{7,10}{\TextB}
    \AnchoredRegion[fill=orange!40]{OrangeRegion}{7,13}{\TextC}
    \AnchoredRegion[fill=red!20]{RedRegion}{11,13}{\TextC}

    \DrawLines[out=130,in=-130,-stealth, red]
            {YellowRegion.west}{OrangeRegion.west}
    \DrawLines[out=30,in=-90,-stealth, brown, dotted]
            {YellowRegion.east}{RedRegion.south}
    \DrawLines[-stealth, violet]{BlueRegion.south}
            {YellowRegion.north}
    \DrawLines[out=-150,in=120, distance=6cm, -stealth, green]
            {YellowRegion.south}{OrangeRegion.north}
\end{document}

相关内容