记录内的自动机

记录内的自动机

有人可以帮帮我吗?

我想定义一个带有参数(输入/输出变量和自动机)的新形状。

它看起来应该是这样的:

INPUT                                          OUTPUT
+------+--------------------------------------+------+
|      |                                      |      |
|  v1  |                                      |      |
|      |                                      |      |
+------+             AUTOMAT                  |  o1  |
|      |                                      |      |
|  v2  |                                      |      |
|      |                                      |      |
+------+--------------------------------------+------+

我没有足够的技能来定义如此复杂的对象。我很感激任何帮助。

答案1

你是指这样的吗?

在此处输入图片描述

该图片是通过以下方式实现的:

\documentclass{article}
\usepackage{xparse}
\usepackage{tikz}
\usetikzlibrary{calc,positioning}

\newcounter{image}
\setcounter{image}{0}
\pgfmathtruncatemacro{\recordwidth}{4}
\pgfmathtruncatemacro{\recordheight}{2}

\newcommand{\setrecordwidth}[1]{\pgfmathtruncatemacro{\recordwidth}{#1}}
\newcommand{\setrecordheight}[1]{\pgfmathtruncatemacro{\recordheight}{#1}}

\tikzset{drawinside/.code n args={4}{%
        \node at ($(#1.north west)!0.5!(#1.west)!0.15!(#1.center)$){#2};
        \node at ($(#1.south west)!0.5!(#1.west)!0.15!(#1.center)$){#3};        
        \draw($(#1.north west)!0.30!(#1.north)$)--($(#1.south west)!0.30!(#1.south)$);
        \draw(#1.west)--($(#1.west)!0.30!(#1.center)$);
        \draw($(#1.north east)!0.30!(#1.north)$)--($(#1.south east)!0.30!(#1.south)$);
        \node at ($(#1.east)!0.15!(#1.center)$) {#4};
    }
}

\tikzset{record/.style args={#1 and #2}{
        rectangle,draw,minimum width=#1, minimum height=#2
    }
}

\NewDocumentCommand{\drawrecord}{d() m m m}{
\stepcounter{image}
\IfNoValueTF{#1}{%true
\node[record=\recordwidth cm and \recordheight cm,name=a\theimage]{};
}
{%false
\node[record=\recordwidth cm and \recordheight cm,name=a\theimage]at(#1){};
}
\node[drawinside={a\theimage}{#2}{#3}{#4}]{};
}

\begin{document}
\tikz{\drawrecord{$v_1$}{$v_2$}{$o_1$}}
\tikz{\drawrecord{$v_4$}{$v_5$}{$o_2$}}

\vspace*{2cm}
\begin{tikzpicture}
\drawrecord(0,0){$v_1$}{$v_2$}{$o_1$}
\setrecordwidth{6}
\setrecordheight{3}
\drawrecord(7,0){$v_1$}{$v_2$}{$o_1$}
\end{tikzpicture}
\end{document}

基本命令是\drawrecord接受输入和输出变量作为参数,图片位置作为可选参数。可以通过专用命令\setrecordwidth和自定义记录的宽度和高度\setrecordheight

相关内容