算法标题?

算法标题?

我正在写我的毕业论文,不太会使用 LaTeX。在我的论文中,我必须写一些算法;我的教授给了我以下代码放在序言中:

\newcounter{algo}
\counterwithin{algo}{chapter} 
\newcommand{\rs}{\textbf }
\newcommand{\ie}{i.e.\xspace}
\newcommand{\sfrac}[2]{{\textstyle\frac{#1}{#2}}}
\newcommand{\note}[1]{\marginpar{\footnotesize #1}}
\newcommand{\ignore}[1]{}
\newcommand{\diag}{\mathrm{diag}}
\newcommand{\algo}[3]{\refstepcounter{algo}
\begin{figure}[H]
\begin{center}
\framebox[\textwidth]{
\parbox{0.95\textwidth} {\vspace{\topsep}
{\bf Algorithm \thealgo : #2}\label{#1}\\
\vspace*{-\topsep} \mbox{ }\\
{#3} \vspace{\topsep} }}
\end{center}
\end{figure}}

我无法真正理解所有的行:实际上,这允许我在框内编写算法。现在,我有几个问题需要修改一些元素(我在互联网上查过了,但找不到任何东西):

  1. 如何为 定义的算法添加标签\algo?我想在讨论中引用它,并在论文开头创建一个算法列表。我不需要标题,因为算法的第一行已经说明了算法编号和标题,我只需要标签来在我的文档中引用它。
  2. 我如何才能居中\algo?我的意思是,如果我有一个短文\algo并想把它放在空白页上,它不会在水平和垂直方向上居中。我知道这个“框”被视为一个图形,但即使在命令中写明了,\begin{center} ... \end{center}它也无法做到这一点。我试图用它替换它\centering,但仍然不起作用。

如果您知道如何修复此问题并愿意帮助我,我将不胜感激。向所有人致敬。

答案1

要引用算法,只需使用\algo存储标签的命令的第一个参数。 \centering由于框宽度设置为\textwidth,因此无用,因此它始终水平居中。如果更改[H]为,您会注意到算法也将垂直居中。无论如何,您可以使用内部[p]手动垂直移动算法。\vspace*{<dimen>}figure

平均能量损失

\documentclass{book}
\usepackage{chngcntr}
\usepackage{float}
\usepackage{graphicx}
\usepackage{hyperref}

\newcounter{algo}
\counterwithin{algo}{chapter} 
\newcommand{\rs}{\textbf }
\newcommand{\ie}{i.e.\xspace}
\newcommand{\sfrac}[2]{{\textstyle\frac{#1}{#2}}}
\newcommand{\note}[1]{\marginpar{\footnotesize #1}}
\newcommand{\ignore}[1]{}
\newcommand{\diag}{\mathrm{diag}}
\newcommand{\algo}[3]{\refstepcounter{algo}
  \begin{figure}[H]
  \centering
   \framebox[\textwidth]{
    \parbox{0.95\textwidth} {\vspace{\topsep}
     {\bf Algorithm \thealgo : #2}\label{#1}\\
     \vspace*{-\topsep} \mbox{ }\\
     {#3} \vspace{\topsep} }}
\end{figure}}

\begin{document}
 
 \chapter{The algorithm}

See algorithm \ref{algo:label}

\algo{algo:label}{The basic algorithm}{Do this and then this}

\end{document}

这使:

在此处输入图片描述

答案2

\documentclass{book}
\newcounter{algo}
\counterwithin{algo}{chapter} 
\newcommand{\algo}[3]{\refstepcounter{algo}
    {
        \centering
        \framebox[\textwidth]{
        \parbox{0.95\textwidth} {\vspace{\topsep}
        {\bf Algorithm \thealgo : #2}\label{#1}\\
        \vspace*{-\topsep} \mbox{ }\\
        {#3} \vspace{\topsep} }}
    }}
\begin{document}
\vspace*{\fill}
\algo{label}{title}{algorithm}
\vspace*{\fill}
\newpage
\ref{test}
\end{document}

鉴于章节的提及,我假设这是一个书籍类,尽管这也应该适用于其他类。我还删除了与 无关的定义\algo

我删除了figure环境,因为您想要手动放置而不是自动放置图形。环境center\centering命令都只水平居中,因为这通常是想要的。要开始新页面,只需使用\newpage。因此,在您的文档中,您将拥有

\newpage
\vspace*{\fill}
\algo{alg:label}{title}{algorithm}
\vspace*{\fill}
\newpage

这样算法就会水平和垂直居中(以文本块为中心,但文本块可能不在页面上居中)。在文档的另一处,您可以引用此内容,请Algorithm~\ref{alg:label}注意alg前缀不是必需的,但像这样组织引用通常是一种很好的做法。

相关内容