算法:减少浮点名称和标题之间的空间(无编号时)

算法:减少浮点名称和标题之间的空间(无编号时)

我想使用algorithmic未编号的包。

我尝试用 来做到这一点\renewcommand{\thealgorithm}{},但似乎 floatname Algorithm 和 caption great 之间的空间太大了。

这是我的 MWE:

\documentclass{article}
\usepackage{algorithmic}
\usepackage{algorithm}

\begin{document}

\begin{algorithm}[H]
\caption{great}
\begin{algorithmic}
\STATE dummy
\end{algorithmic}
\end{algorithm}

\renewcommand{\thealgorithm}{}

\begin{algorithm}[H]
\caption{great}
\begin{algorithmic}
\STATE dummy
\end{algorithmic}
\end{algorithm}

\end{document}

输出:

在此处输入图片描述

答案1

使用未编号算法需要删除两个位置的编号。第一个是在算法中\caption,第二个是在目录中。下面的补丁正是删除了这一点:

\usepackage{etoolbox}
\makeatletter
% Remove \thealgorithm from ToC
\patchcmd{\@float@c@algorithm}% <cmd>
  {\@nameuse{the#1}}% <search>
  {}% <replace>
  {}{}% <succes><failure>
% Remove \thealgorithm from \caption
\renewcommand{\fnum@algorithm}{\fname@algorithm}
\makeatother

以下示例显示了差异:

在此处输入图片描述

\documentclass{article}

\usepackage{algorithm}

\usepackage{etoolbox}

\begin{document}

\listofalgorithms

\begin{algorithm}[H]
  \caption{great}
\end{algorithm}

\makeatletter
% Remove \thealgorithm from ToC
\patchcmd{\@float@c@algorithm}% <cmd>
  {\@nameuse{the#1}}% <search>
  {}% <replace>
  {}{}% <succes><failure>
% Remove \thealgorithm from \caption
\renewcommand{\fnum@algorithm}{\fname@algorithm}
\makeatother

\begin{algorithm}[H]
  \caption{great}
\end{algorithm}

\end{document}

请注意,算法计数器仍然是步进的,但如果全部你的算法应该是无编号的。如果你只想让某些算法无编号,最好创建一个单独的环境来区分这些类型。


如果您希望目录中的间距也进行调整,以便边距和算法标题之间没有太大间隙,那么您可以使用此补丁删除整个\numberline插入内容.loa

\makeatletter
% Remove \thealgorithm from ToC
\patchcmd{\@float@c@algorithm}% <cmd>
  {\protect\numberline{\@nameuse{the#1}}}% <search>
  {}% <replace>
  {}{}% <succes><failure>
% Remove \thealgorithm from \caption
\renewcommand{\fnum@algorithm}{\fname@algorithm}
\makeatother

在此处输入图片描述


加载中subcaption干扰上述更新。具体来说, 不是\caption以通常的方式设置的。因此,我们可以在加载之前捕获通常algorithm的,并将其替换为对 的第一次调用:\captionsubcaption\begin{algorithm}

\usepackage{algorithm}
\makeatletter
\let\alg@caption\caption% Store \caption in \alg@caption
\makeatother
\usepackage{subcaption}
\usepackage{etoolbox}

\makeatletter
% Remove \thealgorithm from ToC
\patchcmd{\@float@c@algorithm}% <cmd>
  {\@nameuse{the#1}}% <search>
  {}% <replace>
  {}{}% <succes><failure>
% Remove \thealgorithm from \caption
\renewcommand{\fnum@algorithm}{\fname@algorithm}
% Redeploy \caption at \begin{algorithm}
\g@addto@macro\fst@algorithm{\let\caption\alg@caption}
\makeatother

答案2

如果无论如何使用subcaption(或)包,则可以使用包选项:captioncaptionlabelformat=unnumbered

\documentclass{article}
\usepackage{algorithmic}
\usepackage{algorithm}
\usepackage{subcaption}

\captionsetup[algorithm]{labelformat=unnumbered}

\begin{document}

\begin{algorithm}[H]
\caption{great}
\begin{algorithmic}
\STATE dummy
\end{algorithmic}
\end{algorithm}

\end{document}

相关内容