如何用 TikZ 绘制矩形框?

如何用 TikZ 绘制矩形框?

我想在一些文本周围绘制矩形框,并使用箭头从其中一个文本指向另一个文本。但是,一个文本有点长,所以我还想将其分成两行。我有以下内容:

\documentclass{beamer}

\usepackage{tikz}
\usetikzlibrary{positioning,shapes}

\begin{document}

\begin{frame}{Test}
\begin{columns}
    \begin{column}{0.50\textwidth}
        One side

        \begin{tikzpicture}[rectangle,draw=cyan,thick]

            \node (pq1) {Hard problems};
            \node [dashed,below=of pq1] (pq2) {Construct new problems};
            \node [below=of pq2] (pq3) {Framework fail};
            \node [dashed,below=of pq3] (pq4) {Analyze against \\new adversaries};

            \path[->,thick,cyan] (pq1) edge  (pq2)
                                 (pq3) edge  (pq4);
        \end{tikzpicture}
    \end{column}

    \begin{column}{0.50\textwidth}
        Other Part
    \end{column}
\end{columns}
\end{frame}

\end{document}

重点是只绘制了箭头,但没有在文本周围绘制矩形。我希望其中两个是实线,另外两个是虚线。另外,如何在 TikZ 节点中将文本拆分成两行?

答案1

像这样:

在此处输入图片描述

对于节点,您需要定义选项align,并且对于您的情况,我也建议您text width=...。我假设所有节点的形状都是相同的,因此我为所有节点定义了一个通用样式:

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document} 
\begin{frame}{Test}
\begin{columns}
    \begin{column}{0.50\textwidth}
        One side
\begin{center}
        \begin{tikzpicture}[
every node/.style = {shape=rectangle,% is not necessary, default node's shape is rectangle
                     draw=cyan, semithick,
                     text width=0.8\linewidth,
                     align=center}
                            ]
\node (pq1) [draw] {Hard problems};
\node (pq2) [dashed,below=of pq1] {Construct new problems};
\node (pq3) [below=of pq2] {Framework fail};
\node (pq4) [dashed,below=of pq3] {Analyze against \\new adversaries};
%
\path[->,thick,cyan] (pq1) edge  (pq2)
                     (pq3) edge  (pq4);
        \end{tikzpicture}
\end{center}
    \end{column}
    \begin{column}{0.50\textwidth}
        Other Part
    \end{column}
\end{columns}
\end{frame}
\end{document}

如果您希望拥有不同的节点形状宽度,以适应包含的文本,那么请删除text width=...定义中的选项every node

相关内容