如何重新定义 \section 以在目录中包含“长标题”?

如何重新定义 \section 以在目录中包含“长标题”?

OBS:我之前发过一篇帖子谈论我的问题,但表达得不够清楚。所以我会再试一次!

我正在制作数学讲义模板,内容如下:

\section[Lecture \thesection: <<title>>]{Lecture \thesection}

其中\thesection是讲座编号(即章节编号),“title” 是章节标题。有些课程有超过 30 个讲座,所以确实非常重复;更不用说糟糕的编程了。我想要这样的东西:

\section{<<title>>}

图像

但想要它表现像前者一样。我尝试使用\renewcommand、更改\titleformat\let\old重新定义,但到目前为止没有任何效果。这是我的 MWE,包含所有部分和目录命令。

平均能量损失

\documentclass[a4paper,12pt]{article}

% ----- Packages --------------------------------------------

\usepackage{titlesec} % Section formatting
\usepackage[subfigure]{tocloft} % ToC formatting
\usepackage[toc]{multitoc} % ToC formatting


% ----- Section formatting ----------------------------------

\titleformat{\section}
    {\sffamily\Large\bfseries}
    {\!{\fontsize{24}{24}\selectfont\textreferencemark}\;\;}
    {0em}
    {} % Tried: "Lecture \thesection" here. Didn't work!


% ----- ToC formatting --------------------------------------

\setlength{\cftbeforesecskip}{3pt}
\cftsetindents{section}{0em}{0em}
\renewcommand{\cfttoctitlefont}{\sffamily\Large\bfseries}
\renewcommand{\cftsecfont}{\normalfont}
\renewcommand{\cftsecpagefont}{\normalfont}
\renewcommand{\cftsubsecfont}{\normalfont}
\renewcommand{\cftsubsecpagefont}{\normalfont}
\renewcommand{\cftdot}{}

\renewcommand*{\multicolumntoc}{2}
\setlength{\columnseprule}{0.5pt}
\setlength{\columnsep}{1cm}

\makeatletter
    \renewcommand{\cftsecpresnum}{\begin{lrbox}{\@tempboxa}}
    \renewcommand{\cftsecaftersnum}{\end{lrbox}}
\makeatother
-------------------------------------------------------------

\begin{document}

\tableofcontents % ToC

% Beginning of contents
% \section[long-title]{short-title}
\section[Lecture \thesection: First topic]{Lecture \thesection}
Lorem ipsum...

\section[Lecture \thesection: Second topic]{Lecture \thesection}
Lorem ipsum...

\section[Lecture \thesection: Third topic]{Lecture \thesection}
Lorem ipsum...

\end{document}

提前致谢 :)

答案1

不要明确使用,而是\section在这里定义一个合适的命令\lecture

\documentclass[a4paper,12pt]{article}
\usepackage{subcaption}

% ----- Packages --------------------------------------------

\usepackage{titlesec} % Section formatting
\usepackage[subfigure]{tocloft} % ToC formatting
\usepackage[toc]{multitoc} % ToC formatting


% ----- Section formatting ----------------------------------

\titleformat{\section}
    {\sffamily\Large\bfseries}
    {{\fontsize{24.88}{0}\selectfont\textreferencemark}\enspace}
    {0em}
    {Lecture \thesection}


% ----- ToC formatting --------------------------------------

\setlength{\cftbeforesecskip}{3pt}
\cftsetindents{section}{0em}{0em}
\renewcommand{\cfttoctitlefont}{\sffamily\Large\bfseries}
\renewcommand{\cftsecfont}{\normalfont}
\renewcommand{\cftsecpagefont}{\normalfont}
\renewcommand{\cftsubsecfont}{\normalfont}
\renewcommand{\cftsubsecpagefont}{\normalfont}
\renewcommand{\cftdot}{}

\renewcommand*{\multicolumntoc}{2}
\setlength{\columnseprule}{0.5pt}
\setlength{\columnsep}{1cm}

\makeatletter
    \renewcommand{\cftsecpresnum}{\begin{lrbox}{\@tempboxa}}
    \renewcommand{\cftsecaftersnum}{\end{lrbox}}
\makeatother
%-------------------------------------------------------------

\newcommand{\lecture}[1]{%
  \section[Lecture \thesection: #1]{}%
}

\begin{document}

\tableofcontents % ToC

\lecture{First topic}
Lorem ipsum...

\lecture{Second topic}
Lorem ipsum...

\lecture{Third topic}
Lorem ipsum...

\end{document}

在此处输入图片描述

答案2

首先:使用多个包来配置目录、图表列表等很少是一个好主意。除此之外,包multitoc可能会导致浮点数列表为空,例如,如果您添加一个\listoffigures而不添加选项lof。它也不支持像包中的浮点数列表listings或使用像newfloatfloat或这样的包生成的浮点数列表tocbasic。这些也将是空的。

我认为,使用已经支持许多所需功能的类更容易实现您的愿望。因此,这里有一个使用scrartcl而不是 的示例article

\documentclass[a4paper,12pt]{scrartcl}

\usepackage{multicol}

% Changinging the output if the section number in \section:
\renewcommand*{\sectionformat}{%
  {\fontsize{24}{24}\selectfont\textreferencemark}\enskip
  Lecture \thesection
}

% Changing the section ToC entries:
\setkomafont{sectionentry}{\normalfont}% Don't use sans-serif bold for the
                                       % section ToC entries.
\newcommand*{\LectureTOCNumFormat}[1]{\let\autodot:Lecture #1}% New definition.
\DeclareTOCStyleEntry[%
  dynnumwidth,% automatic adapt the width reserved for the number
  entrynumberformat=\LectureTOCNumFormat,% use the new definition above for
                                % the number
  beforeskip=0pt,% no vertical space above section entires
]{section}{section}

% Two columns for the ToC:
\BeforeStartingTOC[toc]{\begin{multicols}{2}}% 
\AfterStartingTOC[toc]{\end{multicols}}
\setlength{\columnseprule}{0.5pt}
\setlength{\columnsep}{1cm}

% Redefinition of \section to use the mandatory argument for the ToC (and page
% head with page style headings) only.
\NewCommandCopy{\Section}{\section}
\RenewDocumentCommand{\section}{som}{%
  \IfValueT{#2}{%
    \GenericWarning{}{Optional \string\section\space argument ignored}%
  }%
  \IfBooleanTF{#1}{%
    \Section*{#3}%
  }{%
    \Section[{#3}]{}%
  }%
}

%-------------------------------------------------------------

\begin{document}

\tableofcontents % ToC

% Beginning of contents
% \section[long-title]{short-title}
\section{First topic}
Lorem ipsum...

\section{Second topic}
Lorem ipsum...

\section{Third topic}
Lorem ipsum...

\end{document}

注意:因为dynnumwidth你至少需要运行三次 LaTeX 才能获得:

在此处输入图片描述

或者,您可以使用明确的宽度,例如numwidth=4.75em

如您所见,只需要一个额外的包:multicol

答案3

直接使用章节编号然后将其作为标题的一部分进行打印,这真的很愚蠢。为什么不直接使用toclofttitlesec按照您想要的方式格式化内容呢?(顺便说一句,我总是对将多个toc-formatting 包组合在一起感到紧张;tocloft包含专门用于解决某些问题的代码titlesec。)

下面快速解释一下代码。列表编号与下面代码中注释中标记的行相对应。

  1. 通过使用[explicit]for,titlesec您需要明确包含在打印标题文本中。并#1通过\titleformat不是包括它,您就完全抑制了章节标题的打印。
  2. 为什么不像使用这些命令那样,直接在节号之前和之后打印,而是通过包装节号lrbox来吃掉它呢?Lecture:
  3. 当然,如果这样做,您应该保留足够的空间以便Lecture XX:正确打印。我估计是5em,但你可以将其更改为适合。
  4. 瞧瞧,你现在可以\section{<title>}按照你在问题中想要的方式打电话了。
\documentclass[a4paper,12pt]{article}
\usepackage{subcaption}

% ----- Packages --------------------------------------------

\usepackage[explicit]{titlesec} % Item 1
\usepackage[subfigure]{tocloft} 
\usepackage[toc]{multitoc} 


% ----- Section formatting ----------------------------------

\titleformat{\section}
    {\sffamily\Large\bfseries}
    {{\fontsize{24.88}{0}\selectfont\textreferencemark}\enspace}
    {0em}
    {Lecture \thesection}  % Item 1


% ----- ToC formatting --------------------------------------

\setlength{\cftbeforesecskip}{3pt}
\cftsetindents{section}{0em}{5em}    % Item 3
\renewcommand{\cfttoctitlefont}{\sffamily\Large\bfseries}
\renewcommand{\cftsecfont}{\normalfont}
\renewcommand{\cftsecpagefont}{\normalfont}
\renewcommand{\cftsubsecfont}{\normalfont}
\renewcommand{\cftsubsecpagefont}{\normalfont}
\renewcommand{\cftdot}{}

\renewcommand*{\multicolumntoc}{2}
\setlength{\columnseprule}{0.5pt}
\setlength{\columnsep}{1cm}

\renewcommand{\cftsecpresnum}{Lecture }   % Item 2
\renewcommand{\cftsecaftersnum}{:}        % Item 2
%-------------------------------------------------------------

\begin{document}

\tableofcontents 

\section{First topic}    % Item 4   
Lorem ipsum...

\section{Second topic}
Lorem ipsum...

\section{Third topic}
Lorem ipsum...

\end{document}

相关内容