我正在尝试编写一个宏,该宏在给定要使用的刻度标记数的情况下绘制一条数字线。但是,在代码中的几个地方,我尝试使用命令的参数(特别是1/(#1-1+3)
和#1-1
)进行算术运算,但似乎不起作用。我收到一条错误消息,内容如下:
Illegal unit of measure (pt inserted).
<to be read again>
-
l.96 \numline{5}
它似乎将减号-
视为度量单位,但我不确定这是怎么发生的。我的完整代码如下。
\documentclass{article}
\usepackage{pgf,tikz}
\usepackage{ifthen}
\usepackage{amsmath}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{calc}
\begin{document}
\newcommand{\numline}[1]{
\pgfmathsetmacro{\spacing}{1/(#1-1+3)}%
\begin{tikzpicture}[scale=\textwidth/1cm]
\draw[latex-latex,thick] (0,0) -- (1,0);
\foreach \i in {0,...,#1-1}
\draw[shift={(1.5*\spacing+\i,0)},color=black,thick] (0pt,5/6pt) -- (0pt,-5/6pt);
\end{tikzpicture}
}
\numline{5}
\end{document}
答案1
欢迎来到 TeX.SE!Ti钾Z 很聪明,但不是那聪明。TikZ 不会在\foreach
表达式中执行数学运算,但你需要帮助 Ti钾Z 有点。这就是我在循环中添加\pgfmathtruncatemacro{\imax}{#1-1}
和使用的原因。\imax
\documentclass{article}
\usepackage{pgf,tikz}
\usepackage{ifthen}
\usepackage{amsmath}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{calc}
\begin{document}
\newcommand{\numline}[1]{
\pgfmathsetmacro{\spacing}{1/(#1-1+3)}%
\begin{tikzpicture}[scale=\textwidth/1cm]
\draw[latex-latex,thick] (0,0) -- (1,0);
\pgfmathtruncatemacro{\imax}{#1-1}
\foreach \i in {0,...,\imax}
\draw[shift={(1.5*\spacing+\i,0)},color=black,thick] (0pt,5/6pt) -- (0pt,-5/6pt);
\end{tikzpicture}
}
\numline{5}
\end{document}
或者,您可以通过以下方式强制执行整数运算\numexpr
\documentclass{article}
\usepackage{tikz}
\usepackage{amsmath}
\usetikzlibrary{arrows.meta,calc}
\begin{document}
\newcommand{\numline}[1]{
\pgfmathsetmacro{\spacing}{1/(#1-1+3)}%
\begin{tikzpicture}[scale=\textwidth/1cm]
\draw[latex-latex,thick] (0,0) -- (1,0);
\foreach \i in {0,...,\numexpr#1-1\relax}
\draw[shift={(1.5*\spacing+\i,0)},color=black,thick] (0pt,5/6pt) -- (0pt,-5/6pt);
\end{tikzpicture}
}
\numline{5}
\end{document}
但我怀疑你可能想要这样的东西。
\documentclass{article}
\usepackage{tikz}
\newcommand{\numline}[1]{
\pgfmathsetmacro{\spacing}{1/(#1-1+3)}%
\typeout{\spacing}
\centerline{\begin{tikzpicture}[scale=\textwidth/1cm]
\draw[latex-latex,thick] (0,0) -- (1,0);
\pgfmathtruncatemacro{\imax}{#1-1}
\foreach \i in {0,...,\imax}
\draw[thick]
({(1.5+\i)*\spacing},5/6pt) -- ({(1.5+\i)*\spacing},-5/6pt);
\end{tikzpicture}}
}
\begin{document}
\numline{5}
\end{document}