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
或使用像newfloat
、float
或这样的包生成的浮点数列表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
直接使用章节编号然后将其作为标题的一部分进行打印,这真的很愚蠢。为什么不直接使用tocloft
和titlesec
按照您想要的方式格式化内容呢?(顺便说一句,我总是对将多个toc
-formatting 包组合在一起感到紧张;tocloft
包含专门用于解决某些问题的代码titlesec
。)
下面快速解释一下代码。列表编号与下面代码中注释中标记的行相对应。
- 通过使用
[explicit]
for,titlesec
您需要明确包含在打印标题文本中。并#1
通过\titleformat
不是包括它,您就完全抑制了章节标题的打印。 - 为什么不像使用这些命令那样,直接在节号之前和之后打印,而是通过包装节号
lrbox
来吃掉它呢?Lecture
:
- 当然,如果这样做,您应该保留足够的空间以便
Lecture XX:
正确打印。我估计是5em
,但你可以将其更改为适合。 - 瞧瞧,你现在可以
\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}