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
指定任何在post
erio' 处(或打印后) 你的算法浮点数。在常规设置中,浮点数下方有一个标题,此宏位于标题之后;\@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}