我正在自定义section
标题scrartcl
,并想尝试在部分标题填充行后添加一条规则。
正如第节所建议的那样12.8.KOMA 手册中,我没有直接在里面绘制规则\AddtoDoHook
,而是创建了一个带有空参数的命令,以避免引入的参数出现问题\ExecuteDoHook
。我尝试这样做:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xhfill}
\usepackage{blindtext}
%% ----------------------------------------
%% The issue:
\newcommand{\hfilllinegobble}[1]{\xrfill[0.4ex]{1.5pt}}
\AddtoDoHook{heading/endgroup/section}{\hfilllinegobble}
\begin{document}
\blinddocument
\end{document}
当我尝试运行这个程序时,没有输出,并且我收到以下错误消息,我不知道“胶水”是什么或如何修复它。
领导者没有得到适当的支持。\blinddocument
不过,我使用类似的方法在章节标题下方添加一行scrbook
,效果很好:
\newcommand{\headinglinegobble}[1]{\vspace*{-1ex}\noindent\rule{\textwidth}{.5pt}}
\AddtoDoHook{heading/endgroup/chapter}{\headinglinegobble}
我怎样才能修改节标题而不弄乱“胶水”?是否有更好的方法来自定义 KOMA 标题?
答案1
\@@par
源代码中标题后面和前面都有一个\ExecuteDoHook{heading/endgroup/section}
。因此您必须添加一个\leavevmode
,该行将位于章节标题下方:
\AddtoDoHook{heading/endgroup/section}{\leavevmode\hfilllinegobble}
所以我建议重新定义\sectionlinesformat
,例如:
\newcommand*{\hfilllinegobble}{\xrfill[0.4ex]{1.5pt}}
\newcommand*\originalsectionlinesformat{}
\let\originalsectionlinesformat\sectionlinesformat
\renewcommand\sectionlinesformat[4]{%
\originalsectionlinesformat{#1}{#2}{#3}{#4\Ifstr{#1}{section}{ \hfilllinegobble}{}}%
}
例子:
\documentclass{scrartcl}
%\usepackage[utf8]{inputenc}% only needed with outdated TeX distributions
\usepackage[T1]{fontenc}
\usepackage{xhfill}
\usepackage{blindtext}% only for dummy text
%% ----------------------------------------
%% The issue:
\newcommand*{\hfilllinegobble}{\xrfill[0.4ex]{1.5pt}}
\newcommand*\originalsectionlinesformat{}
\let\originalsectionlinesformat\sectionlinesformat
\renewcommand\sectionlinesformat[4]{%
\originalsectionlinesformat{#1}{#2}{#3}{#4\Ifstr{#1}{section}{ \hfilllinegobble}{}}%
}
\begin{document}
\tableofcontents
\blinddocument
\end{document}