![如何获取 tikz 图像中从 0 到 1 的坐标](https://linux22.com/image/302146/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%20tikz%20%E5%9B%BE%E5%83%8F%E4%B8%AD%E4%BB%8E%200%20%E5%88%B0%201%20%E7%9A%84%E5%9D%90%E6%A0%87.png)
我正在尝试创建一个封面,其背景图像填满整个页面。在封面的顶部,页面的下三分之一处应该有一个透明的矩形,从一侧到另一侧,我想在矩形的顶部写上标题、作者和日期。我正在使用 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}
我的问题是:
- 透明的白色盒子覆盖在边缘上。
- 标题和作者都应该与“图像”的大“I”大致左对齐。
如果我知道如何
- 使 tikz 中的坐标从图像左下角的 (0,0) 到右上角的 (1,1),并且
- 如何给出 tikz 坐标,不是相对于节点的中心,而是相对于左下角。
由于我使用的是 ShareLaTeX,因此该onimage
软件包不是一个选项。还有其他方法可以实现这一点吗?
答案1
由于图像被缩放以覆盖整个页面,因此只需要纸张的宽度和高度来设置移位和缩放变换。这可以使用shift
、x
和y
键来完成,但我已经定义了一个自定义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}