答案1
像这样吗?
\documentclass[tikz, border=2mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (0,0)--(10,0);
\foreach \i in {1,3,...,9}
\draw (\i,0) node[below]{0.\i} --++(90:2mm) node[above] {\includegraphics[width=1cm, height=1cm]{example-image-a}};
\foreach \i in {2,4,...,8}
\draw (\i,0) node[below]{0.\i} --++(90:2mm) +(0,1mm) [<-]--++(90:1.2cm) node[above] {\includegraphics[width=1cm, height=1cm]{example-image-a}};
\draw (10,0) node[below]{1.0} --++(90:2mm) +(0,1mm) [<-]--++(90:1.2cm) node[above] {\includegraphics[width=1cm, height=1cm]{example-image-a}};
\draw (0,0) node[below]{0.0}--++(90:2mm);
\end{tikzpicture}
\end{document}
答案2
以下是使用 TeX\ifodd
测试并\pgfmathprintnumber
沿水平轴打印刻度的一种方法:
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc, positioning}
\newcommand*{\myImgWidth}{1.3cm}% to avoid repeating a hardcoded value
\newlength{\myImgHeight}
\settoheight{\myImgHeight}{\includegraphics[width=\myImgWidth]{example-image-a}}
\begin{document}
\begin{tikzpicture}[x=10cm]
\foreach \X in {0, 1, ..., 10} {
\pgfmathsetmacro{\XF}{0.1*\X} % \XF is a float
\node[below] at (\XF,0) {%
\pgfkeys{/pgf/number format/.cd, fixed, precision=1, fixed zerofill}
\pgfmathprintnumber{\XF}};
\draw (\XF,0) -- (\XF,0.2); % the tick mark
\ifodd\X\relax
\node[above] at (\XF,0.2)
{\includegraphics[width=\myImgWidth]{example-image-a}};
\else
\draw[->]
% You may want to replace \myImgHeight with your max. image height
($(\XF,0.4) + (0,\myImgHeight)$)
node[above] {\includegraphics[width=\myImgWidth]{example-image-b}}
-- (\XF,0.25);
\fi
}
\draw (0,0) -- (1,0);
\end{tikzpicture}
\end{document}
\relax 的解释
以下是很好的做法,因为在 之后,TeX 会扩展标记\relax
,直到收集到 〈number〉。在我们的例子中,它将\ifodd\X
\ifodd
不是扩展 后停止\X
。事实上,\X
不是 \countdef
示例中的标记(寄存器的别名\count
——那是一个 〈number〉),它是一个宏扩展为一位或两位十进制数字。根据 TeX 语法中的 〈number〉,在这些数字之后,TeX 将继续扩展记号,直到找到一个非十进制数字的不可扩展记号(根据语法规则,如果第一个这样的记号是空格记号,则会被吞掉)。因此,如果没有\relax
(不可扩展记号),它将尝试扩展\node
,这可能会导致麻烦,具体取决于扩展的结果。有了\relax
,我们可以确定下面的 〈number〉由和\ifodd
的扩展给出\X
没有其他的。 你可以阅读这里了解有关此主题的更多详细信息。