TikZ PGF - 减号被解释为计量单位

TikZ PGF - 减号被解释为计量单位

我正在尝试编写一个宏,该宏在给定要使用的刻度标记数的情况下绘制一条数字线。但是,在代码中的几个地方,我尝试使用命令的参数(特别是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!TiZ 很聪明,但不是聪明。TikZ 不会在\foreach表达式中执行数学运算,但你需要帮助 TiZ 有点。这就是我在循环中添加\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}

相关内容