Tikz:使用假的 \parbox 创建矩形

Tikz:使用假的 \parbox 创建矩形

在下面的例子中,我试图获得相同的蓝色和红色框,但红色框中没有任何文本。我想让红色框与蓝色框完全相同,其大小取决于 parbox 的内容,但不在其中插入任何文本?这可能吗?

\documentclass{book} 
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[anchor=north] (current page.north) node [fill=red,inner sep=1cm]{\parbox[c][][t]{\paperwidth}{\vphantom{Title}}};
\draw[anchor=north] (current page.north) node [fill=blue,opacity=.5,inner sep=1cm]{\parbox[c][][t]{\paperwidth}{Title}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

这里没有详细解释的问题是我正在使用影响文本的 Tikz 混合模式:

\draw[anchor=north] (midpoint) node [fill=black!75!ocre,blend mode=color,text width=\paperwidth,inner sep=1cm]{\parbox[c][][t]{\paperwidth}{\color{white} Text}};

并且我希望将文本保留为白色。一种解决方案是稍后将文本添加到不同的节点中。

答案1

不需要额外的库,也不需要对代码进行大的修改;只要 TeX 在\parbox零宽度的框中看到某些东西,您的代码就会起作用(因为问题的要求是框中“没有文本”):

\documentclass{book} 
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[anchor=north] (current page.north) node [fill=red,inner sep=1cm]{\parbox[c][][t]{\paperwidth}{\mbox{}\vphantom{Title}}};
\draw[anchor=north] (current page.north) node [fill=blue,opacity=.5,inner sep=1cm]{\parbox[c][][t]{\paperwidth}{Title}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

作为敲击提到his comment您甚至可以不用 es\parbox而使用以下方式指定所需的宽度text width

\documentclass{book} 
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[anchor=north] (current page.north) node [fill=red,inner sep=1cm,text width=\paperwidth]{\vphantom{Title}};
\draw[anchor=north] (current page.north) node [fill=blue,opacity=.5,inner sep=1cm,text width=\paperwidth]{Title};
\end{tikzpicture}

\end{document}

原始代码的问题是,虽然\vphantom提供了必要的高度,但\parbox仍然是空的。添加\mbox{}可以设置指定的宽度。

答案2

您可以使用let操作(需要calc库)

\documentclass[border=4mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node [fill=blue,inner sep=1cm,text width=0.5\paperwidth,anchor=north](a) at (0,0){Title};
\draw
 let \p1 = ($ (a.east) - (a.west) $),
     \n1 = {veclen(\x1,\y1)},
     \p2 = ($ (a.south) - (a.north) $),
     \n2 = {veclen(\x2,\y2)}
in
node [fill=red,inner sep=1cm,minimum width=\n1,minimum height=\n2,anchor=north,opacity=.5] at (0,0) {};
\end{tikzpicture}
\end{document}

在此处输入图片描述

正如 Ignasi 所建议的,您fit也可以使用库(更简单)

\documentclass[border=4mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}
\node [fill=blue,inner sep=1cm,text width=0.5\paperwidth](a) at (0,0){Title};
\node [fit=(a),fill=red,inner sep=2pt,opacity=0.5]  {};
\end{tikzpicture}
\end{document}

在此处输入图片描述

inner sep=2pt,红色节点只是为了演示,并使其0pt完全适合。

相关内容