我在使用软件包时遇到了问题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}