在下面的例子中,我试图获得相同的蓝色和红色框,但红色框中没有任何文本。我想让红色框与蓝色框完全相同,其大小取决于 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
完全适合。