考虑以下代码:
\begin{tikzpicture}
\node[align=left,font={\small\bfseries}] at (-30 pt, 30pt) {99.99\% $500 \mu s$};
\node[align=left,font={\small\bfseries}] at (-30 pt, 10pt) {Median Latency $5 \mu s$};
\end{tikzpicture}
我如何才能使其500 us
与5 us
渲染的图像对齐?
更具体地说,我希望它几乎完全像上面代码中的纯文本一样对齐,左边缘99
与左边缘对齐Median
,并且数字也对齐。
我尝试使用&
与尝试对齐两个方程时相同的方法,但它只会导致错误。
答案1
第一个解决方案
使用您的代码示例,您可以使用right
或anchor=west
将两个节点左对齐一起makebox
确保文本的左侧部分在两个节点中占用相同的空间并且垂直对齐(参见下面的@egreg 评论):
\documentclass[varwidth,margin=0.5cm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[font={\small\bfseries},left] at (-30 pt, 30pt) {\parbox{3cm}{99.99\%}$500 \mu s$};
\node[font={\small\bfseries},left] at (-30 pt, 10pt) {\parbox{3cm}{Median Latency}$5 \mu s$};
\end{tikzpicture}
\end{document}
第二种解决方案
或者您可以使用另一个节点来表示文本的右侧部分(但两个文本不是垂直对齐的):
\documentclass[varwidth,margin=0.5cm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (-30 pt, 30pt) node[font={\small\bfseries},left] {99.99\%} ++(3,0) node[left] {$500 \mu s$};
\draw (-30 pt, 10pt) node[font={\small\bfseries},left] {Median Latency} ++(3,0) node[left] {$5 \mu s$};
\end{tikzpicture}
\end{document}
答案2
如果需要将它们分成两份分离我建议使用以下节点\makebox
:
笔记:
- 我也强烈建议你使用包裹
siunitx
以确保单位的格式正确且一致,正如我在此示例中所做的那样。
代码:
\documentclass[varwidth,margin=0.5cm]{standalone}
\usepackage{tikz}
\usepackage{calc}
\usepackage{siunitx}
\newcommand*{\Widest}{\small\bfseries Median Latency}
\newcommand*{\MakeBox}[2]{\makebox[\widthof{\Widest}][l]{#1} #2}
\begin{document}
\begin{tikzpicture}
\node[font={\small\bfseries},anchor=west] at (-30 pt, 30pt) {\MakeBox{99.99\%}{$\SI{500}{\micro \second}$}};
\node[font={\small\bfseries},anchor=west] at (-30 pt, 10pt) {\MakeBox{Median Latency}{$\SI{5}{\micro \second}$}};
\end{tikzpicture}
\end{document}
答案3
您可以使用matrix of nodes
,或使用多部分节点,或者——取决于您真正想要做什么——只需将 放在tabular
中node
。(当然,正如 egreg 在其评论中暗示的那样,如果这不是更大的一部分,tikzpicture
只需使用tabular
并完全删除tikzpicture
。)
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\section*{With matrix}
\begin{tikzpicture}
\matrix (m) [matrix of nodes,column 1/.style={font={\small\bfseries},text width=3cm,align=left},
column 2/.style={text width=1cm,align=left}] {
99.99\% & $500\mu s$ \\
Median Latency & $5\mu s$ \\
};
% to demonstrate that individual cells can be referenced
\draw [red,latex-] (m-1-2) -- ++(0,1);
\end{tikzpicture}
\section*{Tabular in node}
\begin{tikzpicture}
\node {%
\begin{tabular}{ll}
\small\bfseries 99.99\% & $500\mu s$ \\
\small\bfseries Median Latency & $5\mu s$
\end{tabular}
};
\end{tikzpicture}
\section*{Multipart node}
\begin{tikzpicture}[splitnode/.style={rectangle split,rectangle split horizontal,rectangle split parts=2,rectangle split part align={left},text width=3cm,font={\small\bfseries}}]
\node[splitnode] at (-30 pt, 30pt) {99.99\% \nodepart{two}$500 \mu s$};
\node[splitnode] at (-30 pt, 10pt) {Median Latency \nodepart{two}$5 \mu s$};
\end{tikzpicture}
\end{document}
答案4
可能这是一种老方法,因为我已经\shortstack
很多年没见过这个命令了。您可以通过修改 中的维度来更改两条线的分隔\vspace
,如果您不喜欢500
在 上方输入,您可以在 之前Latency
添加一些。但是,我不应该将与对齐,而应该将单位与 单位对齐。\hspace
$5\mu s
5 hundred
5 (unit)
\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikz \node[font={\small\bfseries}] {\shortstack{%
99.99\%\hfill $500 \mu s$\\
\vspace{1ex} \\
Median Latency $5 \mu s$}};
\end{document}
正如@egreg 所建议的,tabular
这可能是最好的方法,但如果您希望两条线之间的间隔更小,则必须\vspace
在中间行添加负数。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikz \node[font={\small\bfseries}] {%
\begin{tabular}{ll}%{l@{}r}
99.99\% & $500 \mu s$ \\
\vspace{0pt} & \\
Median Latency & $5 \mu s$
\end{tabular}};
\end{document}