36

I'm currently working on a document where I was using algorithm+algorithmic along with cleveref. With this everything worked perfectly.

Now I had to replace algorithm+algorithmic with algorithm2e. Ever since, I cannot \cref to the label in the algorithm environment. More explicitly, I can refer but \cref doesn't generate a text in front of the number (which is correct) of the algorithm.

I couldn't find any reference to algorithm's packages in the cleveref documentation. Any ideas?

Dror
  • 22,613
  • In addition to the fix in my answer, I suggest you contact the author of cleveref. He is very responsive to user requests, and will likely add support for algorithm2e if you explain to him what is needed. – Lev Bishop Jan 28 '11 at 16:07
  • 3
    For the record, Cleveref versions since 0.17.9 (released in 2011) support algorithm2e "out-of-the-box". – Toby Cubitt Jun 13 '17 at 17:17
  • 1
    @Dror could you review the accepted answer? I think fixing the load order will be the superior solution in most cases. – dreua Mar 11 '21 at 15:29

2 Answers2

35

You only need to load algorithm2e before cleveref.

xuhdev
  • 1,083
  • 6
    I think this is the most correct answer – Yauhen Yakimenka Jun 28 '18 at 11:54
  • 2
    This should be the accepted solution, in my opinion. – user2316602 Aug 04 '20 at 11:48
  • 1
    still, functions don't work. and remaming algorithm into function doesn't work. – caveman Jan 11 '21 at 21:00
  • @caveman This seems to properly answer the question for most people. If you want something else I suggest you ask another question. – dreua Mar 11 '21 at 15:32
  • @xuhdev How did you came up with this solution? Is this something a user just has to know or could one of those packages be modified to warn the user about the wrong load order? (I recently had a package that nicely warned me that I need to load package X before package Y.) – dreua Mar 11 '21 at 15:34
  • 1
    @dreua - cleveref should almost always be loaded last. – Mico Mar 11 '21 at 15:49
32

You need to tell cleveref how you want to refer to the algorithms. Something like:

\crefname{algocf}{alg.}{algs.}
\Crefname{algocf}{Algorithm}{Algorithms}
Lev Bishop
  • 45,462
  • This solved my problem. But I have another question. How did you know to choose for the type algocf? Where is it documented? Thanks a lot in any case! – Dror Jan 28 '11 at 07:48
  • 4
    From the log-file, without the above commands: LaTeX Warning: cref reference format for label typealgocf' undefined on input line 27.` – Lev Bishop Jan 28 '11 at 14:36