我有以下内容:
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\nend{6}
\def\rb{1.5mm}
\draw (0,0) -- (\nend,0);
\foreach \x in {0,...,\nend} {%
\coordinate (\x) at (\x,0);
}
\foreach \x in {\nend,0} {%
\ifx\x\nend
\draw[fill] (\x) circle[color=blue,radius=\rb] node[blue,below=2mm] {$x_{n}$};
\else
\draw[fill] (\x) circle[radius=\rb] node[black,below=2mm] {$x_{\x}$};
\fi
}
\end{tikzpicture}
\end{document}
我明白了:
我期望最后一个节点是 x_n,但事实并非如此。我看过以下答案:这个问题,但我已经在使用整数,所以我希望事情能够匹配。无论 \nend 是列表中的第一个还是最后一个,都会发生这种情况。
这个例子确实有效:
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\nend{6}
\pgfmathparse{\nend-1}
\pgfmathsetmacro{\nm}{\pgfmathresult}
\def\nf{3}
\def\rb{1.5mm}
\def\rs{1mm}
\draw (0,0) -- (\nend,0);
\foreach \x in {0,...,\nend} {%
\coordinate (\x) at (\x,0);
}
\foreach \x in {1,...,\nm} {%
\ifx\x\nf
\draw[fill,color=blue] (\x) circle[radius=\rb];
\else
\draw[fill] (\x) circle[radius=\rs] node[below=2mm] {$x_{\x}$};
\fi
}
\end{tikzpicture}
\end{document}
然而,当我尝试匹配最后一个元素时,它失败了。
答案1
在第二个循环中,\foreach
依次执行
\def\x{\nend}<loop code>
\def\x{0}<loop code>
现在,\ifx\x\nend
在两种情况下都会返回 false:在您希望返回 true 的情况下,比较是在扩展为的宏\nend
和宏之间进行的\nend
,它们是不同的。您必须定义一个扩展为的宏\nend
才能获得 true:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\nend{6}\def\isnend{\nend}
\def\rb{1.5mm}
\draw (0,0) -- (\nend,0);
\foreach \x in {0,...,\nend} {%
\coordinate (\x) at (\x,0);
}
\foreach \x in {\nend,0} {%
\ifx\x\isnend
\draw[fill] (\x) circle[color=blue,radius=\rb] node[blue,below=2mm] {$x_{n}$};
\else
\draw[fill] (\x) circle[radius=\rb] node[black,below=2mm] {$x_{\x}$};
\fi
}
\end{tikzpicture}
\end{document}