我对目录中的标题和点感到困惑。
\documentclass[oneside]{book}
\usepackage{color, xcolor}
\newcommand{\mysection}[2]{
\setcounter{section}{#1}
\setcounter{section}{0}
\chapter*{#2}
\addcontentsline{toc}{section}
{\protect\numberline{\hspace{-1.15cm}%
\colorbox{blue!50}{\color{blue}\string\parbox[c][.72em]{1em}
{\strut\protect}}%
\hspace{1em}\bfseries\sffamily \MakeUppercase{#2}\protect}}
}
\begin{document}
\tableofcontents
\frontmatter
\mysection{1}{Introduction}
\mysection{0}{Acknowledgments}
\mainmatter
\end{document}
答案1
与其使用一堆\protect
命令和奇怪的\string
宏,不如使用一个强健的命令来做这些事情,因为命令的可扩展性在这里不是问题!
但是,\chapter*
将section
其用作目录的格式化指示器看起来仍然很奇怪。
\documentclass[oneside]{book}
\usepackage{xcolor}
\usepackage{tocloft}
\renewcommand{\cftsecindent}{0pt} % Perhaps?
\DeclareRobustCommand{\entryfortoc}[1]{%
\bfseries\sffamily\MakeUppercase{#1}%
}
\DeclareRobustCommand{\bluenumberbox}[1]{%
\colorbox{blue!50}{\color{blue}\parbox[c][.72em]{1em}{\strut}}%
}
\newcommand{\mysection}[2]{%
\setcounter{section}{#1}
\setcounter{section}{0}
\chapter*{#2}
\addcontentsline{toc}{section}{\protect\numberline{\bluenumberbox{}}\entryfortoc{#2}}%
}
\begin{document}
\tableofcontents
\frontmatter
\mysection{1}{Introduction}
\mysection{0}{Acknowledgments}
\mainmatter
\end{document}
答案2
很难理解你正在做什么。
为什么前言中的章节应被视为目录中的章节级别?
蓝色矩形是否应排版在页边距中?
为什么不简单地制定一条规则呢?
\setcounter{section}{#1}\setcounter{section}{0}
如果最终效果只是将部分计数器设置为 0,那么目的是什么?
这是一个更简单的代码。
\documentclass[oneside]{book}
\usepackage{xcolor}
\DeclareRobustCommand{\bluerectangle}{%
\hspace*{-3.5em}%
\textcolor{blue!50}{\rule{1em}{.72em}}%
\quad
}
\newcommand{\mysection}[1]{%
\stepcounter{section}% reset all child counters
\setcounter{section}{0}%
\chapter*{#1}
\addcontentsline{toc}{section}{%
\bluerectangle\bfseries\sffamily\MakeUppercase{#1}%
}%
}
\begin{document}
\tableofcontents
\frontmatter
\mysection{Introduction}
\mysection{Acknowledgments}
\end{document}