如何设置 TikZ 节点的内容大小?

如何设置 TikZ 节点的内容大小?

我正在尝试根据之前给出的 PowerPoint 模板实现一个 beamer 模板。现在我正处于标题页,我需要你的建议。

我完成了一组坐标计算。之后我知道了哪些区域是为标题、副标题和其他文本保留的。在 MWE 中,我在那里放置了一个红色矩形,只是暂时让它可见。

由于标题可能很长,因此可能会出现换行,因此我想使用 LeTeX 的空间对齐技术来使内容很好地对齐。这里的想法是有一个 vbox(minipage在 MWE 中),它具有正确的大小,这样我就可以例如使用它\vfill来均匀地间隔范围内的剩余空间,而无需手动调整坐标。此外,这还允许我省略例如副标题,并且仍然具有有效的间距。

因此,假设我有“一些”坐标(nw),并且(se)我正在寻找跨越该矩形范围的迷你页面。tikzminimum height的属性在这里用处不大,因为它修改的是节点的形状而不是内容。据我所知,tikz 的拟合库也是如此。

使用 minipage 的方法似乎效果很好,但我需要将坐标的水平和垂直距离作为传统 LaTeX 长度寄存器中的长度值。使用这些,我可以定义 minipage,就像我下面使用硬编码高度明确做的那样。

有没有更简单的方法来实现我的尝试?如何获取两个坐标的垂直距离并保存在寄存器中?

\documentclass{beamer}
\usepackage{tikz}

\setbeamertemplate{title page}{
\begin{tikzpicture}[overlay,remember picture,every node/.style={inner sep=0pt}]
\path (current page.south west) node [anchor=south west] {\rule{5cm}{4cm}}; % Logo
\path % Here comes some crazy coordinate math normally, in MEW just dummy coordinates
    (current page.north east) ++(-7.5cm,-2cm) coordinate (nw) ++(6cm,-5cm) coordinate (se);

% Inside this rectangle the text should be placed
\draw [red] (nw) rectangle (se);

% Here comes a test implementation, how things could look like
\path (nw) node [anchor=north west,align=left] %
{\begin{minipage}[t][5cm]{\textwidth}
{\LARGE\bfseries The title}

\vfill

% {\Large\bfseries The subtitle}
% 
% \vfill

{\Large The Author}

\vfill

{\large 01/01/2020}
\end{minipage}
};
\end{tikzpicture}
}

\begin{document}
\begin{frame}
\titlepage
\end{frame}
\end{document}

答案1

实际上,您可以利用calc库和操作let一次性完成此操作,而无需明确定义其他 TeX 计数器。见下文。

\setbeamertemplate{title page}{
\begin{tikzpicture}[overlay,remember picture,every node/.style={inner sep=0pt}]
\path (current page.south west) node [anchor=south west] {\rule{5cm}{4cm}}; % Logo
\path % Here comes some crazy coordinate math normally, in MEW just dummy coordinates
    (current page.north east) ++(-7.5cm,-2cm) coordinate (nw) ++(6cm,-5cm) coordinate (se);

% Inside this rectangle the text should be placed
\draw [red] (nw) rectangle (se);

% Here comes a test implementation, how things could look like
\path 
let \p1 = ($(nw) - (se)$) in 
(nw) node [anchor=north west,align=left] %
{\begin{minipage}[t][\y1]{\textwidth}
{\LARGE\bfseries The title}

\vfill

% {\Large\bfseries The subtitle}
% 
% \vfill

{\Large The Author}

\vfill

{\large 01/01/2020}
\end{minipage}
};
\end{tikzpicture}
}

答案2

至少在我重读了 pgfmanual 的某些部分后,我能够找到该问题的解决方案。

定义坐标后,我可以使用类似这样的方法将它们提取到宏中(typeout这里只是为了调试):

\path (nw);
\pgfgetlastxy{\myfoox}{\myfooy}
\typeout{Last coordinate: \myfoox, \myfooy}
\path (se);
\pgfgetlastxy{\mybarx}{\mybary}
\typeout{Last coordinate: \mybarx, \mybary}

定义宏后,我现在可以使用以下方法为 LaTeX 寄存器分配这些值

\newlength\myfoo
\newlength\mybar
\setlength\myfoo{\myfooy}
\setlength\mybar{\mybary}

现在我可以将它们相减,得到两个坐标之间的距离(在本例中为垂直距离)。myfoo

\multiply\mybar by -1
\typeout{After negation: \the\mybar}
\advance\myfoo by \mybar
\typeout{Addition: \the\myfoo}

有了这个,我可以像这样起诉长度:

\path (nw) node [anchor=north west,align=left] %
{\begin{minipage}[t][\the\myfoo]{\textwidth}
...
\end{minipage}}

相关内容