自定义标题框?

自定义标题框?

我想知道是否有一个包可以帮助我设置自定义页眉,就像图片中的一样。

在此处输入图片描述

我对 Latex 还很陌生,我使用 fancyhdr 让它工作,但在设置边距和对齐文本时遇到了麻烦。我正在寻找一种更简单、更轻松的方法来实现相同的结果。

我正在使用 Pandoc(使用 markdown + latex),因为我需要同一个文件的 pdf 副本和 .docx 副本,因此如果该解决方案也适用于 MS Word 页眉,则可以获得加分。

编辑以添加代码:

\documentclass[a4paper]{article}

%% Language and font encodings
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}

%% Sets page size and margins
\usepackage[a4paper]{geometry}

%% load packages
\usepackage{multirow}
\usepackage{array}
\usepackage{lastpage}
\usepackage{fancyhdr}\pagestyle{fancy}
\usepackage[owncaptions,tablegrid]{vhistory}
\usepackage{lipsum}

\newsavebox{\myTitleBlock}
\begin{lrbox}{\myTitleBlock}
\begin{minipage}{\textwidth}
\renewcommand{\arraystretch}{3}
\begin{tabular}{|p{5cm}|p{2,5cm}|p{2,5cm}|p{2,5cm}|p{2,5cm}|}
\hline
\multirow{2}{*}{\raggedleft{\shortstack{\textbf{Company}\\Address\\0001 New York NY}}} & \multicolumn{4}{l|}{Some text here} \\
\cline{2-5} & \multicolumn{1}{l|}{Form xx} & Rev. \vhCurrentVersion & dd/mm/yyyy & Page \thepage{} of \pageref{LastPage} \\
\hline
\end{tabular}
\end{minipage}
\end{lrbox}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}

\chead{\usebox{\myTitleBlock}
\lhead{}
\rhead{}}

\begin{document}

\begin{versionhistory}
%<Version> <Date> <Authors> <Changes>}
\vhEntry{1.1}{13.05.04}{JW|AK|KL}{Typos corrected.}
\vhEntry{1.0}{22.01.04}{JPW|KW}{created}
\vhEntry{1.1}{23.01.04}{DP|JPW}{correction}
\vhEntry{1.2}{03.02.04}{DP|JPW}{revised after review}
\end{versionhistory}

%the version number of the last entry
Last revision: \vhCurrentVersion

%Include a table of contents
\setcounter{tocdepth}{4}
\tableofcontents

\lipsum{2-5}

\end{document}

背面:https://www.overleaf.com/6834124pxvthzbvjmvt#/23296145/

如您所见,问题如下:

  • 第 x 页,共 ?? 页。它在文档内部运行,但在页眉中是 ??。
  • 我不知道如何将地址左对齐
  • 我想扩展页眉以填充 A4 纸的宽度,但保留正文的实际边距。还要减少一点顶部边距。更一般地说,我想为页眉和文本指定不同的边距。
  • 页眉和内容在第一页重叠
  • 最后但并非最不重要的一点是,代码很复杂。寻找更直观的东西。

答案1

  • 第 x 页,共 ?? 页。它在文档内部运行,但在页眉中是 ??。

迈克尔·帕尔默已经部分解释了第一个问题:将标题保存到框中会“冻结”其内容,这不是您想要的页码。这就是为什么它总是第 1 页而不是第 2 页。因为最后一页的引用在序言中是未知的 - 因为.aux尚未读取上次运行的文件(如果有) - 此时最后一页始终是未解决的交叉引用。如果您在之后指定标题\begin{document},这应该可以工作。但你仍然会永远停留在第 1 页。

请注意此代码

\chead{\usebox{\myTitleBlock}
  \lhead{}
  \rhead{}}

没有意义。您已在中心标题的规范中指定了左标题和右标题。

  • 我不知道如何将地址左对齐

\shortstack居中。tabular我想我会在这里使用。(好吧,我可能不会,因为我不会这么做,但如果我要这么做,我可能会这么做。)

  • 我想扩展页眉以填充 A4 纸的宽度,但保留正文的实际边距。还要减少一点顶部边距。更一般地说,我想为页眉和文本指定不同的边距。

这分为几个部分。要更改页眉宽度,我们需要查看fancyhdr。要更改页面尺寸, including the height of the header, we need to look at几何。要创建跨宽度的表格,我们可以使用tabularx。为了防止出现坏框,我们可以对其宽度进行编造。

  • 页眉和内容在第一页重叠

您需要在编译时阅读控制台输出或之后查阅日志。偶尔……只是偶尔,TeX 写入的所有信息都会告诉您需要知道的内容。当事情没有按预期进行时,这应该是首先要查看的内容。

这是控制台告诉我们的内容。

Package Fancyhdr Warning: \headheight is too small (12.0pt): 
 Make it at least 85.79999pt.

然后它会告诉您包装正在改变尺寸,但不幸的是,对于第 1 页来说已经太晚了。所以这是我们需要改变的布局的一个方面。

  • 最后但并非最不重要的一点是,代码很复杂。寻找更直观的东西。

消除框会有所帮助。我还会消除minipage并简化表格规范。你有完全没有意义的\multicolumns,所以他们可以走了。

这是一个例子。这仍然会产生一个坏框,但这是由版本历史环境引起的,而不是这个问题的一部分。

\documentclass[a4paper]{article}
\usepackage[british]{babel}% or american or ...
\usepackage[utf8]{inputenc}% don't use utf8x
\usepackage[T1]{fontenc}
\usepackage{geometry}% no need to repeat papersize here
\usepackage{multirow}
\usepackage{array,calc,tabularx}
\usepackage{lastpage}
\usepackage{fancyhdr}
\usepackage[owncaptions,tablegrid]{vhistory}
\usepackage{lipsum}

\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\fancyheadoffset{25.4mm+\leftmargin}
\chead{%
  \centering
  \renewcommand{\arraystretch}{3}%
  \begin{tabularx}{\paperwidth}{|p{5cm}|*{4}{X|}}% use something other than \paperwidth if you didn't really mean this - I've implemented what you asked for, even though I don't see why you want vertical rules at the ends in this case
    \hline
    \multirow{2}{*}{\renewcommand{\arraystretch}{1}\bfseries\begin{tabular}{@{}l@{}}Company \\ Address \\ 0001 New York NY\end{tabular}} & \multicolumn{4}{c|}{Some text here} \\ % tabular is simpler and deals automatically with the alignment @{} avoid additional horizontal space
    \cline{2-5} & Form xx & Rev.\ \vhCurrentVersion & dd/mm/yyyy & Page \thepage{} of \pageref{LastPage} \\ % no need for a multicolumn here 
    \hline
  \end{tabularx}%
}
\lhead{}% not part of the central header spec!
\rhead{}

\geometry{headheight=86pt}% change margins etc. here e.g. top=10mm for a 10mm top margin etc. - but I don't think you should make the top margin *less*!

\begin{document}

\begin{versionhistory}% this causes an underfull box with infinite badness as far as I can tell.
  \vhEntry{1.1}{13.05.04}{JW|AK|KL}{Typos corrected.}
  \vhEntry{1.0}{22.01.04}{JPW|KW}{created}
  \vhEntry{1.1}{23.01.04}{DP|JPW}{correction}
  \vhEntry{1.2}{03.02.04}{DP|JPW}{revised after review}
\end{versionhistory}

Last revision: \vhCurrentVersion

\setcounter{tocdepth}{4}
% nothing to see here - why is this in the minimal example?
\tableofcontents

\lipsum{2-5}


\end{document}

全宽标题

答案2

在此处输入图片描述标题保存框的内容在文档开始之前就会被冻结,然后每次粘贴时都保持不变。如果您取消保存框:

% changes affecting table layout
\usepackage{calc}  % for setting table dimensions relative to \textwidth
% change parameters for package geometry to make space for big header 
\usepackage[a4paper,margin=1in,tmargin=2in,headheight=2in]{geometry}

% change code for header generation
\newcommand{\makeheader}{
\begin{minipage}{\textwidth}
\renewcommand{\arraystretch}{3}
\begin{tabular*}{\textwidth}[t]{@{\extracolsep{\fill}}|p{0.3\textwidth}|p{0.15\textwidth}|p{0.15\textwidth}|p{0.15\textwidth}|p{0.15\textwidth}|}
\hline
\multirow{2}{*}{\raggedleft{\shortstack{\textbf{Company}\\Address\\0001 New York NY}}} & \multicolumn{4}{l|}{Some text here} \\
\cline{2-5} & \multicolumn{1}{l|}{Form xx} & Rev. \vhCurrentVersion & dd/mm/yyyy & Page \thepage{} of \pageref{LastPage} \\
\hline
\end{tabular*}
\end{minipage}}

\chead{\makeheader}

页面计数器起作用了。

顺便问一下,您确定列宽规范中的逗号吗?通常使用小数点,但也许您加载了一些使逗号也能工作的包(?虽然我不知道有任何这样的包)。

编辑:我还稍微改变了表格和页面的尺寸。

相关内容