如何在 Tikzpicture 中的两个节点上对齐文本?

如何在 Tikzpicture 中的两个节点上对齐文本?

考虑以下代码:

\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 us5 us渲染的图像对齐?

更具体地说,我希望它几乎完全像上面代码中的纯文本一样对齐,左边缘99与左边缘对齐Median,并且数字也对齐。

我尝试使用&与尝试对齐两个方程时相同的方法,但它只会导致错误。

答案1

第一个解决方案

使用您的代码示例,您可以使用rightanchor=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,或使用多部分节点,或者——取决于您真正想要做什么——只需将 放在tabularnode。(当然,正如 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 s5 hundred5 (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}

相关内容