将盒子放置在特定位置的正确方法是什么?

将盒子放置在特定位置的正确方法是什么?

我有一个包含信头的盒子\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 要求排除了wallpapertextpos。除了 之外,页面文本至少要有一定距离的要求也会排除这些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}

相关内容