使用 TikZ 定位侧边栏和顶栏

使用 TikZ 定位侧边栏和顶栏

我对 TikZ 的定位感到很困惑。我正在尝试创建一个模板,其中顶部有一个灰色的栏作为标题仅限第一页左侧边栏的宽度与所有页面的左边距相同。

问题是 tikz 原点不仅不在我期望的位置,而且还有我没有考虑到的额外空间。

代码:

\documentclass[a4paper]{article}

\usepackage{fancyhdr}
\usepackage{tikz}
\usepackage[top]{background}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage{todonotes}

\usepackage[left=2.5cm,top=2.5cm,right=2.5cm,bottom=2.5cm,nofoot]{geometry}
\definecolor{sidecolor}{HTML}{E7E7E7}
\definecolor{mainblue}{HTML}{0E5484}

\newlength\imagewidth
\newlength\imagescale
\pgfmathsetlength{\imagewidth}{5cm}
\pgfmathsetlength{\imagescale}{\imagewidth/600}

%% Set background in all pages to the be a gray box in the left margin
\newcommand{\leftmarginbox}{
  \begin{tikzpicture}[overlay]
    \node [rectangle, fill=sidecolor, minimum width=2.5cm, minimum height=\paperheight] at (0cm,0cm) {};
    \node [circle, fill=blue] at (0, 0){};
  \end{tikzpicture}
}
\SetBgContents{\leftmarginbox}

\thispagestyle{fancy}
\setlength{\headheight}{6cm}
\setlength{\headwidth}{\paperwidth}
\setlength{\oddsidemargin}{0pt}
\setlength{\hoffset}{0pt}
\setlength{\voffset}{0pt}

\lhead{%
  \begin{tikzpicture}[overlay]
    \node [rectangle, fill=sidecolor, anchor=north, minimum width=\paperwidth, minimum height=6cm] (box) at (0cm,0cm){};
    \node [circle, fill=red] at (0, 0){};
  \end{tikzpicture}
  \begin{minipage}{6cm}
    \begin{center}
      \begin{tikzpicture}[x=\imagescale,y=-\imagescale]
        \clip (600/2, 567/2) circle (567/2);
        \node[anchor=north west, inner sep=0pt, outer sep=0pt] at (0,0) {\includegraphics[width=\imagewidth,draft]{images/portrait.png}};
      \end{tikzpicture}
    \end{center}
    \begin{center}
      {\Huge\color{mainblue} Foo}\\
      {\Large\color{black!80}---Bar---}
    \end{center}
  \end{minipage}
  \begin{minipage}{5cm}
    \vspace*{\fill}
    \renewcommand{\arraystretch}{1.6}
    Tabular foo
    \vfill
  \end{minipage}
}%
\chead{}%
\rhead{%
  \begin{minipage}{7cm}
    RIGHTHEAD
  \end{minipage}%
}

\begin{document}
\lipsum
\newpage
\pagestyle{empty}
\lipsum
\end{document}

问题:

  • 顶部栏不在顶部边缘且没有填满整个纸张宽度;
  • 边距不仅有2.5cm,而且不在左边缘;
  • 页眉应该只出现在第一页,并且应该延伸到整张纸的宽度,而不是限制在文本宽度内;

任何帮助都将不胜感激。谢谢。

答案1

抱歉,我真的不明白你所说的第二项和第三项是什么意思。也许这不仅仅是我的问题,你的问题在这里已经 3 个小时没有得到解决。不过,我可以做的一件事是修复覆盖图片。你只需将它放在一个随机位置,它就会出现在那里。你可能想要使用绝对页面坐标。

\documentclass[a4paper]{article}

\usepackage{fancyhdr}
\usepackage{tikz}
\usepackage[top]{background}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage{todonotes}

\usepackage[left=2.5cm,top=2.5cm,right=2.5cm,bottom=2.5cm,nofoot]{geometry}
\definecolor{sidecolor}{HTML}{E7E7E7}
\definecolor{mainblue}{HTML}{0E5484}

\newlength\imagewidth
\newlength\imagescale
\pgfmathsetlength{\imagewidth}{5cm}
\pgfmathsetlength{\imagescale}{\imagewidth/600}

%% Set background in all pages to the be a gray box in the left margin
\newcommand{\leftmarginbox}{
  \begin{tikzpicture}[overlay]
    \node [rectangle, fill=sidecolor, minimum width=2.5cm, minimum height=\paperheight] at (0cm,0cm) {};
    \node [circle, fill=blue] at (0, 0){};
  \end{tikzpicture}
}
\SetBgContents{\leftmarginbox}

\thispagestyle{fancy}
\setlength{\headheight}{6cm}
\setlength{\headwidth}{\paperwidth}
\setlength{\oddsidemargin}{0pt}
\setlength{\hoffset}{0pt}
\setlength{\voffset}{0pt}

\lhead{%
  \tikz[remember picture]{\node(X){\phantom{X}};}   
  \begin{tikzpicture}[overlay,remember picture]
    \node [anchor=north west,rectangle, fill=sidecolor, minimum
    width=\paperwidth, minimum height=6cm] (box) at (X.north-|current page.west){};
    \node [circle, fill=red] at ([xshift=\paperwidth/2]X.west){};
  \end{tikzpicture}
  \begin{minipage}{6cm}
    \begin{center}
      \begin{tikzpicture}[x=\imagescale,y=-\imagescale]
        \clip (600/2, 567/2) circle (567/2);
        \node[anchor=north west, inner sep=0pt, outer sep=0pt] at (0,0) {\includegraphics[width=\imagewidth,draft]{images/portrait.png}};
      \end{tikzpicture}
    \end{center}
    \begin{center}
      {\Huge\color{mainblue} Foo}\\
      {\Large\color{black!80}---Bar---}
    \end{center}
  \end{minipage}
  \begin{minipage}{5cm}
    \vspace*{\fill}
    \renewcommand{\arraystretch}{1.6}
    Tabular foo
    \vfill
  \end{minipage}
}%
\chead{}%
\rhead{%
  \begin{minipage}{7cm}
    RIGHTHEAD
  \end{minipage}%
}

\begin{document}
\lipsum
\newpage
\pagestyle{empty}
\lipsum
\end{document}

在此处输入图片描述

如果您能更好地解释其他项目,例如带有草图,我会很乐意尝试一下。

相关内容