Tikz 每次的格式似乎都不一样

Tikz 每次的格式似乎都不一样

我目前正在用该tikz包格式化一个页面。我创建了一个命令来插入一条垂直线并在其上方插入文本。遗憾的是,每次调用时格式似乎都不同(没有声明空格的地方有空格)。

正如您在此处看到的: 在此处输入图片描述

那儿发生什么事了?

我的代码:

% !TeX program = lualatex
\documentclass[a4paper,12pt]{article}

%font encoding & formatting
\usepackage[onehalfspacing]{setspace}
\usepackage{fontspec}
\setmainfont{Arial}
\usepackage[document]{ragged2e}

%language
\usepackage[ngerman]{babel}
\usepackage{lipsum}

%Styles
\usepackage{tikz}
\usepackage{tikzpagenodes}
\usepackage{atbegshi}
\usepackage{fancyhdr}
\usepackage{xcolor}

\definecolor{bluey}{RGB}{12,3,150}



\newcommand{\sep}[1]{
    \vspace{0.5cm}
    {\color{blue} \large \textbf{#1}}\\
    \begin{tikzpicture}
        \draw [blue, fill=blue] (-2,0.5) circle [radius=0.17];
        \draw [blue, line width = 1.5pt] (-1.75,0.5) -- (2.5,0.5);
        \draw [lightgray, line width = 1.5pt] (2.5,0.5) -- (11,0.5);
    \end{tikzpicture}

}

%header format
\newcommand\HeaderTwo{%
    \begin{tikzpicture}[remember picture,overlay]
    \fill[bluey]
    (current page.north west) -- (current page.north east) --
    ([yshift=2cm]current page.north east|-current page text area.north east) --
    ([yshift=3cm]current page.north west|-current page text area.north west) -- cycle;
    \end{tikzpicture}%
}

\begin{document}

\HeaderTwo
\sep{My very very long foo Text}
\vspace{0.5cm}
\lipsum[1]

\sep{Another very very long foo text}
\vspace{0.5cm}
\lipsum[2]

\clearpage
\HeaderTwo


\sep{Another very very long foo text}
\vspace{0.5cm}
\lipsum[3]

\end{document}

答案1

如果您不知道发生了什么,可以使用 一个非常方便的软件包来调试此问题showframe。 将它与您的代码一起使用,您会发现您的代码只是将第二页的第一部分标题向下移动,而不是解决问题。 问题在于\vspace{0.5cm}您的\sep命令。 它会产生指定量的垂直空间,但前提是它不在页面的开头。 这可能是标题和部分标题等所需的行为,因为这样标题就会位于页面的顶部而不是向下移动。 但是,您在页面的开头放置了一些东西(您的 tikz 图片\HeaderTwo)。 虽然它不打算放在页面的正文上,但 latex 不知道这一点。 因此 latex 看到这张图片,然后\vspace产生它的空间。

代码的第二页实际上如下所示:

你的结果

为了避免这种情况,我建议改用页眉(毕竟这就是我们拥有页眉的原因)。接下来,我使用了fancyhdr您在序言中已经拥有的包。页眉不是页面主体的一部分,因此 latex 可以正确识别何时\vspace应生成其空间。

\par在你的\sep宏中添加了 ,这样你就不必在前面添加一个空行。此外,我加载了包showframe并删除了\vspace主文档中应避免使用的不必要的 。

最后我注释掉了Arial字体,因为我的系统上没有安装它。我的结果是

% !TeX program = lualatex
\documentclass[a4paper,12pt]{article}

%font encoding & formatting
\usepackage[onehalfspacing]{setspace}
\usepackage{fontspec}
%\setmainfont{Arial}
\usepackage[document]{ragged2e}

%language
\usepackage[ngerman]{babel}
\usepackage{lipsum}

%Styles
\usepackage{tikz}
\usepackage{tikzpagenodes}
\usepackage{atbegshi}
\usepackage{fancyhdr}
\usepackage{xcolor}

\definecolor{bluey}{RGB}{12,3,150}

\newcommand{\sep}[1]{
    \par\vspace{1cm}%
    {\color{blue} \large \textbf{#1}}\\%
    \begin{tikzpicture}
    \draw [blue, fill=blue] (-2,0.5) circle [radius=0.17];
    \draw [blue, line width = 1.5pt] (-1.75,0.5) -- (2.5,0.5);
    \draw [lightgray, line width = 1.5pt] (2.5,0.5) -- (11,0.5);
    \end{tikzpicture}%
}

%header format
\lhead{\HeaderTwo} % defines your header as header in pagestyle fancy
\pagestyle{fancy} % loads it
\setlength{\headheight}{14.5pt} % corrects header height for 12pt document

\newcommand\HeaderTwo{%
    \begin{tikzpicture}[remember picture,overlay]%
    \fill[bluey]%
    (current page.north west) -- (current page.north east) --%
    ([yshift=2cm]current page.north east|-current page text area.north east) --%
    ([yshift=3cm]current page.north west|-current page text area.north west) -- cycle;%
    \end{tikzpicture}%
    \par%
}

\usepackage{showframe}


\begin{document}
\sep{My very very long foo Text}
\lipsum[1]

\sep{Another very very long foo text}
\lipsum[2]
\clearpage

\sep{Another very very long foo text}
\lipsum[3]
\end{document}

如下所示:

结果1 结果2

相关内容