在 scrlttr2 中第一页之后更改 \textwidth

在 scrlttr2 中第一页之后更改 \textwidth

我正在寻找一种自动机制来更改\textwidth中第一个字母分页符处的有效值scrpage2。我尝试过\afterpage\nextpage(理想情况下它们应该设置在 内\firsthead),但都没有成功。我不想使用该geometry包,因为首先,在我看来scrlttr2 应该管用和朋友的变化KOMAoptions,其次,如果在和 KOMA 布局内使用,它似乎无论如何都不起作用scrlttr2。非常欢迎提出想法和建议。

这是 MNWE。第 2 页及后续页面的文本块应该比第一页更宽 — 但事实并非如此。

\documentclass{scrlttr2}%
\usepackage[english]{babel}
\usepackage{lipsum,afterpage}%
\setlength{\textwidth}{125mm}%
\nexthead{%
  \global\areaset{170mm}{\textheight}%
  \global\KOMAoptions{DIV=areaset}%
  \global\recalctypearea%
}
\afterpage{%
  \global\areaset{170mm}{\textheight}%
  \global\KOMAoptions{DIV=areaset}%
  \global\recalctypearea%
}
\begin{document}
\begin{letter}{Receipient}
  \opening{Dear receipient,}
  \lipsum[1-6]
  \closing{Yours}
\end{letter}
\end{document}

顺便说一句,我真心认为这是不是覆盖在文档中间更改 \textwidth 和 \textheight和相关问题,而是以某种方式与 KOMA 类的内部相关。

答案1

\pagebreak这是现在的一个工作示例。它仍然需要在信件正文中提供手册,但根据@DavidCarlisle 的解释(见上文),这已经是最好了,无需借助更强大的系统(如 luatex)。

\documentclass{scrlttr2}%
\usepackage[english]{babel}
\usepackage{lipsum,afterpage}%
\setlength{\textwidth}{125mm}%
\firstfoot{%
  \afterpage{%
    \global\setlength{\textwidth}{17cm}%
    \global\setlength{\columnwidth}{\textwidth}%
    \global\setlength{\hsize}{\columnwidth}%
    \global\setlength{\linewidth}{\hsize}}%
}

\begin{document}
\begin{letter}{Receipient}
  \opening{Dear receipient,}
  \lipsum[1-2]
  \pagebreak % enfore the page break, otherwise afterpage will take
  % effect too late, i.e. after first broken paragraph on page 2.
  \lipsum[3-12]
  \closing{Yours}
\end{letter}
\end{document}

在此示例中,第一页的正文宽度为 12.5 厘米,后面所有页面的正文宽度均为 17 厘米。如果您希望此方法在包含多个字母的文档中起作用,则应\textwidth在每个“第一页”上重置,例如使用

\firsthead{%
    \global\setlength{\textwidth}{12.5cm}%
    \global\setlength{\columnwidth}{\textwidth}%
    \global\setlength{\hsize}{\columnwidth}%
    \global\setlength{\linewidth}{\hsize}%
}

在序言中。

相关内容