如何获取 tikz 图像中从 0 到 1 的坐标

如何获取 tikz 图像中从 0 到 1 的坐标

我正在尝试创建一个封面,其背景图像填满整个页面。在封面的顶部,页面的下三分之一处应该有一个透明的矩形,从一侧到另一侧,我想在矩形的顶部写上标题、作者和日期。我正在使用 tikz,但遇到了一些困难。我的代码和封面目前如下所示:

\documentclass[a4paper]{article}
\usepackage{tikz}

\begin{document}
\thispagestyle{empty}

\begin{tikzpicture}[remember picture,overlay]
\node at (current page.center)
{\includegraphics[height=\paperheight]{example-image}};
\draw[fill=white,opacity=0.4] (-5,-24) rectangle (30,-18);
\node [scale=3.5] at (5,-20) {\sffamily\selectfont\textbf{Molecular Magnetism}};
\node [scale=2] at (5,-22) {\sffamily\selectfont\textbf{John Doe}};
\end{tikzpicture}

\end{document}

封面的当前外观

我的问题是:

  1. 透明的白色盒子覆盖在边缘上。
  2. 标题和作者都应该与“图像”的大“I”大致左对齐。

如果我知道如何

  1. 使 tikz 中的坐标从图像左下角的 (0,0) 到右上角的 (1,1),并且
  2. 如何给出 tikz 坐标,不是相对于节点的中心,而是相对于左下角。

由于我使用的是 ShareLaTeX,因此该onimage软件包不是一个选项。还有其他方法可以实现这一点吗?

答案1

由于图像被缩放以覆盖整个页面,因此只需要纸张的宽度和高度来设置移位和缩放变换。这可以使用shiftxy键来完成,但我已经定义了一个自定义page cs坐标系,以便可以像(1,1)通常一样使用坐标:

\documentclass[a4paper]{article}
\usepackage{tikz}
\begin{document}
\tikzset{page cs/.cd, x/.store in=\px, y/.store in=\py}
\tikzdeclarecoordinatesystem{page}{%
  \tikzset{page cs/.cd, #1}% 
  \pgfpointadd{\pgfpointanchor{current page}{south west}}%
    {\pgfpoint{\px*\paperwidth}{\py*\paperheight}}%
}
\thispagestyle{empty}
\begin{tikzpicture}[remember picture,overlay]
\node at (current page.center)
{\includegraphics[height=\paperheight]{example-image}};
\fill [white, opacity=0.5] (page cs:x=0,y=0) rectangle (page cs:x=1,y=1/3);
\foreach \x in {0,.125,...,1}
  \foreach \y in {0,.125,...,1}
    \fill (page cs:x=\x,y=\y) circle [radius=1/10] node[above] {\tt(\x,\y)};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

我收到了两个很好的答案,并最终使用了其中的部分内容,这就是为什么我认为一个完整的封面模板(人们只需插入背景图像和标题信息)可能会有所帮助:

\documentclass[a4paper]{article}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\begin{document}
\tikzset{page cs/.cd, x/.store in=\px, y/.store in=\py}
\tikzdeclarecoordinatesystem{page}{%
  \tikzset{page cs/.cd, #1}% 
  \pgfpointadd{\pgfpointanchor{current page}{south west}}%
    {\pgfpoint{\px*\paperwidth}{\py*\paperheight}}%
}
\thispagestyle{empty}

\begin{tikzpicture}[remember picture,overlay,font=\sffamily\bfseries\huge,inner sep=0pt,outer sep=0pt,white]

\node at (current page.center) {\includegraphics[height=\paperheight]{Images/cover2}};

\fill [NavyBlue,opacity=0.5] (page cs:x=0,y=0.075) rectangle (page cs:x=1,y=0.28);

\node [scale=2.28,anchor=west] at (page cs:x=0.075,y=0.225) {Molecular Magnetism};

\node [anchor=west] at (page cs:x=0.075,y=0.18) {A brief introduction to materials and applications};

\node [anchor=west] at (page cs:x=0.075,y=0.12) {John Doe - Cool University};

\end{tikzpicture}
\end{document}

最终结果可能看起来像这样:

最终封面

答案3

这可能不是最有效的方法,但我理解它;)。

下图显示了调整后的位置以及我用来确定位置的一排小红圈。显然,在使用之前,您应该删除这些圆圈。

放置圆圈

我已切换到更大且缩放较少的字体,因为默认字体根据其大小而不同,因此\Huge不仅仅是正常大小字体的缩放版本。请注意,您\selectfont根本不需要。此外,使用起来font=比将命令放在节点中更简洁一些。

(a |- b)告诉 TiKZ 使用与 垂直对齐(a)和水平对齐的点(b)。我在下面使用它来将白框与页面的西锚点和东锚点对齐。我使用 键anchor=west将文本框从其西(左)边缘对齐。

使用一个循环来放置 11 个小红圆圈,选择其中一个圆圈或多或少地将文本框的左边缘与“I”对齐。通过改变圆圈的位置,您可以更精确地做到这一点(但我猜这不是您的真实封面图片!)。

\documentclass[a4paper]{article}
\usepackage{tikz}
\begin{document}
\thispagestyle{empty}

\begin{tikzpicture}
  [
    remember picture,
    overlay,
    font=\sffamily\bfseries\Huge,
    inner sep=0pt,
    outer sep=0pt,
  ]
  \node at (current page.center) {\includegraphics[height=\paperheight]{example-image}};
  \foreach \i in {0,1,...,10}
    {
      \path (current page.west) to coordinate [pos=\i/10] (c\i) (current page.east);
      \filldraw [red] (c\i) circle (1pt);
    }
  \draw[fill=white,opacity=0.4] (current page.west |- 0,-24) rectangle (current page.east |- 0,-18);
  \node [scale=1.5, anchor=west] at (c1 |- 0,-20) {Molecular Magnetism};
  \node [anchor=west] at (c1 |- 0,-22) {John Doe};
\end{tikzpicture}

\end{document}

相关内容