Bom Dia a todos. Na verdade, é a primeira vez que escrevo aqui, então obrigado a quem responder. Estou escrevendo minha tese de graduação e atualmente estou preso no desenho de uma Máquina de Turing. O que eu gostaria de fazer é algo assim:
Exceto que eu gostaria de ter o lado esquerdo do primeiro nó (apenas o lado esquerdo, não todos os 4 lados) bem grosso. O que fiz até agora foi o seguinte:
\begin{tikzpicture}
\edef\turingtapesize{0.7cm}
\tikzstyle{tape}=[draw,minimum size=\turingtapesize]
\tikzset{
leftmostnode/.style={
draw,minimum size=\turingtapesize,
append after command={% <= for the leftside line of the leftward node
\pgfextra{%
\begin{pgfinterruptpath}
\begin{pgfonlayer}[foreground]
\draw[verythick] (\tikzlastnode.south west)--(\tikzlastnode.north west);
\end{pgfonlayer}
\end{pgfinterruptpath}
}
}
}
}
% Drawing the tape itself
\begin{scope}[start chain=0 going right,node distance=0mm]
\node[on chain=0,tape] (b) {0};
\node[left=of b,leftmostnode](a){1};
\node[on chain=0,tape] (c) {1};
\node[on chain=0,tape] (d) {0};
\node[on chain=0,tape] (e) {1};
\node[on chain=0,tape] (f) {0};
\node[on chain=0,tape] (g) {0};
\node[on chain=0,tape] (h) {1};
\node[on chain=0,tape] (i) {1};
\node[on chain=0,tape] (l) {$\sqcup$};
\node[on chain=0,tape] (l) {$\sqcup$};
\node[on chain=0,tape] (l) {$\sqcup$};
\end{scope}
\end{tikzpicture}
Mas recebo um erro:
Desculpe, a camada solicitada '[' não foi encontrada. Talvez você tenha escrito errado?
\nodeleft=de b,nó mais à esquerda {1};
Posso também perguntar-lhe como conseguir esse tipo de final de fita com 'motosserra' (esse termo existe?)? Obrigado, felicidades ;) Fonte:1 2
EDITAR Como sugerido por moospit, resolvi o 'problema da espessura'. Agora só me resta criar aquela linha irregular especial;)
EDIT2 Acabei de ver sua resposta. Resolvi de uma forma um pouco diferente.. Posto abaixo o código de toda a imagem tikz ;)
\begin{tikzpicture}
\edef\turingtapesize{0.7cm}
\tikzstyle{tape}=[draw,minimum size=\turingtapesize]
% Drawing the tape itself
\begin{scope}[start chain=0 going right,node distance=0mm]
\node[on chain=0,tape] (a) {1} ;
\node[on chain=0,tape] (b) {0} ;
\node[on chain=0,tape] (c) {1} ;
\node[on chain=0,tape] (d) {0} ;
\node[on chain=0,tape] (e) {1} ;
\node[on chain=0,tape] (f) {0} ;
\node[on chain=0,tape] (g) {0} ;
\node[on chain=0,tape] (h) {1} ;
\node[on chain=0,tape] (i) {1} ;
\node[on chain=0,tape] (l) {$\sqcup$};
\node[on chain=0,tape] (l) {$\sqcup$};
\node[on chain=0,tape] (l) {$\sqcup$};
\node[on chain=0,tape,draw=none](m) {} ;
\node[on chain=0,tape,draw=none](n) {$\ldots$};
% Coordinates
\coordinate(snake1) at ($ (l.north east)!0.5cm!(m.north east) $);
\coordinate(snake2) at ($ (l.south east)!.5cm!(m.south east) $) ;
\draw [-] (l.north east) -- (snake1);
\draw [-] (l.south east) -- (snake2);
\draw[snake=snake,
segment amplitude=.4mm,
segment length=1.75mm,
line after snake=0mm] (snake1) -- (snake2);
\end{scope}
\draw[ultra thick] (a.south west) -- (a.north west) ;
\node[draw,above=0.75cm of e,minimum size=\turingtapesize] (Q) {$q_3$};
\draw[-latex] (Q) -- (e) ;
\end{tikzpicture}
EDITAR3
\begin{tikzpicture}
\tikzset{tape/.style={minimum size=.7cm, draw}}
\begin{scope}[start chain=0 going right, node distance=0mm]
\foreach \x [count=\i] in {1,0,1,0,1,0,0,1,1,$\sqcup$,$\sqcup$,$\sqcup$} {
\ifnum\i=12 % if last node reset outer sep to 0pt
\node [on chain=0, tape, outer sep=0pt] (n\i) {\x};
\draw (n\i.north east) -- ++(.1,0) decorate [decoration={zigzag, segment length=.12cm, amplitude=.02cm}] {-- ($(n\i.south east)+(+.1,0)$)} -- (n\i.south east) -- cycle;
\else
\node [on chain=0, tape] (n\i) {\x};
\fi
\ifnum\i=1 % if first node draw a thick line at the left
\draw [line width=.1cm] (n\i.north west) -- (n\i.south west);
\fi
}
\node [right=.25cm of n12] {$\cdots$};
\node [tape, above left=.25cm and 1cm of n1] (q3) {$q_3$};
\draw [>=latex, ->] (q3) -| (n5);
\end{scope}
\end{tikzpicture}
E aqui o resultado final:
Responder1
Que tal usar seu tape
estilo para o nó a
e apenas adicionar isso após seu código de cadeia:
\draw [very thick] (a.south west) -- (a.north west);
ou
\draw [line width=.1cm] (a.south west) -- (a.north west);
Desta forma você pode adicionar uma linha adicional desenhada acima do seu nó a
.
EDITAR:Atualização em seu nó ziguezague no final da cadeia (MWE)
Aqui também algumas informações sobre o seu nó em zigue-zague. Usei o zigzag
-decoration em uma parte do caminho descrito abaixo. Basta ajustar a zigzag
segment length
amplitude e as suas necessidades.
Cuidado ao definir os outer sep
nós da sua cadeia como 0
, caso contrário, o caminho em zigue-zague terá algum deslocamento das coordenadas north east
e south east
.
\documentclass[tikz, border=5mm]{standalone}
\usetikzlibrary{decorations.pathmorphing, calc}
\begin{document}
\begin{tikzpicture}
\node [draw, outer sep=0pt] (n) {n};
\draw (n.north east) -- ++(.1,0) decorate [decoration={zigzag, segment length=.12cm, amplitude=.02cm}] {-- ($(n.south east)+(+.1,0)$)} -- (n.south east) -- cycle;
\end{tikzpicture}
\end{document}
SÓ MAIS UMA EDIÇÃO:não resisti ;). Pequena reescrita do seu código para tornar a cadeia extensível para mais elementos:
Se tiver mais dúvidas é só perguntar. Você pode facilmente mudar zigzag
com alguns snakes
, se quiser.
\documentclass[tikz, border=5mm]{standalone}
\usetikzlibrary{calc, chains, decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}
\tikzset{tape/.style={minimum size=.7cm, draw}}
\begin{scope}[start chain=0 going right, node distance=0mm]
\foreach \x [count=\i] in {1,0,1,10,1,1,1,1,$\sqcup$,$\sqcup$,$\sqcup$} {
\ifnum\i=11 % if last node reset outer sep to 0pt
\node [on chain=0, tape, outer sep=0pt] (n\i) {\x};
\draw (n\i.north east) -- ++(.1,0) decorate [decoration={zigzag, segment length=.12cm, amplitude=.02cm}] {-- ($(n\i.south east)+(+.1,0)$)} -- (n\i.south east) -- cycle;
\else
\node [on chain=0, tape] (n\i) {\x};
\fi
\ifnum\i=1 % if first node draw a thick line at the left
\draw [line width=.1cm] (n\i.north west) -- (n\i.south west);
\fi
}
\node [right=.25cm of n11] {$\cdots$};
\node [tape, above left=.25cm and 1cm of n1] (q7) {$q_7$};
\draw [>=latex, ->] (q7) -| (n5);
\end{scope}
\end{tikzpicture}
\end{document}