我正在整理大学作业模板。为了使写作系统化,我重新格式化了文档中的章节/小节标题,使其显示为“问题编号“ 和 ”答案 #number” ,无需手动输入。
我的问题是目录没有为每个部分和小节添加标题,因为命令中没有传递参数。请参见以下示例:
\documentclass{article}
\usepackage{titlesec}
\titleformat{\section}{\large \bfseries}{Problem \arabic{section}}{2em}{}
\titleformat{\subsection}{\small \bfseries}{Answer \arabic{section}}{1em}{}
\begin{document}
\tableofcontents
\section{}
\subsection{}
\end{document}
生成:
我知道我可以手动添加目录标题,方法是:
\section[title]{}
我可以定义一个新命令来对每个部分(以及每个小节)执行此操作,就像这样
\documentclass{article}
\usepackage{titlesec}
\titleformat{\section}{\large \bfseries}{Problem \arabic{section}}{2em}{}
\newcommand{\problem}[1]{\section[Problem \thesection]{#1}}
\begin{document}
\tableofcontents
\problem{}
\end{document}
产生
但这会在标题左侧显示章节编号。
有没有更好的方法可以让目录中的所有标题自动显示为文档中的内容?
答案1
我本来建议使用练习包,但发现 TOC 格式中有一个错误(我已修复)。
如果您不喜欢居中,可以轻松地重新格式化标题。
\documentclass{article}
\usepackage{exercise}
\ListOfExerciseInToc
\ExerciseLevelInToc{section}
\def\ExerciseName{Problem}
\def\AnswerName{Answer}
\makeatletter
\renewcommand{\@@@ExeEnv}{%
\pagebreak[1]\vskip\ExerciseSkipBefore
\@QuestionLevel1
\refstepExecounter
\begingroup\@getExerciseInfo\ExerciseHeader
\addcontentsline{\ext@exercise}{\toc@exercise}{\ExerciseName\
\theExercise\ \expandafter{\string\itshape \ExerciseTitle}\hspace{.66em}}% added \string
\endgroup\AtBeginExercise}
\renewcommand{\@@@ExeCmd}{%
\ifnum\@QuestionLevel=0
\advance \@QuestionLevel by 1
\begin{list}{\@getExerciseInfo\ExerciseListHeader}%
{\partopsep\Exepartopsep \labelsep\Exelabelsep \itemsep \Exesep%
\parsep\Exeparsep \topsep\Exetopsep \labelwidth\Exelabelwidth%
\leftmargin\Exeleftmargin \rightmargin\Exerightmargin}
\else
\termineliste{1}\@EndExeBox
\fi
\@selectExercise
\global\@Answerfalse\@BeginExeBox\refstepExecounter%
\addcontentsline{\ext@exercise}{\toc@exercise}{\ExerciseName\
\theExercise\ \expandafter{\string\itshape \expandafter\ExerciseTitle}\hspace{.66em}}% added \string
\item\ignorespaces\AtBeginExercise
}
\makeatother
\begin{document}
\tableofcontents
\bigskip\hrule
\section{Normal section}
\begin{Exercise}
Problem text here.
\end{Exercise}
\begin{Answer}
Answer text here.
\end{Answer}
\end{document}
答案2
需要对目录的条目进行小幅修改以\section
抑制章节编号。
\documentclass{article}
\usepackage{titlesec}
\titleformat{\section}{\large \bfseries}{Problem \thesection}{2em}{}
\newcommand{\problem}[1]{%
\section[Problem \thesection]{#1}
}
%% from https://tex.stackexchange.com/a/218675/161015
\makeatletter
\let\latexl@section\l@section
\def\l@section#1#2{\begingroup\let\numberline\@gobble\latexl@section{#1}{#2}\endgroup}
\makeatother
\begin{document}
\tableofcontents
\problem{One}
\problem{Two}
\problem{Three}
\end{document}