我正在创建一个axis
接收 5 个参数的环境(第一个是可选的,默认情况下为 1)。为了在 x 轴上制作 x 标记,我使用
\foreach \x in {#2,...,#4}
{\ifthenelse{\x = 0}{}{\draw [shift={(\x,0)}] (0,1pt)--(0,-1pt);\draw (\x,0.5mm) node[anchor=north,font=\tiny] {$\x$};}}
并且工作完美,但它不灵活:它标记和之间的所有整数#2
;#4
所以我写下这个试图让它不标记所有数字:
\foreach \x in {#2,#2+#1,...,#4}%#1 is the optional argument and by default is 1.
{\ifthenelse{\x = 0}{}{\draw [shift={(\x,0)}] (0,1pt)--(0,-1pt);\draw (\x,0.5mm) node[anchor=north,font=\tiny] {$\x$};}}
但我得到:
Missing = inserted for \ifnum."
我也尝试过:
\foreach \x [evaluate=\x as \xeval using \evaluar{\x}] in {#2,#2+#1,...,#4}
{\ifthenelse{\x = 0}{}{\draw [shift={(\x,0)}] (0,1pt)--(0,-1pt);\draw (\x,0.5mm) node[anchor=north,font=\tiny] {$\x$};}}
在哪里
\newcommand{\evaluar}[1]{\pgfmathparse{int(#1)} \pgfmathresult}
并得到:
Incomplete \iffalse; all text was ignored after line 121.
我尝试了很多组合,但 LaTeX 总是报错。有什么办法吗?
谢谢。
PD:我来自阿根廷,如果我的写作有错误,我很抱歉。
答案1
如果只涉及整数,则可以使用\numexpr
(在我的示例中,我使用了\axis
仅带有三个参数的命令:强制的第二和第三个参数控制范围,可选的第一个参数给出“步骤”):
\documentclass{article}
\usepackage{tikz}
\usepackage{ifthen}
\newcommand\axis[3][1]{%
\foreach \x in {#2,\the\numexpr#2+#1\relax,...,#3}
{\ifthenelse{\x = 0}{}{%
\draw [shift={(\x,0)}] (0,1pt)--(0,-1pt);
\draw (\x,0.5mm) node[anchor=north,font=\tiny] {$\x$};}}}
\begin{document}
\begin{tikzpicture}
\axis{2}{13}
\end{tikzpicture}
\begin{tikzpicture}
\axis[2]{2}{13}
\end{tikzpicture}
\begin{tikzpicture}
\axis[3]{2}{13}
\end{tikzpicture}
\begin{tikzpicture}
\axis[5]{2}{13}
\end{tikzpicture}
\end{document}
答案2
我认为没有必要如果那么您提供的 MWE 中的包。另外,查看 tikZ 的内部解析会发现,\relax
后面的部分\the\numexpr#2+#1
不是必需的。
\newcommand\axis[3][1]{%
\foreach \x in {#2,\the\numexpr#2+#1,...,#3}{%
\ifnum\x=0\relax\else
\draw [shift={(\x,0)},color=red]
(-1.5pt,0) -- (1.5pt,0) (0,-1.5pt) -- (0,1.5pt);
\draw (\x,0.5mm) node[anchor=north,font=\normalfont] {$\mathbf{\x}$};
\fi
}%
}
我认为 Medina 和我的结果存在问题。既然最后一个点始终是13
,为什么13
输出中的某些行没有显示 ?
由于这个观察,我重新计算了结果\newforeach
并获得了以下输出。
\newcommand\axis[3][3]{%
\newforeach \x in {#2,\the\numexpr#2+#1,...,#3}{%
\ifnum\x=0\relax\else
\draw [shift={(\x,0)},color=red]
(-1.5pt,0) -- (1.5pt,0) (0,-1.5pt) -- (0,1.5pt);
\draw (\x,0.5mm) node[anchor=north,font=\normalfont] {$\mathbf{\x}$};
\fi
}%
}
这是另一个测试:
\newcommand\axis[3][5]{%
\newforeach [
count in = \ci all \x satisfying \ifnum\x>4\fi initially 0,
remember = \x as \lastx initially 1
]
\x in {#2,\the\numexpr#2+#1,...,#3}{%
\ifnum\x=0\relax\else
\draw [shift={(\x*.9,0)},color=red]
(-1.5pt,0) -- (1.5pt,0) (0,-1.5pt) -- (0,1.5pt);
\draw (\x*.9,0.4mm) node[anchor=north,font=\small] {$\mathbf{\lastx,\x}$};
\ifforeachlastitem
\draw (\x,0.4mm) node[anchor=north,font=\small,blue] {$>4:\ci$};
\fi
\fi
}%
}