绘制节点的选定边框

绘制节点的选定边框

有没有办法只绘制节点的选定边框?我想到的节点形状是rectangle\node[draw]...语法绘制节点的所有四个边框。但如果我只想绘制顶部和底部边框怎么办?

我能想到的一个解决方案是“手动”绘制它们,如下所示。但这似乎不太优雅。我正在寻找类似于的键[draw={<left/right/top/bottom>}]

\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
    \node(s){node text};
    \draw(s.north west)--(s.north east) (s.south west)--(s.south east);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案1

如果这种方法不合适,请说出来,我会删除它。在这种情况下,我没有使用 tikz,而是创建了一个宏 ( \tbline) 来执行上划线/下划线。这种方法的缺点是 tikz 会将节点的基线放在底线的水平,而不是文本的基线。

在本 MWE 中,我首先展示您执行的手动方法,然后展示我提供的方法。为了更加完整,我还添加了\lrline\tblrline宏,用于根据与相同的基线进行左/右和完整装箱\tbline

\documentclass[border=2pt]{article}
\usepackage{stackengine}
\def\linethickness{.5pt}
\newcommand\tbline[1]{%
  \stackunder{%
    \stackon{#1}{\rule{\widthof{~#1~}}{\linethickness}}%
  }{%
    {\rule{\widthof{~#1~}}{\linethickness}}%
  }%
}
\newsavebox\nodebox
\newcommand\lrline[1]{%
  \sbox\nodebox{%
    \stackunder{%
      \stackon{#1}{\phantom{\rule{\widthof{~#1~}}{\linethickness}}}%
    }{%
      {\phantom{\rule{\widthof{~#1~}}{\linethickness}}}%
    }%
  }%
  \rule[-\dp\nodebox]{\linethickness}{\ht\nodebox+\dp\nodebox}%
  \usebox{\nodebox}%
  \rule[-\dp\nodebox]{\linethickness}{\ht\nodebox+\dp\nodebox}%
}
\newcommand\tblrline[1]{%
  \sbox\nodebox{%
    \tbline{#1}%
  }%
  \rule[-\dp\nodebox]{\linethickness}{\ht\nodebox+\dp\nodebox}%
  \usebox{\nodebox}%
  \rule[-\dp\nodebox]{\linethickness}{\ht\nodebox+\dp\nodebox}%
}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
    \node(s){node text};
    \draw(s.north west)--(s.north east) (s.south west)--(s.south east);
\end{tikzpicture}
\begin{tikzpicture}
    \node(s){\tbline{node text}};
\end{tikzpicture}
\begin{tikzpicture}
    \node(s){\lrline{node text}};
\end{tikzpicture}
\begin{tikzpicture}
    \node(s){\tblrline{node text}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容