我正在写我的毕业论文,不太会使用 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}}
我无法真正理解所有的行:实际上,这允许我在框内编写算法。现在,我有几个问题需要修改一些元素(我在互联网上查过了,但找不到任何东西):
- 如何为 定义的算法添加标签
\algo
?我想在讨论中引用它,并在论文开头创建一个算法列表。我不需要标题,因为算法的第一行已经说明了算法编号和标题,我只需要标签来在我的文档中引用它。 - 我如何才能居中
\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
前缀不是必需的,但像这样组织引用通常是一种很好的做法。