动词:listofpyglistings numwidth

动词:listofpyglistings numwidth

我对 latex 还不是很熟悉,现在想制作一个源代码列表。为了突出显示,我使用了 verbments。它提供了命令 ListOfPyglist。这很好用。现在我想将计数器设置为在部分、子部分和子子部分内计数。这也可以正常工作,但现在有一个问题:当我制作 ListOf 时,列表看起来很丑陋,因为编号与标题重叠。我在图表和表格方面遇到了同样的问题,但我用它解决了它

\usepackage[titles]{tocloft}
\addtolength{\cftfignumwidth}{2em}
\addtolength{\cfttabnumwidth}{2em}

这很好用。以前我使用过软件包列表,在那里我解决了编号问题

\makeatletter
    \let\l@lstlisting\l@figure
\makeatother

所以我想我可以用同样的方法在我的 pyglisting 中修复它......

\makeatletter
    \let\l@pyglist\l@figure
\makeatother

但它不起作用。所以我查看了动词的来源...在那里我找到了可能行的行:

\newcommand{\l@pyglist}[2]{%
  \@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}
}

所以我想如果我更新命令它应该可以工作......

\makeatletter
    \renewnewcommand{\l@pyglist}{%
        \@dottedtocline{1}{1.5em}{4.3em}
    }
\makeatother

但没有影响..

那么,有人知道解决方案吗?

以下是一个简短的示例:

\documentclass[12pt,oneside,a4paper,toc=listof,toc=bibliography]{scrreprt}

\usepackage{verbments}

\plset{
    style=vs,
    listingnamefont=\sffamily\bfseries\color{yellow},%
    captionfont=\sffamily\color{white},captionbgcolor=gray,%
    fvset={frame=bottomline,framerule=4pt,rulecolor=\color{gray}},
    listingname=Some Listing Name
}

\usepackage{chngcntr}

\AtBeginDocument
{
    \counterwithin*{pllisting}{section}
    \counterwithin*{pllisting}{subsection}
    \counterwithin*{pllisting}{subsubsection}
    % Numbering for pyglisting
    \renewcommand{\thepllisting}
    {%
        \ifnum\value{subsection}=0
     \thesection.\arabic{pllisting}%
        \else
     \ifnum\value{subsubsection}=0
      \thesubsection.\arabic{pllisting}%
     \else
      \thesubsubsection.\arabic{pllisting}%
     \fi
        \fi
    }%
}

\begin{document}

%List of Pyglist
\listofpyglistings

\chapter{Some Chapter}
\section{Some Section}
\subsection{Some Subsection}
%Sample Listing
\begin{pyglist}[language=c++,caption=SomeSample, listingname=SomeListing]
int main(char[] args)
{
  cout << "hello World";
}
\end{pyglist}
\end{document}

答案1

.pyg.lol文件中写道

\contentsline {pyglist}{\hbox to\z@ {1.1.1.1\hss }\hskip 5ex SomeSample}{2}

所以保留给数字标签的空间是5ex,太短了。

你可以通过补丁\endpyglist来做不同的事情:

\documentclass[12pt,oneside,a4paper,toc=listof,toc=bibliography]{scrreprt}

\usepackage{verbments}
\usepackage{etoolbox}
\patchcmd{\endpyglist}{5ex}{4em}{}{}

\plset{
    style=vs,
    listingnamefont=\sffamily\bfseries\color{yellow},%
    captionfont=\sffamily\color{white},captionbgcolor=gray,%
    fvset={frame=bottomline,framerule=4pt,rulecolor=\color{gray}},
    listingname=Some Listing Name
}

\usepackage{chngcntr}

\AtBeginDocument
{
    \counterwithin*{pllisting}{section}
    \counterwithin*{pllisting}{subsection}
    \counterwithin*{pllisting}{subsubsection}
    % Numbering for pyglisting
    \renewcommand{\thepllisting}
    {%
        \ifnum\value{subsection}=0
     \thesection.\arabic{pllisting}%
        \else
     \ifnum\value{subsubsection}=0
      \thesubsection.\arabic{pllisting}%
     \else
      \thesubsubsection.\arabic{pllisting}%
     \fi
        \fi
    }%
}

\begin{document}

%List of Pyglist
\listofpyglistings

\chapter{Some Chapter}
\section{Some Section}
\subsection{Some Subsection}
%Sample Listing
\begin{pyglist}[language=c++,caption=SomeSample, listingname=SomeListing]
int main(char[] args)
{
  cout << "hello World";
}
\end{pyglist}
\end{document}

在此处输入图片描述

使用更复杂的补丁,我们可以verbments编写一些语法上可理解的内容\@dottedtocline

\usepackage{etoolbox}
\makeatletter
\patchcmd{\endpyglist}
  {\lol@caption{\rlap{\thepllisting}\hskip 5ex \pl@caption}}
  {\lol@caption{\protect\numberline{\thepllisting}\pl@caption}}
  {}{\ddt}
\renewcommand{\l@pyglist}[2]{%
  \@dottedtocline{1}{1.5em}{4.3em}{#1}{#2}
}
\makeatother

在此处输入图片描述

我会向软件包开发人员提及这一点。

相关内容