我正在尝试设置anchor=base
节点标签,以便标签与基线对齐。如果我在标签本身中设置选项,它似乎可以工作,但如果我全局设置选项,则不行。
没有选择:
\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\tikzset{mynode/.style={circle,fill=black}}
\begin{tikzpicture}
\draw (0,0) node[mynode,label={Aa}] (n1) {}
-- (1,0) node[mynode,label={Ag}] (n2) {}
-- (2,0) node[mynode,label={Bb}] (n3) {};
\end{tikzpicture}
\end{document}
在每个标签中设置选项:
\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\tikzset{mynode/.style={circle,fill=black}}
\begin{tikzpicture}
\draw (0,0) node[mynode,label={[anchor=base,yshift=2pt]Aa}] (n1) {}
-- (1,0) node[mynode,label={[anchor=base,yshift=2pt]Ag}] (n2) {}
-- (2,0) node[mynode,label={[anchor=base,yshift=2pt]Bb}] (n3) {};
\end{tikzpicture}
\end{document}
使用全局设置选项:
\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\tikzset{mynode/.style={circle,fill=black}}
\begin{tikzpicture}[every label/.style={anchor=base,yshift=2pt}]
\draw (0,0) node[mynode,label={Aa}] (n1) {}
-- (1,0) node[mynode,label={Ag}] (n2) {}
-- (2,0) node[mynode,label={Bb}] (n3) {};
\end{tikzpicture}
\end{document}
但全局设置其他选项似乎有效;例如,如果我更改为
\begin{tikzpicture}[every label/.style={blue,anchor=base,yshift=2pt}]
然后我得到:
我如何才能全局设置对齐方式而不是单独设置每个标签的对齐方式?(如果我可以在节点样式声明中设置标签样式就更好了。)
答案1
引用tikz 中的节点基线和5.1 节点样式的pgf manual
:
基线不匹配的问题是由于 . 和数字以及 E 的高度和深度都不同。如果它们都具有相同的高度和深度,它们将以相同的方式垂直放置。因此,Ilka 需要做的就是使用文本高度和文本深度选项明确指定节点的高度和深度。
例如,如果我们使用
every label/.append style={text depth=.25ex,color=blue,},
然后我们得到
这是一个完整的例子
% arara: pdflatex
\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\tikzset{mynode/.append style={circle,fill=black},
every label/.append style={text depth=.25ex,color=blue,},
}
\begin{document}
\begin{tikzpicture}
\draw (0,0) node[mynode,label={Aa}] (n1) {}
-- (1,0) node[mynode,label={Ag}] (n2) {}
-- (2,0) node[mynode,label={Bb}] (n3) {};
\end{tikzpicture}
\end{document}
答案2
问题是锚点被覆盖了。换句话说,every label
应用得太早了。作为一种解决方法,我添加了第二个版本的every label
,every label add
,它会在稍后应用。如果你然后说
every label add/.style={anchor=base}
锚点将按需要设置。
\documentclass[margin=5mm]{standalone}
\usepackage{tikz}
\makeatletter% from tikz.code.tex
\def\tikz@@parse@label@nonactive[#1]#2:#3:\pgf@nil{%
\tikzset{%
append after command = {%
\bgroup
[current point is local=true]
\pgfextra{\let\tikz@save@last@fig@name=\tikz@last@fig@name\tikz@node@is@a@labelfalse}
node [every label,
tikz@label@angle = #2,
anchor=@auto,
every label add,%<- added
#1,
tikz@label@post = \tikz@label@distance] {\iftikz@handle@active@nodes\expandafter\scantokens\else\expandafter\pgfutil@firstofone\fi{#3\noexpand}}
\pgfextra{\global\let\tikz@last@fig@name=\tikz@save@last@fig@name}
\egroup}}}%
\tikzset{every label add/.style={}}
\makeatother
\begin{document}
\tikzset{mynode/.style={circle,fill=black}}
\begin{tikzpicture}
\draw (0,0) node[mynode,label={[anchor=base,yshift=2pt]Aa}] (n1) {}
-- (1,0) node[mynode,label={[anchor=base,yshift=2pt]Ag}] (n2) {}
-- (2,0) node[mynode,label={[anchor=base,yshift=2pt]Bb}] (n3) {};
\end{tikzpicture}
\begin{tikzpicture}[every
label/.append style={yshift=2pt},every label add/.style={anchor=base}]
\draw (0,0) node[mynode,label={Aa}] (n1) {}
-- (1,0) node[mynode,label={Ag}] (n2) {}
-- (2,0) node[mynode,label={Bb}] (n3) {};
\end{tikzpicture}
\end{document}
可以想象,对此类功能提出请求是有意义的。