更改算法和算法包生成的默认布局

更改算法和算法包生成的默认布局

algorithm如果和包的默认输出algorithmic为以下代码:

\begin{algorithm}
\begin{algorithmic}[1]
\PRINT \texttt{‘‘Hello, World!’’}    
\end{algorithmic}
\caption{Pseudocode of visualRSS's polling algorithm.}
\label{PseudocodevRSSPollingAlgorithm.}
\end{algorithm}

是:

在此处输入图片描述

是否可以进行更改以便删除这些行并在伪代码下集中显示标题,例如:

Algorithm 4.3: Printing HelloWorld.

那么,算法是通过章节号以及该章节内的编号来引用的,并且这种格式也出现在List of Algorithms文档的开头吗?

感谢下面给出的答案,我基本上能够实现我想要的。但我注意到我可以使用 \print 和 \State 指令,但如果我尝试使用 \FOR,如下所示:

\setcounter{algorithm}{0}
\begin{algorithm}
\begin{algorithmic}[1]            
\State $pollingDateTime \leftarrow now - 1 hour$
\FOR{\texttt{each} $rssFeed$}
\print \texttt{‘‘Hello, World!’’}
\ENDFOR   
\end{algorithmic}    
\caption{Algorithm 1.}        
\end{algorithm}

这会导致 LaTeXUndefined control sequence.错误。该怎么办?

谢谢

摩根先生。

答案1

是的当然!

主要思想是重新设计algorithm浮动结构。由于algorithm加载float包裹,您可以轻松定义自己的浮点结构,例如newruled

\makeatletter
\newcommand\fs@newruled{\def\@fs@cfont{\bfseries}\let\@fs@capt\floatc@plain% Caption style
  \def\@fs@pre{\hrule height.8pt depth0pt \kern2pt}% Line at top of algorithm + 2pt gap
  \def\@fs@post{}%\def\@fs@post{\kern2pt\hrule\relax}% Remove line below `\caption`
  \def\@fs@mid{\kern2pt\hrule\kern2pt}% Line at bottom of algorithm
  \let\@fs@iftopcapt\iffalse}% Place caption at bottom
\makeatother
\floatstyle{newruled}
\restylefloat{algorithm}

浮点数的 6 个组成部分在一个宏中定义\fs@<style>,当您使用时会调用该宏\floatstyle{<style>}

  • \@fs@cfont定义标题标签字体;

  • \@fs@capt定义标题的处理方式。float已经定义了许多这样的方式来处理(包括plain,我已经使用了);

  • \@fs@pre指定任何pre割让(或打印)你的算法;

  • \@fs@post指定任何在posterio' 处(或打印) 你的算法浮点数。在常规设置中,浮点数下方有一个标题,此宏位于标题之后;

  • \@fs@mid插入到标题上方和算法下方;

  • \@fs@iftopcapt是将标题设置在算法顶部还是底部的条件。如果设置为\iftrue,则标题将设置在顶部,否则(如果设置为\iffalse),标题将位于算法底部。

为了调整计数器表示,通常需要进行以下操作:

\renewcommand{\thealgorithm}{\thechapter.\arabic{algorithm}}
\makeatletter
\@addtoreset{algorithm}{chapter}
\makeatother

我们首先进行调整\thealgorithm以包括\thechapter.,并且algorithm每当chapter计数器发生变化时就重置计数器(使用\@addtoreset)。

在此处输入图片描述

\documentclass{report}
\usepackage{algorithm,algpseudocode}

\makeatletter
\newcommand\fs@newruled{\def\@fs@cfont{\bfseries}\let\@fs@capt\floatc@plain% Caption style
  \def\@fs@pre{\hrule height.8pt depth0pt \kern2pt}% Line at top of algorithm + 2pt gap
  \def\@fs@post{}%\def\@fs@post{\kern2pt\hrule\relax}% Remove line below `\caption`
  \def\@fs@mid{\kern2pt\hrule\kern2pt}% Line at bottom of algorithm
  \let\@fs@iftopcapt\iffalse}% Place caption at bottom
\makeatother
\floatstyle{newruled}
\restylefloat{algorithm}

\algnewcommand{\print}{\State \textbf{print} }
\renewcommand{\thealgorithm}{\thechapter.\arabic{algorithm}}
\makeatletter
\@addtoreset{algorithm}{chapter}
\makeatother

\begin{document}
\tableofcontents
\listofalgorithms
\setcounter{chapter}{3}% Just for this example

\chapter{A chapter}

\setcounter{algorithm}{2}% Just for this example
\begin{algorithm}
  \begin{algorithmic}[1]
    \print \texttt{``Hello World!''}
  \end{algorithmic}
  \caption{Printing HelloWorld}
\end{algorithm}

\end{document}

algpseudocode上面我用的是algorithmicx包裹,尽管你可以坚持algorithmic(由algorithms

答案2

一个附录对@Werner 的回答:

对于编号,使用algorithm选项加载包就足够了chapter。另一方面,它接受来自caption包的许多命令,特别是那些与字体和对齐有关的命令——不会跳过。

boxed以下是具有该样式和左对齐标题的示例:

\documentclass[12pt,leqno]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fourier}

\usepackage{xcolor}
\usepackage[fleqn]{mathtools}%
\usepackage{caption}
\DeclareCaptionFont{red}{\color{red}}
\captionsetup[algorithm]{font = small, labelfont = {sc, red}, singlelinecheck = off}
\usepackage[boxed, section]{algorithm}
\usepackage{algorithmic}

\begin{document}

\setcounter{section}{3}
\begin{algorithm}
\begin{algorithmic}[1]
\PRINT \texttt{‘‘Hello, World!’’}
\end{algorithmic}
\caption{Pseudocode of visualRSS's polling algorithm.}
\label{PseudocodevRSSPollingAlgorithm.}
\end{algorithm}

\end{document} 

在此处输入图片描述

相关内容