TikZ 中的浮动算法2e

TikZ 中的浮动算法2e

我曾有一个algorithm2e 中划掉一行的问题。我得到了一个使用 tikz 删除线条的答案。这很好用。但是,如果我使用浮动 algorithm2e(即删除 in [H]\begin{algorithm},那么删除线的位置就会不正确。

可以通过将 tikz 代码移到算法块内来解决该问题,但这会引入一条额外的行。我该如何隐藏这条额外的行?下面是代码和我需要的图片。

\documentclass{article}

\usepackage[linesnumbered,ruled,vlined]{algorithm2e}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\begin{document}

\begin{algorithm}
\label{alg:my-alg}
\DontPrintSemicolon
\caption{My algorithm}
\SetKwInOut{Input}{Input}\SetKwInOut{Output}{Output}
\Input{$a,b,...$}
\Output{$R$}
statment1\; 
statment2\;
statment3\;
\tikzmark{start}\lIf{$a>b$}{\KwRet{$a$\tikzmark{stop}}}
\KwRet{$b$}\;

\begin{tikzpicture}[remember picture, overlay]
\draw[red,thick] ([yshift=0.5ex]pic cs:start) -- ([yshift=0.5ex]pic cs:stop);
\end{tikzpicture}

\end{algorithm}

\end{document}

在此处输入图片描述

答案1

只需将overlay图片向上移动即可。由于它是叠加的,因此只要不在同一页,发布到哪里都无所谓。

\documentclass{article}

\usepackage[linesnumbered,ruled,vlined]{algorithm2e}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\begin{document}

\begin{algorithm}
\label{alg:my-alg}
\DontPrintSemicolon
\caption{My algorithm}
\SetKwInOut{Input}{Input}\SetKwInOut{Output}{Output}
\Input{$a,b,...$}
\Output{$R$}
statment1\; 
statment2\;
statment3\;
\tikzmark{start}\lIf{$a>b$}{\KwRet{$a$\tikzmark{stop}}}\;
\KwRet{$b$}
\begin{tikzpicture}[remember picture, overlay]
\draw[red,thick] ([yshift=0.5ex]pic cs:start) -- ([yshift=0.5ex]pic cs:stop);
\end{tikzpicture}%
\end{algorithm}

\end{document}

在此处输入图片描述

相关内容