我目前正在用该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}
如下所示: