调整算法列表格式

调整算法列表格式

我正在使用现有的 LaTeX 模板撰写论文,并尝试将算法列表与图片列表进行匹配。我已经应用了一些格式更改,但有一些属性我无法操作。

以下是 LoF 的一个示例:


低频


以下是 LoA 的样本:


在此处输入图片描述


我仍然需要在 LoA 中编辑三个属性:

  • 算法编号需要与列标题齐平
  • 算法数字后的缩进需要稍微减少
  • 点间距需要在 LoA 中减小

经过大量的谷歌搜索后,我能够找到几个属性。理想情况下,我想知道生成 LoA 的源代码位于何处,以便我可以自己查看它以及与 LOA 构建相关的任何文档,但我也想知道如何编辑这三个特定的属性。


编辑

我正在研究一个最小的工作示例,但是模板有点复杂。

这是主要的 .tex 文件:

\documentclass[oneside, 12pt]{memoir}
\usepackage{verbatim}
\usepackage[labelsep=period, font=singlespacing, skip=12pt, format=hang,
justification=RaggedRight, singlelinecheck=false]{caption}
\usepackage[T1]{fontenc}
\usepackage{times}
\usepackage{indentfirst}
\usepackage{thesis}
\usepackage{layouts}
\usepackage{array}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{subfig}
\usepackage{algorithmic}
\usepackage{algorithm}
\usepackage{multirow}
\usepackage{amsmath}
\usepackage{tocloft}

\floatname{algorithm}{\textnormal{Algorithm}}
\renewcommand{\thealgorithm}{\textnormal{\arabic{algorithm}.} }

\renewcommand{\listalgorithmname}{LIST OF ALGORITHMS\\
\thispagestyle{plain}%
\par\nobreak {\normalfont ALGORITHM \hfill PAGE}\par\nobreak
}



\begin{document}


\listoffigures
\clearpage
\pagebreak
\listofalgorithms
\clearpage
\pagebreak

\pagestyle{plain}

\mainmatter
\counterwithout{figure}{chapter}
%\counterwithout{table}{chapter}
\addtocontents{toc}{\noindent CHAPTER \par}
\setulmarginsandblock{0.75in}{1.25in}{*}

\begin{figure}[t]
\centering
\begin{subequations}
\begin{equation} \label{eq:tf}
tf(t, d) = \frac{| t \in d |}{| words \in d |}
\end{equation}
\vspace{\linespace}
\begin{equation} \label{eq:idf}
idf(t, D) = \log \frac{|D|}{|\{d \in D : t \in d\}|}
\end{equation}
\vspace{\linespace}
\begin{equation} \label{eq:tfidf}
tfidf(t, d, D) = tf(t, d) \times idf(t, D)
\end{equation}
\end{subequations}
\caption{Formula for calculating the TF-IDF}
\label{fig:tfidf}
\vspace{\linespace}
\end{figure}

\begin{algorithm}[t]
\caption{Building a C4.5 Decision Tree}
\label{alg:C4.5}
\begin{algorithmic}[1]

\STATE Check for base cases
\FORALL{$a$ $\in$ attributes}
\STATE Find the normalized information gain ratio from splitting on $a$
\ENDFOR
\STATE Let $a\_best$ be the attribute with the highest normalized information
gain
\STATE Create a decision $node$ that splits on $a\_best$
\STATE Recurse on the sublists obtained by splitting on $a\_best$, and add those
nodes as children of $node$

\end{algorithmic}
\end{algorithm}


\end{document}

以下是包含许多自定义布局命令的 .sty 文件: 关联

.sty 文件充满了随机的位和片段,但我会尝试尽可能简化它们(编辑应通过 Dropbox 实时进行)。


编辑2

通过大量的谷歌搜索,我能够重新定义 LoA 中的几个命令 thealgorithmlistofalgorithmname。我认为我的主要问题是我不知道这些命令在哪里记录、声明或使用,所以我不知道如何重新定义其他命令。

这些命令在哪里声明?

答案1

这是我分析这个问题的思路...

我首先尝试创建一个最小示例会复制您的问题。这意味着我会密切关注您生成的内容以及可能影响它们的包。为此,algorithmtocloft脱颖而出:

在此处输入图片描述

在此处输入图片描述

\documentclass{memoir}
\usepackage{algorithm,tocloft}
\renewcommand*{\cftdotsep}{1}
\begin{document}

\listoffigures
\listofalgorithms

\begin{figure}[ht]
  \caption{A figure}
\end{figure}

\begin{algorithm}[ht]
  \caption{An algorithm}
\end{algorithm}
\end{document}

那很简单...

现在我们尝试理解如何\listoffigures\listofalgorithms生成输出之间的区别。好吧,要理解这一点,似乎对前者tocloft有影响\cftdotsep,但对后者没有影响。奇怪……看看代码algorithms.dtx- 软件包的源包algorithm- 很明显,algorithm浮动环境是通过float包裹具有\listofalgorithms以下定义:

\newcommand{\listofalgorithms}{\listof{algorithm}{\listalgorithmname}}

也就是说,\listofalgorithms实际上只是调用\listof提供的一些例程float。那么,让我们看看\listof

\newcommand*{\listof}[2]{%
  \@ifundefined{ext@#1}{\float@error{#1}}{%
    \@namedef{l@#1}{\@dottedtocline{1}{1.5em}{2.3em}}%
    \float@listhead{#2}%
    \begingroup\setlength{\parskip}{\z@}%
      \@starttoc{\@nameuse{ext@#1}}%
    \endgroup}} 

啊,通过调用\listof{<name>}{..},它会创建\l@<name>- 负责设置 XX 构造列表内每个条目的宏。由此我可以得出结论,的内联构造\l@algorithm很可能与不兼容tocloft,这就是为什么它不会受到同样的影响。

解决方法是尝试使 的\l@algorithm行为与 完全相同\l@figure。在 TeX 术语中,这很简单\let\l@algorithm\l@figure。我们可以使用etoolbox修补\listof总是\l@XX等同于\l@figure(对于任何的XX):

\usepackage{etoolbox}
\makeatletter
\patchcmd{\listof}% <cmd>
  {\float@listhead}% <search>
  {\@namedef{l@#1}{\l@figure}\float@listhead}% <replace>
  {}{}% <success><failure>
\makeatother

上述补丁将上述的变体插入\let到的适当位置\listof

这是一个显示输出的最小示例:

在此处输入图片描述

在此处输入图片描述

\documentclass{memoir}
\usepackage{etoolbox}
\usepackage{algorithm,tocloft}

\makeatletter
\patchcmd{\listof}% <cmd>
  {\float@listhead}% <search>
  {\@namedef{l@#1}{\l@figure}\float@listhead}% <replace>
  {}{}% <success><failure>
\makeatother

\renewcommand*{\cftdotsep}{1}
\begin{document}

\listoffigures
\listofalgorithms

\begin{figure}[ht]
  \caption{A figure}
\end{figure}

\begin{algorithm}[ht]
  \caption{An algorithm}
\end{algorithm}
\end{document}

相关内容