I'm trying to redefine an existing environment subfigure defined by the subcaption package. To do this, I'm using xparse's DeclareDocumentEnvironment since that's suppose to declare a new environment no matter if it already exists or not. But for some reason I still get a compilation warning that the \subfigure command already exists.

Here's a MWE:



  % Do nothing

  \begin{subfigure}{The caption}
    The figure

Why doesn't this work as intended?

A workaround is of course to simply use another name for my custom environment, but I'm curious why this doesn't work as I want it to.

  • The error comes from subcaption that wants to define subfigure when \AtBeginDocument.
    – egreg
    Commented Jun 24, 2015 at 12:41

1 Answer 1


The subcaption package delays the definition of subfigure and subtable when executing the \AtBeginDocument hook. So the error is because \newenvironment{subfigure} wants to define an already existing environment. Indeed, you get exactly the same error if you use \NewDocumentEnvironment.

If you do

    % Do nothing

you get no error.

  • Hm. Any idea why subcaption does that? Why not define the environments directly as subcaption.sty is being read?
    – gablin
    Commented Jun 24, 2015 at 12:58
  • Interestingly, subcaption.sty doesn't define a subfigure environment – at least none that I can see… Commented Jun 24, 2015 at 13:09
  • @gablin The package wants to make several checks, so it must ensure as hard as it can that all packages are already loaded when it does them.
    – egreg
    Commented Jun 24, 2015 at 13:24
  • @SeanAllred Yes, it does \newenvironment{sub#1}{...}{...} for #1 equal to the already defined and registered float types.
    – egreg
    Commented Jun 24, 2015 at 13:25
  • I saw that and thought the same, but I couldn't for the life of me find the origin of that. Usings emacs' up-list function stopped well before I saw any indication of a macro definition. Am I making any sense? Edit: Unless that's what \caption@For does, akin to expl3's map-inline functions? Commented Jun 24, 2015 at 13:54

You must log in to answer this question.

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