我正在尝试使用MakeUppercase
大写 KOMA-Letter 的主题:
\documentclass{scrlttr2}
\usepackage{textcase}
\makeatletter%
\renewcommand{\subject@format}[1]{\MakeUppercase{#1}}
\makeatother%
\usepackage{blindtext}
\begin{document}
\begin{letter}{Recipient}
\setkomavar{subject}{Foo Subject}
\opening{Dear Sir or Madam}
\blindtext
\end{letter}
\end{document}
但是这不起作用。编译失败,并显示:
! Class scrlttr2 Error: KOMA-Script variable not defined.
See the scrlttr2 class documentation for explanation.
Type H <return> for immediate help.
...
l.16 \opening{Dear Sir or Madam}
? ^C! Interruption.
\GenericError ...
例如,如果我使用\large
而不是\MakeUppercase
一切都按预期工作。我也试过
`\addtokomafont{\MakeUppercase}
但这也不起作用。我遗漏了什么?提前致谢!
答案1
不支持大写格式。另一方面,定义\subject@format
为\MakeUppercase
肯定会失败,因为该\usekomavar
操作不可扩展。
这是一个解决方法:
\documentclass[
subject=titled,
]{scrlttr2}
\usepackage{textcase}
\usepackage{etoolbox}
\usepackage{blindtext}
\makeatletter
\patchcmd{\@subjfield}
{\usekomavar{subject}}
{\MakeUppercase{\usekomavarexp{subject}}}
{}{}
\newcommand\usekomavarexp[1]{\@nameuse{scr@#1@var}}
\makeatother
\begin{document}
\begin{letter}{Recipient}
\setkomavar{subject}{Foo Subject}
\opening{Dear Sir or Madam}
\blindtext
\end{letter}
\end{document}
当然,最简单的解决方法是输入
\setkomavar{subject}{\MakeUppercase{Foo Subject}}