有没有办法只绘制节点的选定边框?我想到的节点形状是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}