我想在我的算法中有一个框,为此我使用了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
将行号放在宽度为零的框中,数字加上算法中的空格,突出于此框的左侧。此代码补丁在左侧添加了更多空间。
\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 基元。