如何在LaTeX中实现几个阶段的伪代码?

时间:2015-12-17 10:28:31

标签: latex

我有以下问题......我有一个我想在LaTeX中实现的伪代码 我认为算法和算法包给出了相当不错的结果,所以我尝试了这个(从手册中复制)

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

\begin{document}
\begin{algorithm}                      % enter the algorithm environment
\caption{Calculate $y = x^n$}          % give the algorithm a caption
\label{alg1}                           % and a label for \ref{} commands later in the document
\begin{algorithmic}                    % enter the algorithmic environment
    \REQUIRE $n \geq 0 \vee x \neq 0$
    \ENSURE $y = x^n$
    \STATE $y \Leftarrow 1$
    \IF{$n < 0$}
        \STATE $X \Leftarrow 1 / x$
        \STATE $N \Leftarrow -n$
    \ELSE
        \STATE $X \Leftarrow x$
        \STATE $N \Leftarrow n$
    \ENDIF
\end{algorithmic}
\end{algorithm}
\end{document}

结果看起来对我很好,看到这个: http://docdro.id/BXSUaWk

但是我想在几个阶段中使用伪代码,所以看起来应该更像:how it should look like

所以我不想在开始时编写算法,但我可以设置一些文字(在我的情况下&#39; Teil&#39;)我希望有几个阶段由一个黑色分开线...

当然它看起来也有点不同,当然根本不需要使用我现在使用的那些包......

那么有人可以帮助我吗?也许是因为他做过这样的事情或类似的东西?

我会很高兴...谢谢!! :)

1 个答案:

答案 0 :(得分:2)

这个问题可能更适合tex.stackexchange,但无论如何,这里都有。

我们将algpseudocode环境algorithmic的修复程序基于以下主题(特别是Werner的回答)

我们可以从上面的线程调整phase命令(它实际上只是(有点高级)\Statex命令的集合 - 后者是algorithmic环境{{ 1}}命令没有行号=没有缩进)并创建以下示例供您使用:

\State

结果如下:

enter image description here

您可以通过查看和调整新命令\documentclass{article} \usepackage{algorithm,algpseudocode,amsmath} \usepackage{caption} \captionsetup[algorithm]{labelformat=empty} % remove default caption \makeatletter \newcounter{phase}[algorithm] \newlength{\phaserulewidth} \newcommand{\phaseTitle}{Teil} % <-- Enter default "phase name" here \newcommand{\setphaserulewidth}{\setlength{\phaserulewidth}} %% Top phase item \newcommand{\topPhase}[1]{% \vspace{2.0ex} % Top phase rule = default algorithm rule, leave out for top item \Statex\strut\refstepcounter{phase}\item[\textbf{\phaseTitle~\thephase:~}\textit{~#1}] % phase "caption" % Bottom phase rule \vspace{-3.0ex}\Statex\leavevmode\llap{\rule{\dimexpr\labelwidth+\labelsep}{\phaserulewidth}}\rule{\linewidth}{\phaserulewidth}} %% Rest phase items \newcommand{\phase}[1]{% \vspace{-1.25ex} % Top phase rule \Statex\leavevmode\llap{\rule{\dimexpr\labelwidth+\labelsep}{\phaserulewidth}}\rule{\linewidth}{\phaserulewidth} \Statex\strut\refstepcounter{phase}\item[\textbf{\phaseTitle~\thephase:~}\textit{~#1}] % phase "caption" % Bottom phase rule \vspace{-1.25ex}\Statex\leavevmode\llap{\rule{\dimexpr\labelwidth+\labelsep}{\phaserulewidth}}\rule{\linewidth}{\phaserulewidth}} \makeatother \setphaserulewidth{.7pt} \begin{document} \begin{algorithm} \begin{algorithmic}[0] % Top phase \topPhase{Calculate $y = x^n$} \Require{$n \geq 0 \vee x \neq 0$} \Ensure{$y = x^n$} \State{$y \Leftarrow 1$} \If{$n < 0$} \State{$X \Leftarrow 1 / x$} \State{$N \Leftarrow -n$} \Else \State{$X \Leftarrow x$} \State{$N \Leftarrow n$} \EndIf % next phase \phase{Calculate $z = x^n$} \Require{$n \geq 0 \vee x \neq 0$} \Ensure{$y = x^n$} \State{$y \Leftarrow 1$} \State{$\dots$} \end{algorithmic} \end{algorithm} \end{document} \topPhase的定义来进一步自定义。