我想要创建快速数字线。到目前为止,我拥有的是:
\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
下面的第一个示例代码提供了实现所需结果的三个选项:
使用
\numexpr
(仅用于执行整数基本算术)。使用
evaluate= <variable> as <macro> using <formula>
语法(这也涉及精度的变化,以避免小数分隔符和多余的数字)。使用
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}