回忆录

回忆录

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}

相关内容