两列 Algorithmicx,列宽可变

两列 Algorithmicx,列宽可变

另一篇帖子multicol,@Jubobs 建议在环境周围使用包algorithmic,将算法排版为两列。

最近,我遇到了一个与美观相关的问题:可能一列中有一条长线,而另一列中的所有线都很短。例如:

An algorithm with a long line

以下是上图的代码:

\documentclass[twocolumn]{article}
\usepackage[width=11cm]{geometry}   % page width is reduced to show the effect
\usepackage{multicol}
\usepackage{algorithm}
\usepackage{algpseudocode}

\begin{document}
\begin{algorithm*}[t]
    \caption{An algorithm with a long line.}
    \label{alg1}
    \begin{multicols}{2}
        \begin{algorithmic}[1]
            \If{$(x = y^2+1$ and $z=x^3+4y -12)$ }
                \State $a \gets b + c$
            \EndIf

            \columnbreak

            \State $x \gets 0$
        \end{algorithmic}
    \end{multicols}
\end{algorithm*}

\end{document} 

是否可以将Algorithmicx环境排版为两列,但宽度不等?我尝试vwcol这个帖子,但我无法让它适用于我的情况。

答案1

这会是您想要的吗?建议的解决方案使用varwidth包。由于algorithmic环境包装在内varwidthalgostore并且algorestore用于继续编号。

注意xx\linewidth可以用来改变varwidth

enter image description here

代码:

\documentclass[twocolumn]{article}
\usepackage[width=11cm]{geometry}   % page width is reduced to show the effect
\usepackage{varwidth}
\usepackage{algorithm}
\usepackage{algpseudocode}

\begin{document}
%
\begin{algorithm*}[t]
    \caption{An algorithm with a long line.}
    \label{alg1}
    \begin{varwidth}[t]{0.45\textwidth}        % change 0.45 to suit your need
       \begin{algorithmic}[1]
            \If{$(x = y^2+1$ and $z=x^3+4y -12)$ }
                \State $a \gets b + c$
            \EndIf
           \algstore{myalg}
        \end{algorithmic}
    \end{varwidth}\quad\quad\quad              % the gap between columns
 \begin{varwidth}[t]{0.4\textwidth}            % change 0.4 to suit your need
  \begin{algorithmic}[1]
             \algrestore{myalg}
             \State $x \gets 0$
  \end{algorithmic}
  \end{varwidth}
\end{algorithm*}

\end{document} 

相关内容