我正在尝试使用 TikZ 和语句绘制一个自动机\foreach
。下面是我所拥有的示例。现在,我有两个问题,
- 有没有办法使用花括号
{,}
代替(,)
我现在使用的 来标记自动机的某些状态?我希望有A{A}
,而不是A(A)
。 \foreach
在某些情况下,语句不允许我绘制箭头。我想从A
到绘制箭头A(A)
(理想情况下,A{A}
修复后)以及从A
到 绘制箭头A'(A)
,但出于某种原因,它不喜欢我用括号命名这些状态的方式。
有谁能帮我解决这个问题?我非常感激。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\[\begin{tikzpicture}[shorten >=1pt,->]
\tikzstyle{vertex}=[circle,fill=black!25,minimum size=17pt,inner sep=0pt]
\foreach \name/\a in {A/90, A''/180, A(A)/270, A'(A)/0}
\node[vertex] (\name) at (\a:3cm) {$\name$};
\foreach \from/\to in {A/A'', A/A(A), A/A'(A)}
\draw (\from) -- (\to);
\end{tikzpicture}\]
\end{document}
答案1
我假设您希望在节点中打印花括号。要打印反斜杠,您必须使用\{
和\}
,但这些不能用于node
名称。也就是说,您不能执行类似 的操作。作为一种解决方法,您可以对名称和内容\node (\{A\}) at (0,0) {A};
使用不同的字符串,例如node
node
\foreach \name/\word/\a in {A/A/90, A''/A''/180, A[A]/A\{A\}/270, A'[A]/A'\{A\}/0}
\node[vertex] (\name) at (\a:3cm) {$\word$};
关于你的第二个问题,我认为这是因为括号混淆了名称的解析node
。例如,使用A(A)
作为名称,你会得到\node (A(A)) ...
。我猜第一个右括号被视为名称的结尾,从而给出错误No shape named A(A is known
。
您的代码有两个工作版本,一个带有括号,一个带有大括号,以及上面提到的解决方法。
\documentclass[tikz,border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[shorten >=1pt,->]
\tikzset{vertex/.style={circle,fill=black!25,minimum size=25pt,inner sep=0pt}}
\foreach \name/\a in {A/90, A''/180, A[A]/270, A'[A]/0}
\node[vertex] (\name) at (\a:3cm) {$\name$};
\foreach \from/\to in {A/A'', A/A[A], A/A'[A]}
\draw (\from) -- (\to);
\end{tikzpicture}
\begin{tikzpicture}[shorten >=1pt,->]
\tikzset{vertex/.style={circle,fill=black!25,minimum size=30pt,inner sep=0pt}}
\foreach \name/\word/\a in {A/A/90, A''/A''/180, A[A]/A\{A\}/270, A'[A]/A'\{A\}/0}
\node[vertex] (\name) at (\a:3cm) {$\word$};
\foreach \from/\to in {A/A'', A/A[A], A/A'[A]}
\draw (\from) -- (\to);
\end{tikzpicture}
\end{document}