我几乎只使用 KOMA-Script 类,因为我不喜欢它总是用粗体字打印目录的几个元素,所以我包括了
\addtokomafont{chapterentry}{\mdseries}.
现在的问题是,每当我从写 a 切换scrreprt
到写 ascrartcl
时,我都必须调整给定的行以
\addtokomafont{sectionentry}{\mdseries},
当你处于写作的“流程中”时这真的很烦人。
是否存在某种构造,我可以使用它来根据我所使用的 KOMA-Script 类有条件地执行上述命令之一?
答案1
\ifx\chapter\undefined
\addtokomafont{sectionentry}{\mdseries}
\else
\addtokomafont{chapterentry}{\mdseries}
\fi
答案2
默认情况下,字体元素chapterentry
(带有scrbook
或scrreprt
)和sectionentry
(带有scrartcl
)仅设置为\usekomafont{disposition}
。
因此你可以使用
\BeforeStartingTOC{\addtokomafont{disposition}{\mdseries}}
请注意,此行也会更改部分条目的字体,并且会影响包控制下的所有列表tocbasic
。如果要将其限制在目录中,请使用可选参数:
\BeforeStartingTOC[toc]{\addtokomafont{disposition}{\mdseries}}
例子:
\documentclass{scrreprt}
\usepackage{blindtext}
\BeforeStartingTOC{\addtokomafont{disposition}{\mdseries}}
\begin{document}
\tableofcontents
\blinddocument
\end{document}
结果:
或者scrreprt
:
答案3
从 3.15 版开始,KOMA-Script 提供了一个命令,\IfExistskomafont
根据字体元素是否存在来执行代码。因此,您可以在这种特殊情况下使用它:
\documentclass{scrreprt}[2015/01/14]% at least KOMA-Script v3.15 needed
%\documentclass{scrartcl}[2015/01/14]% at least KOMA-Script v3.15 needed
\IfExistskomafont{chapterentry}{%
\addtokomafont{chapterentry}{\mdseries}%
}{%
\addtokomafont{sectionentry}{\mdseries}%
}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\blinddocument
\end{document}
顺便说一句:如果您也不想设置无衬线条目,您可以使用:
\documentclass{scrreprt}[2015/01/14]% at least KOMA-Script v3.15 needed
%\documentclass{scrartcl}[2015/01/14]% at least KOMA-Script v3.15 needed
\IfExistskomafont{chapterentry}{%
\setkomafont{chapterentry}{}%
}{%
\setkomafont{sectionentry}{}%
}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\blinddocument
\end{document}
答案4
为了记录,使代码更明确的解决方案(使用 KOMA 脚本条件 \Ifstr):
\Ifstr{\KOMAClassName}{scrbook}{
the class is scrbook
}{
the class isn't scrbook
}
如果代码需要与非 KOMA 类兼容:
\makeatletter
\@ifundefined{KOMAClassName}{
% if non-KOMA class
}{% if KOMA class
\Ifstr{\KOMAClassName}{scrbook}{the class is scrbook}{the class isn't scrbook}
}
\makeatother