使用 scrlttr2 中的“firsthead”自定义信头(垂直定位问题)

使用 scrlttr2 中的“firsthead”自定义信头(垂直定位问题)

我一直在玩这个scrlttr2类。请参阅下面的示例脚本。我在垂直定位方面遇到了一些问题。

我的 LaTeX 文件顶部有一行,将一些版本控制记账信息添加到输出中。请参阅在 TeX 文档中嵌入 Mercurial 版本控制信息了解详情。

为了完成这个练习,我刚刚插入了一个字符串。我有几个问题。

  1. 是否可以自定义扩展信头scrlttr2?我认为应该可以使用自定义变量将会计信息添加为信头的一部分firsthead。但我找不到使用的任何实际示例firsthead。我当前设置的问题是使用放置的那条线与 eso-pic信头重叠,所以我必须将信头向下移动。我使用这样做firstheadvpos,但最好不要这样做。

  2. 此外,向下移动信头会开始碰到toaddress。我该如何调整信头和 之间的空间 toaddress?我原本希望信头和 toaddress会自动保持彼此之间的相对空间,但这似乎并没有发生。

这是代码。

\documentclass[12pt,foldmarks=true,foldmarks=blmtP,fromalign=center,
fromphone,fromemail,version=last, backaddress=false]{scrlttr2}
\usepackage{eso-pic,picture}
\AddToShipoutPictureBG*{
  \AtPageUpperLeft{
    \put(\oddsidemargin+1in+0.5\textwidth,-1.5cm){%
      \makebox[0pt][c]{\textbf{ex.tex}
      c1cf35eef2c30d69fd2c41171434f4f1acd32c0d 2015-03-15 20:17 +0530}}
  }
}

\usepackage{fouriernc}
\begin{document}
\setkomavar{fromname}{Someone Else}
\setkomavar{fromaddress}{Some Other Bldg.\\ Some Road\\ Some City}
\setkomavar{fromphone}{22019466}
\setkomavar{fromemail}{[email protected]}
%\setkomavar{firsthead}[foo]{}
\makeatletter\@setplength{firstheadvpos}{1.7cm}\makeatother

\def\today{13th March, 2015}
\begin{letter}{
    \vspace{0.5cm}
    Someone\\ Some Org\\ Some Place\\ Some Road\\ Some City\\
    Subject: Some subject}

  \opening{Someone,}

\closing{Yours Sincerely,}

\end{letter}
\end{document}

答案1

据我所知,没有办法在默认的顶部添加此信息first head。使用选项fromalign=Center和变量,firsthead您可以定义自己的标题。

也许你正在寻找类似的东西

\setkomavar{firsthead}{%
  \parbox{\linewidth}{\centering
    \textbf{ex.tex}c1cf35eef2c30d69fd2c41171434f4f1acd32c0d 2015-03-15 20:17 +0530\\
    \usekomavar{fromname}\\
    \usekomavar{fromaddress}\\
    \usekomavar*{fromphone}\usekomavar{fromphone}\\
    \usekomavar*{fromemail}\usekomavar{fromemail}
  }%
}

firsthead和之间没有相对空间toaddress。 的垂直位置绝对toaddress由伪长度决定toaddrvpos。但应该有一个最小距离,所以你会收到一个警告,说你的第一个头太高了。这意味着第一个头离地址字段太近了。

第一个头部的空间可以通过以下方式扩大

\makeatletter
% enlarge the first head by 5pt to avoid the warning
\@addtoplength[-]{firstheadvpos}{5pt}
\makeatother

然后-5pt会被添加到伪长度中firstheadvpos,因此纸张上边缘和第一个头部上边缘之间的距离减少了 5pt。这意味着第一个头部上方的边距减少了 5pt。

另一种可能性是5pt添加toaddrvpos

\makeatletter
% enlarge the first head by 5pt to avoid the warning
\@addtoplength{toaddrvpos}{5pt}
\makeatother

因此,地址字段向下移动 5pt,并且不再位于德国窗口信封的最佳位置。

伪长度和相关命令的解释见KOMA-Script 文档,章节 »有关字母类 scrlttr2 和字母包 scrletter 的附加信息«。还有一个显示伪长度的图。

在此处输入图片描述

代码:

\documentclass[12pt,foldmarks=true,foldmarks=blmtP,fromalign=center,
fromphone,fromemail,version=last, backaddress=false,
subject=titled% <- added 
]{scrlttr2}

\usepackage{fouriernc}

\setkomavar{fromname}{Someone Else}
\setkomavar{fromaddress}{Some Other Bldg.\\ Some Road\\ Some City}
\setkomavar{fromphone}{22019466}
\setkomavar{fromemail}{[email protected]}
\setkomavar{subject}{Some subject}% <-added

\setkomavar{firsthead}{%
  \parbox{\linewidth}{\centering
    \textbf{ex.tex}c1cf35eef2c30d69fd2c41171434f4f1acd32c0d 2015-03-15 20:17 +0530\\
    \usekomavar{fromname}\\
    \usekomavar{fromaddress}\\
    \usekomavar*{phoneseparator}\usekomavar{phoneseparator}\usekomavar{fromphone}\\
    \usekomavar*{emailseparator}\usekomavar{emailseparator}\usekomavar{fromemail}
  }%
}

\makeatletter
% enlarge the first head by 5pt to avoid the warning
\@addtoplength[-]{firstheadvpos}{5pt}
\makeatother

\def\today{13th March, 2015}
\begin{document}
\begin{letter}{Someone\\ Some Org\\ Some Place\\ Some Road\\ Some City}
\opening{Someone,}
\closing{Yours Sincerely,}
\end{letter}
\end{document}

当然,你可以自定义firstheadfirstfoot。例如

\makeatletter
\@addtoplength{firstheadvpos}{5pt}
\makeatother

\setkomavar{firsthead}{%
  \begin{tabular}[b]{l@{}}%
    \usekomavar{fromname}\\
    \usekomavar*{fromphone}\usekomavar{fromphone}\\
    \usekomavar*{fromemail}\usekomavar{fromemail}
  \end{tabular}
  \hfill
  \normalsize
  \begin{tabular}[b]{r@{}}%
    \usekomavar{fromaddress}
  \end{tabular}\\
  \rule[2mm]{\textwidth}{0.5pt}%
}

\setkomavar{firstfoot}{%
  \parbox{\linewidth}{\centering\textbf{ex.tex}
    c1cf35eef2c30d69fd2c41171434f4f1acd32c0d 2015-03-15 20:17 +0530}\\[.5\baselineskip]
}

在此处输入图片描述


但可能你只想在第一个标题上方添加信息而不改变字母布局。那么你可以加载包scrlayer并在页面样式中添加一个层empty

\usepackage{scrlayer}
\DeclareNewLayer[
  background,head,align=b,voffset=\useplength{firstheadvpos},height=\baselineskip,
  contents={\makebox[\layerwidth]{\textbf{ex.tex}
    c1cf35eef2c30d69fd2c41171434f4f1acd32c0d 2015-03-15 20:17 +0530}}
  ]{versioncontrol.head}
\AddLayersToPageStyle{empty}{versioncontrol.head}

在此处输入图片描述

代码:

\documentclass[12pt,foldmarks=true,foldmarks=blmtP,fromalign=center,
fromphone,fromemail,version=last, backaddress=false,
subject=titled,% <- added 
]{scrlttr2}

\usepackage{fouriernc}

\setkomavar{fromname}{Someone Else}
\setkomavar{fromaddress}{Some Other Bldg.\\ Some Road\\ Some City}
\setkomavar{fromphone}{22019466}
\setkomavar{fromemail}{[email protected]}
\setkomavar{subject}{Some subject}% <-added

\usepackage{scrlayer}
\DeclareNewLayer[
  background,head,align=b,voffset=\useplength{firstheadvpos},height=\baselineskip,
  contents={\makebox[\layerwidth]{\textbf{ex.tex}
    c1cf35eef2c30d69fd2c41171434f4f1acd32c0d 2015-03-15 20:17 +0530}}
  ]{versioncontrol.head}
\AddLayersToPageStyle{empty}{versioncontrol.head}

\def\today{13th March, 2015}
\begin{document}
\begin{letter}{Someone\\ Some Org\\ Some Place\\ Some Road\\ Some City}
\opening{Someone,}
\closing{Yours Sincerely,}
\end{letter}
\end{document}

相关内容