3

I'm using \documentclass{tufte-book} and trying to get a full-width algorithm environment (specifically, using algorithm2e).

Minimum working example:

\documentclass{tufte-book}

\title{Full-width algorithm2e algorithms}

\usepackage{lipsum} % for dummy text only

\usepackage[lined, ruled]{algorithm2e}

\begin{document}

\lipsum[2]

\begin{algorithm}[H]
    \tcp{Main loop}
    \While{not converged}{
        $a = a + 1$ \;
    }
    \caption{A text-width algorithm}
\end{algorithm}

\lipsum[2]

\marginnote[10pt]{This algorithm should be full-width, but isn't}
\begin{fullwidth}
\begin{algorithm}[H]
    \tcp{Main loop}
    \While{not converged}{
        $a = a + 1$ \;
    }
    \caption{A full-width algorithm}
\end{algorithm}
\end{fullwidth}

\lipsum[2]

\end{document}

Which renders:

Screenshot of rendered output from minimum working example

In the algorithm2e.sty source-code, I found the dimension algowidth defined about half way through the document.

%[snip]
\newdimen\algowidth%
%[snip]

So I've tried adjusting this length using \setlength{\algowidth}{XXX} in my example, but it doesn't seem to have any effect.

  • How can I achieve full-width algorithm2e algorithm blocks with tufte-latex?
  • Bonus marks if algorithm* can be adjusted to be full-width by default.
  • Extra bonus marks if the algorithm caption can also be moved to hang in the margin, as is the style with tufte-latex full width figures and tables.

Possibly related questions that don't seem to answer this:

2 Answers 2

3

This might not be the most ideal solution since you loose the floating behaviour of the algorithmby enclosing it in a minipage, but you nevertheless already deactivated the float mechanism by adding [H]...

enter image description here

\documentclass{tufte-book}

\title{Full-width algorithm2e algorithms}

\usepackage{lipsum} % for dummy text only

\usepackage[lined, ruled]{algorithm2e}

\newenvironment{widealgorithm}{\begin{fullwidth}
\begin{minipage}{\linewidth}
\begin{algorithm}[H]}{\end{algorithm}
\end{minipage}
\end{fullwidth}}

\begin{document}

\lipsum[2]

\begin{algorithm}[H]
    \tcp{Main loop}
    \While{not converged}{
        $a = a + 1$ \;
    }
    \caption{A text-width algorithm}
\end{algorithm}

\lipsum[2]


\begin{fullwidth}
\begin{minipage}{\linewidth}
\begin{algorithm}[H]
    \tcp{Main loop}
    \While{not converged}{
        $a = a + 1$ \;
    }
    \caption{A full-width algorithm}
\end{algorithm}
\end{minipage}
\end{fullwidth}

\lipsum[2]

\begin{widealgorithm}
    \tcp{Main loop}
    \While{not converged}{
        $a = a + 1$ \;
    }
    \caption{A full-width algorithm}
\end{widealgorithm}


\end{document}
1
  • Works for me! Thank you! Commented Jul 17, 2020 at 9:04
0

To solve this issue also for floating algorithms (I had one that was also a whole page) you can define a new float and put the minipage into that float. This is a variation of this answer. If I interpret this correctly, this should require the float package, which tufte-latex loads for you.

% Reusing the preamble of leandriis' excellent answer
\documentclass{tufte-book}
\title{Floaty Full-width algorithm2e algorithms}
\usepackage{lipsum} % for dummy text only
\usepackage[lined, ruled]{algorithm2e}

% Define a new float with name myalgo
% Default placement tbp and a file extension mya (for temp files)
% Cf. https://ctan.mc1.root.project-creative.net/macros/latex/contrib/float/float.pdf
\newfloat{myalgo}{tbp}{mya}

% create a new environment called floatyalgorithm with one parameter (our algorithm code)
% Using this creates a new float through the myalgo float we defined above,
% which is filled with a minipage of full page width.
% The width is defined as the sum of a line, the margin and the sapce in between (since the fullwidth environment cannot help us here).
% For the variables names cf. https://www.overleaf.com/learn/latex/page_size_and_margins
% As in leandriis' answer, use [H] for the algorithm to fill the space.
\newenvironment{floatyalgorithm}[1][tbp]%
{\begin{myalgo}[#1]
\begin{minipage}{\linewidth+\marginparsep+\marginparwidth}
\begin{algorithm}[H]}%
{\end{algorithm}
\end{minipage}
\end{myalgo}
}


\begin{document}

\begin{floatyalgorithm}[tbp]
  $m := m'$;
  \caption{\lipsum[2]}
\end{floatyalgorithm}    

\end{document}

I have not extensively tested this. For my use case it worked nicely, but there might be some unwanted interactions with full pages and the content of the margin.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .