![scrletter 中带有字母页面样式的页码样式存在问题](https://linux22.com/image/446503/scrletter%20%E4%B8%AD%E5%B8%A6%E6%9C%89%E5%AD%97%E6%AF%8D%E9%A1%B5%E9%9D%A2%E6%A0%B7%E5%BC%8F%E7%9A%84%E9%A1%B5%E7%A0%81%E6%A0%B7%E5%BC%8F%E5%AD%98%E5%9C%A8%E9%97%AE%E9%A2%98.png)
此处的所有页面引用均对应于英文版 KOMA-Script 手册,版本号为 2.28。
考虑以下 TeX 文件。
\documentclass[12pt,headheight=30pt,headinclude,firsthead=false,firstfoot=false,foldmarks=false,foldmarks=blmtP,fromalign=center,fromphone,fromemail,version=last, backaddress=false, subject=titled, twoside=semi, cleardoublepage=current]{scrletter}
\usepackage{scrlayer-scrpage}
\usepackage{lipsum}
\usepackage{lastpage}
\ohead{\jobname.tex\hspace{0.5cm}\today}
\renewcommand\pagemark{{\usekomafont{pagenumber}\thepage\ of \pageref{LastPage}}}
\ofoot*{}
\cfoot{\pagemark}
\RequirePackage[T1]{fontenc}
\begin{document}
\def\today{19th February, 2022}
\begin{letter}{Name}
\opening{Dear Name,}
\thispagestyle{scrheadings}
\lipsum
\end{letter}
\lipsum
\end{document}
使用 PDFLaTeX 生成的文档有 4 页。我的问题是关于页码的。如您所见,页码为Page 1
、Page 2
、3 of 4
、4 of 4
。这是意外行为。
如果用 替换scrletter
,scrlttr2
则会得到预期的行为,即1 of 4
,2 of 4
,3 of 4
,4 of 4
。
scrletter
这可能与定义了自己的页面样式(即plain.letter
和 )有关letter
。似乎该页面样式是为嵌入其他类文档的字母创建的,这是scrletter
用例。而且似乎该页面样式会默默覆盖我设置的样式,至少对于页码而言是如此。但这都是半猜测。我一直在阅读手册,试图理解它。
例如,在第 4.13 节:“具有默认页面样式的页眉和页脚”第 231 页中写道:
scrletter letter 由于标题页面样式通常已被类使用,因此 scrletter 包改为定义 letter 页面样式。这是在第 5 章第 254 页的 scrlayer-scrpage 的帮助下完成的。启用 automark=true 设置后, letter 将承担 scrlttr2 中标题所扮演的角色。设置 automark=false 后, letter 将承担 myheadings 的角色。
我读过好几遍了,但读起来还是像胡言乱语。但也许我读得不够多。我也读了第 5 章的相关部分,它们本身很有道理,但我看不出它们与这里的问题有什么关系。
第 229 页写道:
有关 scrletter 包的页面样式的特征的更多信息,请参阅第 22.2 节。
第 22.2 节规定
目前,只能在德语 KOMA-Script 书 [Koh20a] 的同一位置找到有关该主题的更多信息。
如果有人有德语书,并且愿意总结该部分的内容,请这样做。
第 229 页还写道
示例:您正在使用 scrletter 包,并希望字母使用与 \pagestyle 为文档其余部分设置的相同页面样式。为此,请在文档前言中输入命令 \renewcommand{\letterpagestyle}{}。请注意 \renewcommand* 中的星号。
这似乎可以满足我的要求,但对我来说却不起作用。
答案1
该类scrletter
是未记录的包装类。它scrartcl
使用字体大小12pt
和包加载类scrletter
。
\pagemark
已由 KOMA-Script 定义scrartcl
。因此,包针对文档中的信件scrletter
进行定义\letterpagemark
。如果信件中的页码格式应与文档其他部分中的页码格式相同,请使用
\let\letterpagemark\pagemark
之前的环境letter
。
\documentclass[
%12pt,% default
headheight=30pt,headinclude,
firsthead=false,firstfoot=false,
foldmarks=false,
%foldmarks=blmtP,% disabled by foldmarks=false
%fromalign=center,% disabled by firsthead=false
%fromphone,fromemail,% disabled by firsthead=false
%version=last,
backaddress=false,
subject=titled,
twoside=semi,
cleardoublepage=current
]{scrletter}
%\usepackage{scrlayer-scrpage}% load by package scrletter
\usepackage{lipsum}% only for dummy text
\usepackage[T1]{fontenc}
\clearpairofpagestyles
\ohead{\jobname.tex\hspace{0.5cm}\usekomavar{date}}
\cfoot{\pagemark}
\renewcommand*{\pagemark}{{\usekomafont{pagenumber}{\thepage\ of \pageref{LastPage}}}}
\let\letterpagemark\pagemark
\AddToHook{shipout/lastpage}{\label{LastPage}}% replaces package lastpage
\renewcommand*{\letterpagestyle}{scrheadings}% page style for the next pages of the letter
\AddToHook{cmd/opening/after}{\thispagestyle{\letterpagestyle}}% use the same page style on first letter page
\setkomavar{date}{19th February, 2022}% do not change \today
\begin{document}
\begin{letter}{Name}
\opening{Dear Name,}
\thispagestyle{scrheadings}
\lipsum
\end{letter}
\lipsum
\end{document}
笔记:
\renewcommand*{\letterpagestyle}{scrheadings}% page style for the next pages of the letter
\AddToHook{cmd/opening/after}{\thispagestyle{\letterpagestyle}}% use the same page style on first letter page
可以替换为
\renewcommand*\letterpagestyle{}% do not change the page style for the letter
\AddToHook{cmd/opening/after}{\thispagestyle{scrheadings}}% use scrheadings on first letter page
结果是一样的。