![将地址与 scrlttr2 中的信件正文对齐](https://linux22.com/image/252934/%E5%B0%86%E5%9C%B0%E5%9D%80%E4%B8%8E%20scrlttr2%20%E4%B8%AD%E7%9A%84%E4%BF%A1%E4%BB%B6%E6%AD%A3%E6%96%87%E5%AF%B9%E9%BD%90.png)
在scrlttr2
,我希望将地址与信件正文对齐。我尝试了以下方法:
\@setplength{toaddrhpos}{\oddsidemargin}
但是它将地址移到了纸张的左边缘。
我怎样才能达到我想要的一致?
例子:
钴
\ProvidesFile{h.lco}[2012/07/25]
\@setplength{toaddrhpos}{\oddsidemargin}
\endinput
信件.tex
\documentclass[h]{scrlttr2}
\usepackage[english]{babel}
\begin{document}
\begin{letter}{Name\\Address\\City}
\opening{Dear Madam or Sir:}
Hello.
\closing{Very truly yours,}
\end{letter}
\end{document}
答案1
KOMAscript 的作者 Markus Kohmnowindow
在他的书中的样本中包含了 -lco(参见来自 4. KOMA-Script-Books 的示例)。该文件的来源为:
% nowindow.lco
% Copyright 2008 Markus Kohm
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Markus Kohm.
%
% This work consists of this file only.
%-----------------------------------------------------------------------
\ProvidesFile{nowindow.lco}%
[2003/01/24 v0.1 unsupported letter-class-option]
\@setplength{firstheadwidth}{\textwidth}
\@setplength{toaddrhpos}{\oddsidemargin}
\@addtoplength{toaddrhpos}{1in}
\KOMAoptions{backaddress=false}
\endinput
将此源复制到文本编辑器并将其保存为nowindow.lco
tex 搜索路径(您的texmf-local
),或保存到与您的信件相同的目录中。记得更新 tex 文件数据库(运行texhash
或系统上的任何命令,例如从 MiKTeX 中的设置中“刷新 FNDB”)。
用于以下用途的 MWE nowindow.lco
:
\documentclass[UKenglish]{scrlttr2}
\usepackage{babel}
\usepackage[utf8]{inputenx}
\LoadLetterOption{nowindow}
\begin{document}
\begin{letter}{Name of Recipient \\ Address \\ of \\ Recipient}
\opening{Hello} % eg. Hello
\closing{Kind regards} %eg. Regards
\end{letter}
\end{document}
编辑: PSH 询问为什么必须在 中添加 1in。Markus \toaddrhpos
Kohn 在Komascript 主页上的这条回复. 德语的近似翻译:
最终,1in 源自 TeX 的历史。TeX 不是从页面的外边距开始,而是向左移动一英寸,向下移动一英寸。因此,\oddsidemargin 比偶数页的边距小一英寸。为了方便用户,伪长度是根据实际左边距(以及页面的实际顶部)计算的。因此,在伪长度中使用 \oddsidemargin 时,必须将这一英寸考虑在内。
(德国本地人,请随意改进翻译。)
答案2
这个答案详细阐述了Sveinung的观点。
在\opening
,scrlttr2
“移动到位”打印“收件人地址”,\move@topl
其定义为:
\newcommand*{\move@topl}{%
\null\hskip -1in%
\ifodd\value{page}\hskip -\oddsidemargin\else\hskip -\evensidemargin\fi
\ignorespaces%
}
后面跟着一个\hskip
大小为“ \toaddrhpos
”的 。因此,将“ \toaddrhpos
”设置为与跳过的距离相同\move@topl
(在相反方向上),将使任何水平移动无效。因此,添加
\makeatletter
\@setplength{toaddrhpos}{\dimexpr\oddsidemargin+1in}
\makeatother
就足够了,因为开头通常是在奇数页。