Multicols 不会破坏 algorithm2e 中的程序

Multicols 不会破坏 algorithm2e 中的程序

我在使用软件包时遇到了问题multicol。我试图将一个算法拆分成两列。具体来说,这个算法由两个程序组成。不幸的是,在这个特定情况下,一个程序肯定比另一个程序长。

我想知道是否有办法强制multicol均匀分割该算法,如果我可以根据具体情况选择均匀分割还是按功能分割,那就更好了。

我尝试过\columnbreak在中间使用,但是没有作用。

\documentclass[10pt,twoside]{report}

\usepackage[utf8]{inputenc}

\usepackage[a4paper,width=150mm,top=25mm,bottom=25mm,bindingoffset=6mm]{geometry}

\usepackage{fancyhdr}
\pagestyle{fancy}

\usepackage[numbers]{natbib}
\usepackage{color}

\usepackage{amsmath}
\usepackage{amsfonts}

\usepackage[ruled]{algorithm2e}
\usepackage{multicol}

\begin{document}

\begin{algorithm}
    \caption{My lovely procedure}
\begin{multicols}{2}
    \SetKwFunction{funone}{MyFunction}
    \SetKwFunction{funtwo}{OtherFun}

    \SetKwProg{main}{Algorithm}{}{}
    \main{\funone{b}}{
        \KwData{MyData b}
\nl     \While{this is true}{
\nl         Do X\;
\nl         Do X\;
        }
\nl     Do X\;
    }

    \setcounter{AlgoLine}{0}
    \SetKwProg{foo}{Procedure}{}{}
    \foo{\funtwo{h, s, d}}{
        \KwData{MyData h, s, d}
\nl     Do X\;
\nl     Do X\;
\nl     \If{Is his true?}{
\nl         \eIf{Is this true?}{
\nl             Do X\;
            }{
\nl             Do X\;
\nl             Do X\;
\nl             Do X\;
            }
        }
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
    }
\end{multicols}
\end{algorithm}

\end{document}

答案1

如果您确实想将其均匀地分开,您可以将其放入单列中,然后使用 adjustbox 包中的 \clipbox 将其切成两半。

剪裁

\documentclass[10pt,twoside]{report}

\usepackage[utf8]{inputenc}

\usepackage[a4paper,width=150mm,top=25mm,bottom=25mm,bindingoffset=6mm]{geometry}

\usepackage{fancyhdr}
\pagestyle{fancy}

\usepackage[numbers]{natbib}
\usepackage{color}

\usepackage{amsmath}
\usepackage{amsfonts}

\usepackage[ruled]{algorithm2e}
\usepackage{adjustbox}

\newsavebox{\tempbox}

\begin{document}

\savebox{\tempbox}{% create image
\begin{minipage}[c]{0.45\textwidth}%
\begin{algorithm*}[H]
    \SetKwFunction{funone}{MyFunction}
    \SetKwFunction{funtwo}{OtherFun}

    \SetKwProg{main}{Algorithm}{}{}
    \main{\funone{b}}{
        \KwData{MyData b}
\nl     \While{this is true}{
\nl         Do X\;
\nl         Do X\;
    }
\nl     Do X\;
    }
    \setcounter{AlgoLine}{0}
    \SetKwProg{foo}{Procedure}{}{}
    \foo{\funtwo{h, s, d}}{
        \KwData{MyData h, s, d}
\nl     Do X\;
\nl     Do X\;
\nl     \If{Is his true?}{
\nl         \eIf{Is this true?}{
\nl             Do X\;
            }{
\nl             Do X\;
\nl             Do X\;
\nl             Do X\;
            }
        }
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
\nl     Do X\;
    }
\end{algorithm*}%
\end{minipage}}

\begin{algorithm}
\caption{My lovely procedure}
\clipbox{0pt {\depth} 0pt {\baselineskip}}{\usebox{\tempbox}}\hfill
\raisebox{\depth}{\clipbox{0pt 1ex 0pt {\height}}{\usebox{\tempbox}}}
\end{algorithm}

\end{document}

相关内容