我想在 Koma 脚本文档的节号和节标题之间添加更多空格。编辑节行以始终添加空格会导致明显的问题,即未编号的节会缩进一点。为此,我想使用类似\ifstrempty
form 的函数etoolbox
来查看节是否已编号。但似乎这个字符串永远不会为空。
梅威瑟:下列
\documentclass{scrreprt}
\usepackage{etoolbox}
\usepackage{showframe}
\setkomafont{section}{\normalfont\Large\bfseries}
\renewcommand\sectionlinesformat[4]{%
{\ifstrempty{#3}{}{#3\ }}{#4}%
}
\begin{document}
\section*{Introduction}
\section{First section}
\end{document}
其他方法也\@ifnotempty
产生相同的输出。
是否有适当的方法来检查 Koma 文中某个部分是否未编号?
答案1
首先:对于您的情况,您应该使用@Ivan 的建议,即重新定义\sectionformat
。然后仅为编号部分插入空格。如果这些标题应该在编号和标题之间获得额外的空格,您也可以重新定义\subsectionformat
和。\subsubsectionformat
section
如果您确实需要检查,如果或subsection
标题没有数字subsubsection
,您可以使用\Ifstr{#3}{}{}{\ }
。\Ifstr
由 KOMA-Script 类提供。
\documentclass{scrreprt}
\usepackage{showframe}
\setkomafont{section}{\normalfont\Large\bfseries}
\makeatletter
\renewcommand\sectionlinesformat[4]{%
\@hangfrom{\hskip #2#3\Ifstr{#3}{}{}{\ }}{#4}%
}
\makeatother
\begin{document}
\chapter{Foo}
\addsec*{Introduction}
\section{First section}
\subsection{First subsection}
\section{Lorem ipsum dolor sit amet, consectetuer adipiscing
elit. Etiam lobortis facilisis sem.}
\addsec{Unnumbered Section}
\subsection*{Unnumbered subsection}
\end{document}
\sectionlinesformat
在或的定义中,\sectioncatchphraseformat
您也可以使用\IfUseNumber{\ }{}
。此命令由 KOMA-Script 类提供。
\documentclass{scrreprt}
\usepackage{showframe}
\setkomafont{section}{\normalfont\Large\bfseries}
\makeatletter
\renewcommand\sectionlinesformat[4]{%
\@hangfrom{\hskip #2#3\IfUseNumber{\ }{}}{#4}%
}
\makeatother
\begin{document}
\chapter{Foo}
\addsec*{Introduction}
\section{First section}
\subsection{First subsection}
\section{Lorem ipsum dolor sit amet, consectetuer adipiscing
elit. Etiam lobortis facilisis sem.}
\addsec{Unnumbered Section}
\subsection*{Unnumbered subsection}
\end{document}
请注意,这两条建议都会为编号章节、小节和小小节增加空间。
答案2
您应该重新定义\sectionformat
命令:
\documentclass{scrreprt}
\usepackage{showframe}
\setkomafont{section}{\normalfont\Large\bfseries}
\renewcommand*{\sectionformat}{\thesection\autodot\hspace{1.5em}}
\begin{document}
\section*{Introduction}
\section{First section}
\end{document}
如果您希望通过以下方式解决问题etoolbox
:
\usepackage{etoolbox}
\patchcmd{\sectionformat}{\enskip}{\hspace{1.5em}}{}{}
答案3
如果我添加\showtokens{#3}
重新定义\sectionformat
,我得到\section*{Introduction}
> \@empty .
\sectionlinesformat #1#2#3#4->\showtokens {#3}
{\ifstrempty {#3}{}{#3\ }}{#4}
l.13 \section*{Introduction}
并且,在的情况下\section{First section}
,
> \@svsec .
\sectionlinesformat #1#2#3#4->\showtokens {#3}
{\ifstrempty {#3}{}{#3\ }}{#4}
l.14 \section{First section}
\@empty
因此,我们看到,当使用 *-variant 时,该类通过了,而不是什么都没有通过。然后您可以将\ifdefvoid
其用作测试。
\documentclass{scrreprt}
\usepackage{etoolbox}
\usepackage{showframe}
\setkomafont{section}{\normalfont\Large\bfseries}
\renewcommand\sectionlinesformat[4]{%
{\ifdefvoid{#3}{}{#3\ }}{#4}%
}
\begin{document}
\section*{Introduction}
\section{First section}
\end{document}