我想设计一种特殊的轴标签样式。x 轴是一条直线,没有箭头。这条线的末端下面是实际的标签,它由一个箭头组成,标签位于箭头中间。箭头的长度与线本身的长度完全相同。到目前为止,我是这样构造的:
\begin{tikzpicture}
\draw (-.5,0)--(6.5,0) ;
\draw [->,>=stealth] (5.5,-.5) -- (6.5,-.5) node [midway, fill=white, inner sep = 2pt]{$r$};
\end{tikzpicture}
虽然这看起来是我想要的样子,但我对这种建设性的方法并不满意,我宁愿用节点来解决问题。然而,当我尝试用节点来解决这个问题时,我没能正确地对齐所有内容。
我怎样才能实现这个目标?
答案1
一个可能的解决方案:它确实使用node
s(实际上也是问题)通过insert path
s 的键(水平axis horizontal label
和垂直axis vertical label
方式)。
通过访问路径的最后一个坐标来保留对齐,这要归功于提取 TikZ 中任意点的 x,y 坐标. 箭头的宽度/高度,根据axis horizontal label
/axis vertical label
选择的模式,可以通过专用键进行自定义,如第二个示例所示。
代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
% Code by Peter Grill:
% https://tex.stackexchange.com/a/33706/13304
\newdimen\xval
\newdimen\yval
%\newcommand*{\getxyval}[1]{\path (#1); \pgfgetlastxy{\xval}{\yval};}%
\pgfkeys{/tikz/.cd,
axis label distance/.initial=0.5,
axis label distance/.get=\axislabeldist,
axis label distance/.store in=\axislabeldist,
axis label width/.initial=1,
axis label width/.get=\axislabelwd,
axis label width/.store in=\axislabelwd,
lb option/.style={midway, fill=white, inner sep = 2pt},
append horizontal label/.style={
insert path={
\pgfextra{
\pgfgetlastxy{\xval}{\yval};
\draw[<-,>=stealth]
($(\xval,\yval)-(0,\axislabeldist)$) --
($(\xval,\yval)-(\axislabelwd,\axislabeldist)$)
node [lb option]{$#1$};
}
}
},
append horizontal label/.default={},
append vertical label/.style={
insert path={
\pgfextra{
\pgfgetlastxy{\xval}{\yval};
\draw[<-,>=stealth]
($(\xval,\yval)-(\axislabeldist,0)$) --
($(\xval,\yval)-(\axislabeldist,\axislabelwd)$)
node [lb option]{$#1$};
}
}
},
append vertical label/.default={}
}
\begin{document}
\begin{tikzpicture}
\draw (-.5,0)--(3.5,0)[append horizontal label=r] ;
\end{tikzpicture}
\begin{tikzpicture}[axis label distance=0.25cm,
axis label width=0.75cm]
\draw (-1.5,-1.5)--(-1.5,3)[append vertical label=y] ;
\draw (-2,-1)--(4,-1)[append horizontal label=x];
\end{tikzpicture}
\end{document}
结果: