我想制作一张带有家谱树的海报。到目前为止,我设法创建了树并使用 resizebox 将其调整到合适的高度。现在,我想用不同的颜色为整个页面的背景着色,这种着色的坐标取决于家谱树。在下面的 MWE 中,我用灰色和黄色为调整大小的 tikzpicture 的边界框着色,灰色和黄色之间的线的高度由树决定。我想将这种着色扩展到整个背景。
我遇到的问题如下:
- 如果我在单独的 tikzpicture 中绘制背景,则由于调整大小框,我无法访问树的节点。
autosizetikzpicture
从genealogytree
包中也有同样的问题- 如果我只是通过添加超出页面的节点来使图片变得非常大,那么我就会产生溢出并在实际海报之前得到一张白页。
欢迎任何想法。以下是 MWE:
\documentclass{beamer}
\usepackage[size = a0,orientation = portrait]{beamerposter}
\usepackage[all]{genealogytree}
\usetikzlibrary{backgrounds}
\setbeamersize{text margin left=0mm}
\setbeamersize{text margin right=0mm}
\begin{document}%
\centering%
\phantom{}
\vspace{1cm}
\noindent\resizebox{!}{.97\paperheight}{%
\begin{tikzpicture}[remember picture]%
\genealogytree[template=signpost]{
parent{
g[id=a1]{a1}
parent{
g[id=a2]{a2}
parent{
g[id=a3]{a3}
parent{
g[id=a4]{a4}
parent{
g[id=a5]{a5}
parent{
g[id=a6]{a6}
parent{
g[id=a7]{a7}
parent{
g[id=a8]{a8}
parent{
g[id=a9]{a9}
parent{
g[id=a10]{a10}
}}}}}}}}}}}
\begin{pgfonlayer}{background}
\fill[black!60] (current bounding box.south west) rectangle (a5-|current bounding box.south east);
\fill[yellow!55] (a5-|current bounding box.south west) rectangle (current bounding box.north east);
\end{pgfonlayer}
\end{tikzpicture}}
\end{document}
答案1
两处(半处)变化:
除了从 的角绘制背景外
current bounding box
,您还可以使用 的角current page
(需要remember picture
选项)为了避免由于图片不适合文本区域而出现额外的白页,您可以使用
overlay
背景路径选项。(我总是使用
frame
带有 beamer 的环境,即使你只制作一页文档。这将使你免于手动在顶部添加垂直空间等黑客攻击)
\documentclass{beamer}
\usepackage[size = a0,orientation = portrait]{beamerposter}
\usepackage[all]{genealogytree}
\usetikzlibrary{backgrounds}
\setbeamersize{text margin left=0mm}
\setbeamersize{text margin right=0mm}
\begin{document}%
\begin{frame}
\centering%
\resizebox{!}{.97\paperheight}{%
\begin{tikzpicture}[remember picture]%
\genealogytree[template=signpost]{
parent{
g[id=a1]{a1}
parent{
g[id=a2]{a2}
parent{
g[id=a3]{a3}
parent{
g[id=a4]{a4}
parent{
g[id=a5]{a5}
parent{
g[id=a6]{a6}
parent{
g[id=a7]{a7}
parent{
g[id=a8]{a8}
parent{
g[id=a9]{a9}
parent{
g[id=a10]{a10}
}}}}}}}}}}}
\begin{pgfonlayer}{background}
\fill[black!60,overlay] (current page.south west) rectangle (a5-|current page.south east);
\fill[yellow!55,overlay] (a5-|current page.south west) rectangle (current page.north east);
\end{pgfonlayer}
\end{tikzpicture}}
\end{frame}
\end{document}
答案2
我的解决方案并没有什么不同萨姆卡特的.current page
提供了节点,但并没有解决难题。我认为,其中一个问题是,由于背景位于要调整大小的框内,因此您最终会调整背景的大小。例如,由于背景被调整为纸张高度的 97%,因此您总是会在顶部和底部看到白色边距。
另一个问题是,出于我不明白的原因,这也会导致树本身消失。我以为这可能是由于genealogytree
使用了background
,但显然并非如此。文档中有使用标准background
层并在后面创建附加层的示例那背景并不能解决问题。
因此,这个问题的部分原因可能是背景被调整了大小。显而易见的解决方案是不调整背景大小。我没有使用overlay
(我没有想到),而是简单地告诉tikz
在计算图片的边界框时不要考虑背景。
remember picture
这里仍然需要使用以使current page
节点正常工作。
\documentclass{beamer}
\usepackage[size = a0,orientation = portrait]{beamerposter}
\usepackage[all]{genealogytree}
\usetikzlibrary{backgrounds}
\makeatletter
\let\mypgfrelevantforpicturesizefalse\pgf@relevantforpicturesizefalse
\let\mypgfrelevantforpicturesizetrue\pgf@relevantforpicturesizetrue
\makeatother
\setbeamersize{text margin left=0mm}
\setbeamersize{text margin right=0mm}
\begin{document}
\centering
\phantom{}
\vspace{1cm}
\noindent
\begin{autosizetikzpicture}[remember picture]{}{.97\paperheight}
\genealogytree[template=signpost]{
parent{
g[id=a1]{a1}
parent{
g[id=a2]{a2}
parent{
g[id=a3]{a3}
parent{
g[id=a4]{a4}
parent{
g[id=a5]{a5}
parent{
g[id=a6]{a6}
parent{
g[id=a7]{a7}
parent{
g[id=a8]{a8}
parent{
g[id=a9]{a9}
parent{
g[id=a10]{a10}
}}}}}}}}}}}
\mypgfrelevantforpicturesizefalse
\begin{scope}[on background layer]
\fill[black!60] (current page.south west) rectangle (a5-|current page.east);
\fill[yellow!55] (a5-|current page.west) rectangle (current page.north east);
\end{scope}
\end{autosizetikzpicture}
\end{document}
虽然我在这里没有这样做,但我还是建议使用frame
中的内容beamer
。首先,它使应用modes
和利用类的各种功能变得更加容易。