我对 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
我会向软件包开发人员提及这一点。