使用 LaTeX 中的 TikZ 创建复杂图表,包括分项列表和引用

使用 LaTeX 中的 TikZ 创建复杂图表,包括分项列表和引用

我目前正在处理一份 LaTeX 文档,我需要包含一个类似于附图所示的图表。经过一番研究,似乎 TikZ 可能是实现此目的的工具。我尝试使用 Tikzmaker 和 Tikzit 创建图表,但在使其按预期工作时遇到了困难。

以下是该图的简要说明: 在此处输入图片描述

我有几个具体的问题:

图表创建:我需要帮助重复数字行

这是我目前得到的

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{figure}[ht]
\centering
\begin{tikzpicture}
  % Rectangle on the left
  \draw (0, 0) rectangle node[text centered, align=center] {Rectangle 1} (3, 2);
  
  % Arrow between the first and second figure
  \draw[->] (3.5, 1) -- (4.5, 1);
  
  % Rectangle in the middle
  \draw (5, 0) rectangle node[text centered, align=center] {Rectangle 2} (8, 2);
  
  % Arrow between the second and third figure
  \draw[->] (8.5, 1) -- (9.5, 1);
  
  % Circle on the right
  \draw (10, 1) circle (1);
\end{tikzpicture}
\caption{TikZ Figure with Shapes and Arrows}
\end{figure}

\end{document}

代码生成的图像: 在此处输入图片描述

逐项列表:我想在图表的第一个方块内有一个逐项列表。可以使用 TikZ 实现这一点吗?如何将逐项列表合并到 TikZ 节点中?

引文:最后,我需要在逐项列表中包含引文。我该如何格式化并包含列表中每一项的引文?我应该注意哪些特定的软件包或命令?

感谢您提供的任何帮助或指导。LaTeX 和 TikZ 对我来说相对较新,因此详细的解释或代码片段将非常有帮助。提前感谢您的帮助!

答案1

我开始编写你的问题的代码。从那时起你应该能够自己完成它。

  • 我将矩形放置为节点并使用相对定位,以便它们彼此之间始终具有相同的距离。
  • 为了帮助解决间距问题,我使用了 tikzlibrariescalcpositioning
  • 为了保持列中的样式一致,我定义了三种样式。因此,一列中的所有矩形/圆形都具有相同的宽度。
  • 加载包enumitem以删除逐项列表的缩进及其上方的空白。
  • 正如@JamesT 的评论中提到的,\cite{...}如果您想引用某些内容,可以使用参考书目和节点文本中的命令。这应该在其他帖子中得到充分解释。
  • 您还可以为节点的间距定义一些样式(或将其包含在现有样式中)。这样,如果您想更改间距,您不必更改每个节点中的值,而只需更改样式定义中的值即可。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{calc}
\usepackage{enumitem}

\tikzset{style_large/.style={
  inner sep=3pt,
  text width=7cm,
  minimum height = 2.5cm,}
}
\tikzset{style_small/.style={
  inner sep=3pt,
  text width=3cm,
  minimum height = 2.5cm,
  align = center,}
}
\tikzset{style_circle/.style={
  inner sep=3pt,
  text width=2cm,
  circle,
  align = center,}
}

\begin{document}

\begin{figure}[ht]
\centering
\begin{tikzpicture}
  % Rectangles on the left
  \node[style_large,draw] (Rect1) {\footnotesize\begin{itemize}[topsep=0pt,leftmargin=*]
      \item Reading into the information a common-knowledge-based interpretation
      \item Recalling a personal experience that applied to a similar situation
      \item Evoking beliefs that transfer to the situation
  \end{itemize}};
  \node[style_large,node distance = 0.5cm, below = of Rect1,draw] (Rect2) {\footnotesize\begin{itemize}[topsep=0pt,leftmargin=*]
      \item Transfering features of a product to a new one
      \item Using an affinity with a culture or a service
  \end{itemize}};
  
  % Rectangle in the middle
  \node[style_small,draw,node distance = 1cm, right = of Rect1] (Rect11) {Assumption Driven perception};
  \node[style_small,draw,node distance = 1cm, right = of Rect2] (Rect22) {Metaphor Activation};

  % Arrow between the first and second figure
  \draw[->] (Rect1) -- (Rect11);
  \draw[->] (Rect2) -- (Rect22);
  
  % Circle on the right
  \node[style_circle,draw] (Circ1) at ($(Rect11.south east) + (2cm,-0.25cm)$) {Analogical Reasoning};
  
  % Arrow between the second and third figure
  \draw[->] (Rect11.east) -- (Circ1.west);
  \draw[->] (Rect22.east) -- (Circ1.west);
  
\end{tikzpicture}
\caption{TikZ Figure with Shapes and Arrows}
\end{figure}

\end{document}

在此处输入图片描述

答案2

这是另一种方法,它可以帮助您开始查找相关的关键字和概念(!)手册. 这并不那么好,因为DrUX 解决方案,并且还存在一些问题。不过,图纸的开发路径看起来很相似。

如何抵达這裡? 结果

文档类

使用几乎总是更容易\documentclass[10pt,border=3mm,tikz]{standalone},因为您不受任意页面几何形状的限制。

完成后,将其更改为您使用的类,或将Tikz相关代码复制到您的文档中,或使用其他方法等\input\subfiles

节点及其形状

这是需要掌握的基本概念之一,这使得在文本周围绘制(并保持对齐)额外的形状变得过时。

相关的是自定义样式,就像这样,您可以将其分配给\node\draw语句:

 \begin{tikzpicture}[% define your own styles here
    hdr/.style={red,font={\large\bfseries}},%               formatting the header-nodes
    blk/.style={draw,align=center,minimum width=4cm},
    lblk/.style={blk,font=\small},
    ell/.style={draw, circle,align=center},
    >=Stealth,%                     changing all arrow-tips
 ]
...
  • hdr:对于标题行,添加一些颜色,字体更大更粗
  • blk:以最小宽度绘制节点形状(默认为矩形);\\用于多行
  • lblk:“继承”自 blk,但对 overlongtextionitemlines 使用小字体
  • ell:原本打算稍后将节点的圆形变成椭圆形,但目前暂时跳过这一步;更重要的是多行文本的对齐

定位节点

使用绝对坐标可能是一个自然的选择。因此,我尝试从 5cm 栅格开始。

更复杂的放置是使用\usetikzlibrary{positioning}教程中的矩阵方法完成的。

\node {} 内的文本

虽然你可以把表格的 Latex 代码放在那里,但使用 itemize 似乎有问题。似乎需要某种垂直框。

但是,使用\vbox破坏了绘图,所以我最终使用了\parbox。如您所见,它存在未解决的问题:

  • 宽度成为 {text} 本身内部的参数,而不是样式语句中的参数
  • 您需要调整列表环境以获得更好的外观
    % ~~~ the various boxes ~~~~~~~~~~~~~~
    % ~~~ items need some kind of vertical box ~~~~
    \node[lblk] (C3) at (0,-5) {\parbox{4cm}{
            \begin{itemize}
                \item Manifesting text that is far too long
                \item Finding unexpected extremely long text
        \end{itemize}}};

正在连接

将所有节点放置到位后,通过之前介绍的名称将它们连接起来。使用锚点 .east.west为您提供所需的连接点。

    % ~~~ connections ~~~~~~~~~~~
    \draw[->] (C3) -- (E3);
    \draw[->] (E3.east) -- (L2.west);

建议

把绘图开发看作是一种用代码做陶器:

  • 从某处开始
  • 做出改变
  • 统一,即使重复的部分只能在一个地方访问
  • 不断改进
  • 经常(甚至更频繁地)保存(版本)

完整代码

\documentclass[10pt,border=3mm,tikz]{standalone}
\usetikzlibrary{arrows.meta}


\begin{document}
 \begin{tikzpicture}[% define your own styles here
    hdr/.style={red,font={\large\bfseries}},%               formatting the header-nodes
    blk/.style={draw,align=center,minimum width=4cm},
    lblk/.style={blk,font=\small},
    ell/.style={draw, circle,align=center},
    >=Stealth,%                     changing all arrow-tips
 ]
    % ~~~ Headline ~~~~~~~~~~~~~~~~~~~~~~
    \node[hdr] (C0) at (0,0) {Codes};
    \node[hdr] (E0) at (5,0) {Emerging themes};
    \node[hdr] (K0) at (10,0) {Creative logics};
    
    % ~~~ the various boxes ~~~~~~~~~~~~~~
    % ~~~ items need some kind of vertical box ~~~~
    \node[lblk] (C3) at (0,-5) {\parbox{4cm}{
            \begin{itemize}
                \item Manifesting text that is far too long
                \item Finding unexpected extremely long text
        \end{itemize}}};
    
    \node[blk] (E3) at (5,-5) {Serendipitious\\detection};  
    \node[ell] (L2) at (10,-8) {Associative\\thinking};
    
    % ~~~ connections ~~~~~~~~~~~
    \draw[->] (C3) -- (E3);
    \draw[->] (E3.east) -- (L2.west);
 \end{tikzpicture}
\end{document}

相关内容