![使用 \foreach 和基于计数器的附加宏将数字作为标记](https://linux22.com/image/253000/%E4%BD%BF%E7%94%A8%20%5Cforeach%20%E5%92%8C%E5%9F%BA%E4%BA%8E%E8%AE%A1%E6%95%B0%E5%99%A8%E7%9A%84%E9%99%84%E5%8A%A0%E5%AE%8F%E5%B0%86%E6%95%B0%E5%AD%97%E4%BD%9C%E4%B8%BA%E6%A0%87%E8%AE%B0.png)
首要问题
我想用命令绘制多条曲线,\foreach
并将它们的数字作为标记。这是我想到的代码:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread{
1 4 0.2 0.1
2 4.2 0.1 0.5
3 3.1 0.3 0.4
4 2.5 0.25 0.35
}\table
\begin{axis}
\foreach \i in {1,2,3}
\addplot+[text mark={\i}, mark=text] table[x index=0, y index=\i]{\table};
\end{axis}
\end{tikzpicture}
\end{document}
其结果如下:
我的问题是由于某种原因,text mark={\i}
被坚持了
1
。
一种解决方案是使用\pgfplotsinvokeforeach
命令(参见我的回答)。
第二期
但是现在如果我需要使用例如从计数器计算出的其他索引
\pgfmathsetmacro{\j}{\i+1}% with the \foreach command
我会写
\pgfmathsetmacro{\j}{##1+1}% with the \pgfplotsinvokeforeach command
但最后一个不起作用。我认为问题在于#1
被解释为 应该代表 的参数\pgfmathsetmacro
。我尝试将哈希值加倍,但未能解决第二个问题。
答案1
对于更新的问题,您可以使用 PGF 的数学引擎。
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread{
1 4 0.2 0.1
2 4.2 0.1 0.5
3 3.1 0.3 0.4
4 2.5 0.25 0.35
}\table
\begin{axis}
\pgfplotsinvokeforeach{1,2,3}{%
\addplot+[text mark={\pgfmathparse{int(#1+1)}\pgfmathresult}, mark=text] table[x index=0, y index=#1]{\table};};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
这个问题可以通过使用\pgfplotsforeach
而不是\foreach
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread{
1 4 0.2 0.1
2 4.2 0.1 0.5
3 3.1 0.3 0.4
4 2.5 0.25 0.35
}\table
\begin{axis}
\pgfplotsinvokeforeach{1,2,3}{%
\addplot+[text mark={#1}, mark=text] table[x index=0, y index=#1]{\table};};
\end{axis}
\end{tikzpicture}
\end{document}
感谢这个问题我找到了它pgfplots:foreach 中的 setlength。