根据使用的 Documentclass 有条件地执行命令

根据使用的 Documentclass 有条件地执行命令

我几乎只使用 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(带有scrbookscrreprt)和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

相关内容