算法2e:框架环境转移行号

算法2e:框架环境转移行号

我想在我的算法中有一个框,为此我使用了framed环境。但是,它也会移动行号:

\documentclass{article}
\usepackage[vlined,ruled,linesnumbered]{algorithm2e}
\usepackage{framed}

\begin{document}
\begin{algorithm}
    aaa
    \begin{framed}
    bbb
    \end{framed}
\end{algorithm}
\end{document}

在此处输入图片描述

如何垂直对齐行号?\Indm移动代码,而不是行号。\DecMargin不适用于单个行。framed如果您可以推荐一个,我不介意使用另一个包/环境:我唯一的要求是在代码块周围有一个框。如果需要,我不介意对缩进进行硬编码。

答案1

该包algorithm2e使用\llap将行号放在宽度为零的框中,数字加上算法中的空格,突出于此框的左侧。此代码补丁在左侧添加了更多空间。

A

\documentclass{article}
\usepackage[vlined,ruled,linesnumbered]{algorithm2e}
\usepackage{framed}


%*****************************************% added <<<<<<<<<<<<
\usepackage{etoolbox}

\newlength{\nummargin} % move line numbers to the margin
\setlength{\nummargin}{2ex}

\makeatletter
\patchcmd{\algocf@printnl}{\kern\skiplinenumber}{\kern\dimexpr\skiplinenumber +\nummargin+1ex }{}{}
\makeatother
%*****************************************

\begin{document}    

\begin{algorithm}
    aaa
    {\parindent-\nummargin\begin{framed}% changed <<<<
            bbb 
                
            ccc
    \end{framed}}
    ddd
\end{algorithm}

\end{document}

与以下一起使用algorithm2e.sty 2017/07/18 v5.2

更新后续问题之后

该命令\patchcmd(包etoolbox)允许改变宏命令的一部分。

\patchcmd{<command to patch>}{<code to be replaced>}{<new code>}{<message if success>}{<message if failure>}

\algocf@printnl( 的第 1644 行algorithm2e.sty)生成行号。本例中使用的补丁通过更改 来在行号和文本之间添加更多空格\kern\kern是用于插入不可中断空格的 TeX 基元。

相关内容