我有一个包含信头的盒子\mybox
。盒子的尺寸为 7 英寸 x 1 英寸(深度为 0pt)。该盒子将仅在我的信头宏内使用:
\DeclareRobustCommand\letterhead{%
\cleardoublepage % letterhead only belongs at the top of a page
% something
\copy\mybox
% something
}
因此,信头只能出现在页面的顶部。
我的要求是\mybox
需要距离左右边距 0.75 英寸,距离上边距 0.5 英寸,距离信头所在页面的文本至少 0.5 英寸。此外,(因为我无法说服人们升级他们的 TeX 发行版)它需要与相当老版本的 teTeX 兼容。teTeX 要求排除了wallpaper
和textpos
。除了 之外,页面文本至少要有一定距离的要求也会排除这些eso-pic
。因此,我的情况与 不同这个。
现在,我通过 强制将边距设置为 1 英寸\RequirePackage[margin=1in]{geometry}
,但我不想这样做。我希望可以设置任何边距,并且信头保持在完全相同的位置,并且信头和页面文本之间的最小距离保持为 0.5 英寸。(实际上,通过包选项设置该距离的方法很方便,它会鼓励我学习如何使用xkeyval
。对于默认值,0.5 英寸似乎相当不错,并且它与我当前的解决方案完美匹配。)
由于目前强制将边距设为 1",我的解决方案如下。
\newbox\mybox
\setbox\mybox\vbox to1in{
\vss
% TeX to generate the letterhead
\vskip.5in
}
\DeclareRobustCommand\letterhead{%
\cleardoublepage
\hb@xt@\z@{%
\skip\z@\oddsidemargin
\advance\skip\[email protected]
\hskip-\skip\z@
\copy\mybox
\hss
}
}
(使用\moveleft
也很好。我不确定哪种方法更好。)
我应该能够从盒子中取出并正确放置\vss
盒子。正确的做法是什么?\vskip.5in
\mybox
答案1
更新:这是一个实际有效的示例。刚才我的计算有点偏差。这并不能完全重现您的示例输出,但它应该足够灵活,您可以插入任何您喜欢的内容。
\documentclass{article}
\usepackage{lipsum}
\usepackage[a4paper,margin=2in]{geometry}
\newbox\mybox
\newcommand\letterhead{%
\cleardoublepage
\setbox\mybox=\vbox{%
\parindent=0pt
\vskip\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep-\topskip\relax
\hbox to \paperwidth{\letterheadcontents\hss}%
}
\dp\mybox=0pt\ht\mybox=0pt\wd\mybox=0pt
\moveleft\dimexpr1in+\hoffset+\oddsidemargin\relax
\box\mybox
\vskip-\baselineskip
}
\def\letterheadcontents{%
\hspace*{\fill}%
\fbox{\parbox{7in}{hello\\ this is my letterhead}}%
\hspace*{\fill}%
}
\begin{document}
\letterhead
\lipsum
\end{document}
答案2
这似乎有效。感谢 Will 指出了缺失的内容!
\documentclass[10pt]{article}
\usepackage{lipsum}
\usepackage[margin=1in]{geometry}
\makeatletter
\newbox\mybox
\setbox\mybox\vbox{
\hrule \@height.5in \@depth.5in \@width7in
}
\wd\mybox\z@
\DeclareRobustCommand\letterhead{%
\cleardoublepage
\begingroup
\skip\z@\topmargin
\advance\skip\z@\headheight
\advance\skip\z@\headsep
\advance\skip\z@\topskip
\advance\skip\z@\voffset
\advance\skip\[email protected]
\setbox\z@\vbox to\z@{
\vss
\skip\tw@\oddsidemargin
\skip\tw@\hoffset
\advance\skip\[email protected]
\moveleft\skip\tw@\copy\mybox
\vskip\skip\z@
}
\advance\skip\[email protected]
\dp\z@-\skip\z@
\box\z@
\nointerlineskip
\endgroup
}
\makeatother
\begin{document}
\letterhead
\lipsum
\end{document}