在数轴上重置 \foreach 命令中的数字标签

在数轴上重置 \foreach 命令中的数字标签

我想要创建快速数字线。到目前为止,我拥有的是:

\documentclass[letterpaper,12pt]{book}
\usepackage{tikz}
\usetikzlibrary{shapes,snakes,backgrounds,arrows}   
\begin{document}
\begin{tikzpicture}[line width=1pt,line cap=round,x=.5cm,y=.5cm]
                        \clip (0,-0.8) rectangle (10,1);
                        %   Inequality Line
                        \draw   [<->,thick]     (0,0) -- (10,0);
                        %   Tick Marks
                        \foreach \x in {1,2,...,9}
                        \draw (\x,-2pt) -- (\x,2pt) node [anchor=north,below=3pt] {$\scriptstyle \x$};
                        %   Displayed Solution
\end{tikzpicture}               
\end{document}

我正在寻找的是改变 x 间隔的循环以从不同的数字开始。

例如,我想让数轴上的第一个数字分别为 8,然后是 9、10、11,而不是 1、2、3 等;但我找不到任何可以帮助我解决这个问题的答案。我想有一个简单的数学公式可以做到这一点。

答案1

下面的第一个示例代码提供了实现所需结果的三个选项:

  1. 使用\numexpr(仅用于执行整数基本算术)。

  2. 使用evaluate= <variable> as <macro> using <formula>语法(这也涉及精度的变化,以避免小数分隔符和多余的数字)。

  3. 使用count=<macro> from <value>

有关第二和第三个选项的更多信息,请参阅自定义 foreach 语句的选项(pgfmanual 的第 508 页):

\documentclass[letterpaper,12pt]{book}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[line width=1pt,line cap=round,x=.5cm,y=.5cm]
\draw[<->,thick] (0,0) -- (10,0);
\foreach \x  in {1,2,...,9}
  \draw (\x,-2pt) -- (\x,2pt) 
    node [anchor=north,below=3pt]   {$\scriptstyle\the\numexpr\x+8\relax$};
\begin{scope}[yshift=-1cm,/pgf/number format/.cd,precision=0]
\draw[<->,red,thick] (0,0) -- (10,0);
\foreach \x [evaluate=\x as \xeval using \x+8] in {1,2,...,9}
  \draw (\x,-2pt) -- (\x,2pt) 
    node [anchor=north,below=3pt] {$\scriptstyle\pgfmathprintnumber{\xeval}$};
\end{scope}               
\begin{scope}[yshift=-2cm]
\draw[<->,blue,thick] (0,0) -- (10,0);
\foreach \x [count=\xi from 9] in {1,2,...,9}
  \draw (\x,-2pt) -- (\x,2pt) 
    node [anchor=north,below=3pt] {$\scriptstyle\xi$};
\end{scope}
\end{tikzpicture}               

\end{document}

在此处输入图片描述

在问题所需的情况下,提到的所有三种方法都会产生相同的结果;但是,evaluate= <variable> as <macro> using <formula>如果涉及更复杂的操作,则可以使用该语法;举个小例子:

\documentclass[letterpaper,12pt]{book}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[line width=1pt,line cap=round,x=.5cm,y=.5cm,/pgf/number format/.cd,precision=1]
\draw[<->,thick] (0,0) -- (10,0);
\foreach \x  in {1,2,...,9}
  \draw (\x,-2pt) -- (\x,2pt) 
    node [anchor=north,below=3pt]   {$\scriptstyle\the\numexpr\x+8\relax$};
\begin{scope}[yshift=-1cm]
\draw[<->,red,thick] (0,0) -- (10,0);
\foreach \x [evaluate=\x as \xeval using 1.5*\x] in {1,2,...,9}
  \draw (\x,-2pt) -- (\x,2pt) 
    node [anchor=north,below=3pt] {$\scriptstyle\pgfmathprintnumber{\xeval}$};
\end{scope}               
\begin{scope}[yshift=-2cm,x=1.2cm,y=.5cm]
\draw[<->,blue,thick] (0,0) -- (10,0);
\foreach \x [evaluate=\x as \xeval using e^(\x)] in {1,2,...,9}
  \draw (\x,-2pt) -- (\x,2pt) 
    node [anchor=north,below=3pt] {$\scriptstyle\pgfmathprintnumber{\xeval}$};
\end{scope}
\end{tikzpicture}               

\end{document}

在此处输入图片描述

答案2

你为什么不将你的构造参数化?

\documentclass[letterpaper,12pt]{book}
\usepackage{tikz}
\usetikzlibrary{shapes,snakes,backgrounds,arrows}

\newcommand{\solutionline}[1]{%
  \begin{tikzpicture}[line width=1pt,line cap=round,x=.5cm,y=.5cm]
    \edef\offset{\number\numexpr#1-1\relax}
    \clip (0,-0.8) rectangle (10,1);
    %   Inequality Line
    \draw   [<->,thick]     (0,0) -- (10,0);
    %   Tick Marks
    \foreach \x in {1,2,...,9}
      \draw (\x,-2pt) -- (\x,2pt) node [anchor=north,below=3pt]
        {$\scriptstyle\number\numexpr\x+\offset\relax$};
  \end{tikzpicture}}

\begin{document}
\solutionline{8}

\solutionline{5}

\end{document}

在此处输入图片描述

相关内容