listings
我在我的文档中使用,以及它的命令\lstlistoflistings
来生成列表。问题是我已经自定义了所有其他列表(TOC、LOF 和 LOT)。更准确地说,我更改了页码的颜色,删除了前导点,并将页码移动到紧接着条目文本的位置(即页码不再右对齐)。这是一个完整的示例:
\documentclass[a4paper, 11pt]{memoir}
\usepackage{microtype}
\usepackage{textcase}
\usepackage{titlesec}
\usepackage{listings}
\usepackage[usenames,dvipsnames]{color}
% Define color theme
\newcommand{\titleColor}{\color[rgb]{0.616, 0.0627, 0.176}}
\newcommand{\partChapterNumColor}{\titleColor}
\newcommand{\tocPageColor}{\color[rgb]{0.0980, 0.329, 0.651}}
% Rules
\newcommand{\thinRule}{\rule{\textwidth}{0.25pt}}
% Customize heading appearance
\newcommand{\partSize}{\Huge}
\newcommand{\partStyle}{\lsstyle\scshape}
\newcommand{\chapterSize}{\huge}
\newcommand{\chapterStyle}{\lsstyle\scshape}
\newcommand{\chapterAfter}{\thinRule}
\newcommand{\sectionSize}{\Large}
\newcommand{\sectionStyle}{\lsstyle\scshape\MakeTextLowercase}
\newcommand{\subsectionSize}{}
\newcommand{\subsectionStyle}{\itshape}
\newcommand{\numberStyle}{\fontsize{60pt}{72pt}\selectfont\partChapterNumColor}
\titleformat{\part}[display]
{\filcenter}
{\numberStyle\thepart}
{0pt}
{\partSize\partStyle}
\titleformat{\chapter}[display]
{}
{\filleft\numberStyle\thechapter}
{0pt}
{\chapterSize\chapterStyle}
[\chapterAfter]
\titleformat{\section}
{\sectionSize}
{\thesection\quad}
{0pt}
{\sectionStyle}
\titleformat{\subsection}
{\subsectionSize}
{\thesubsection\quad}
{0pt}
{\subsectionStyle}
% Customize "Table of ..." appearance
% Customize headings
\newcommand{\fixCtfHeadingBeforeSpacing}{\vspace*{1ex}} % Needed to make chapter
\newcommand{\fixCtfHeadingAfterSpacing}{\vspace*{0.5ex}} % layout coherent
\newcommand{\renewPrintXTitle}[1]{%
\renewcommand{#1}[1]{%
\fixCtfHeadingBeforeSpacing
\chapterSize\chapterStyle ##1
\fixCtfHeadingAfterSpacing
\par\chapterAfter
}
}
\renewPrintXTitle{\printtoctitle}
\renewPrintXTitle{\printlottitle}
\renewPrintXTitle{\printloftitle}
\renewcommand{\cftpartfont}{\partChapterNumColor\partStyle}
\renewcommand{\cftchapterfont}{\chapterStyle}
\renewcommand{\cftsectionfont}{}
\renewcommand{\cftsubsectionfont}{}
\renewcommand{\cftfigurefont}{}
\renewcommand{\cfttablefont}{}
\newcommand{\cftlistingfont}{}
% No leader dots
\renewcommand*{\cftpartdotsep}{\cftnodots}
\renewcommand*{\cftchapterdotsep}{\cftnodots}
\renewcommand*{\cftsectiondotsep}{\cftnodots}
\renewcommand*{\cftsubsectiondotsep}{\cftnodots}
\renewcommand*{\cftfiguredotsep}{\cftnodots}
\renewcommand*{\cfttabledotsep}{\cftnodots}
% Set page numbers immediately after entry text
\newcommand{\tocEntryPageSep}{\hspace{2em}}
\renewcommand{\cftpartleader}{\tocEntryPageSep}
\renewcommand{\cftpartafterpnum}{\cftparfillskip}
\renewcommand{\cftchapterleader}{\tocEntryPageSep}
\renewcommand{\cftchapterafterpnum}{\cftparfillskip}
\renewcommand{\cftsectionleader}{\tocEntryPageSep}
\renewcommand{\cftsectionafterpnum}{\cftparfillskip}
\renewcommand{\cftsubsectionleader}{\tocEntryPageSep}
\renewcommand{\cftsubsectionafterpnum}{\cftparfillskip}
\renewcommand{\cftfigureleader}{\tocEntryPageSep}
\renewcommand{\cftfigureafterpnum}{\cftparfillskip}
\renewcommand{\cfttableleader}{\tocEntryPageSep}
\renewcommand{\cfttableafterpnum}{\cftparfillskip}
% Customize page numbers
\newcommand{\tocPageStyle}{\tocPageColor}
\renewcommand{\cftpartpagefont}{\tocPageStyle}
\renewcommand{\cftchapterpagefont}{\tocPageStyle}
\renewcommand{\cftsectionpagefont}{\tocPageStyle}
\renewcommand{\cftsubsectionpagefont}{\tocPageStyle}
\renewcommand{\cftfigurepagefont}{\tocPageStyle}
\renewcommand{\cfttablepagefont}{\tocPageStyle}
\begin{document}
\tableofcontents
\lstlistoflistings
\section{new section}
bla bla bla
\begin{lstlisting}[caption=test code]
Test
\end{lstlisting}
\end{document}
listings
现在我已经知道了如何通过重新定义其中一个内部命令来更改字体:
\makeatletter
\renewcommand*{\l@lstlisting}[2]{%
\@dottedtocline{1}
{0em} % Indent
{\cftfigurenumwidth} % Listing number width
{\cftlistingfont#1} % Entry text font
{\tocPageStyle#2}% % Page number font
}
\makeatother
但是我该如何删除这些点并移动页码的位置?另外,与其他列表相比,LOL 中的条目似乎在文档中的位置略高一些。
另请注意,我正在使用memoir
,如果有用的话。
答案1
您必须注册列表列表托克洛夫特;我发现这是可行的
\makeatletter
\begingroup\let\newcounter\@gobble\let\setcounter\@gobbletwo
\globaldefs\@ne \let\c@loldepth\@ne
\newlistof{listings}{lol}{\lstlistlistingname}
\endgroup
\let\l@lstlisting\l@listings
\AtBeginDocument{\addtocontents{lol}{\protect\addvspace{10\p@}}}
\makeatother
\renewcommand{\lstlistoflistings}{\listoflistings}
\renewcommand{\cftlistingsfont}{\itshape}
最后一行只是为了表明该类型的命令\cftlistings...
可以用于以与正常条目完全相同的方式自定义条目的外观。
“稍微高一点”的事情取决于标准类的发行,\addtocontents{lof}{\protect\addvspace{10\p@}}
并且对 也一样lot
;所以我们对 也做同样的事情lol
。
\lstlistoflistings
您可以使用或来排版列表\listoflistings
。
回忆录
什么时候回忆录被使用时,必须采取略有不同的方式
\begingroup\makeatletter
\let\newcounter\@gobble\let\setcounter\@gobbletwo
\globaldefs\@ne \let\c@loldepth\@ne
\newlistof{listings}{lol}{\lstlistlistingname}
\newlistentry{lstlisting}{lol}{0}
\endgroup
现在,我们可以使用以下形式的命令来定制列表条目的外观\cftlstlisting...
;这些命令应该将列表的排版与其他的完全一样。
\renewcommand{\cftlstlistingdotsep}{\cftnodots}
\renewcommand{\cftlstlistingleader}{\tocEntryPageSep}
\renewcommand{\cftlstlistingafterpnum}{\cftparfillskip}
\renewcommand{\cftlstlistingpagefont}{\tocPageStyle}
如果是回忆录列表开头似乎不需要进行垂直调整。
添加
为了在“列表”中添加不同章节列表的分隔,请执行以下操作
\makeatletter
\renewcommand*{\insertchapterspace}{%
\addtocontents{lof}{\protect\addvspace{10pt}}%
\addtocontents{lot}{\protect\addvspace{10pt}}%
\addtocontents{lol}{\protect\addvspace{10pt}}}
\makeatother
或者更简单地说,
\makeatletter
\g@addto@macro\insertchapterspace
{\addtocontents{lol}{\protect\addvspace{10pt}}}
\makeatother
答案2
把这个放在前面\begin{document}
\makeatletter
\let\l@lstlisting\l@section
\makeatother
答案3
这titletoc
包适用于由\contentsline
和生成的任何内容\numberline
。对于新类型的内容,只需使用
\contentsuse{<content type>}{<content file extension>}
然后我们就可以使用\titlecontents
命令来自定义列表了,就像 ToC/LoF/LoT 一样。这比修补tocloft
包要容易得多。
下面是一个例子\lstlistoflistings
:
\documentclass{article}
\usepackage{listings}
\usepackage{titletoc}
\contentsuse{lstlisting}{lol}
\titlecontents{lstlisting}[2em]
{\addvspace{0.25pc}}
{\textbf{Code \thecontentslabel} }
{}
{\titlerule*[0.5em]{$\cdot$}\contentspage}
[]
\begin{document}
\lstlistoflistings
\begin{lstlisting}[caption=Test]
Some code
\end{lstlisting}
\end{document}