Search code examples
latex

Label not working inside a \newcommand with a custom Float in LaTeX


I declared a new environment containing a \caption and a \label so I can make references to it.

In my header:

\DeclareFloatingEnvironment[name=Tableau]{tableau}
\newenvironment{ptab}{\captionsetup{type=tableau}}{}

In my .tex document:

\begin{ptab}
    \caption{A caption for my table}
    \label{ptab:myTab}
\end{ptab}

Some text with a reference (Tableau~\ref{ptab:myTab}) % Works fine !

The problem: I want to gain some time by declaring a \newcommand that could write this for me. But the references in text are not working anymore !

Added in my header:

\newcommand{\tabref}[2]{%
    \begin{ptab} 
        \label{#1} 
        \caption{#2} 
    \end{ptab}}

In the .tex document:

\tabref{ptab:myTab}{A caption for my table}

Some text with a reference (Tableau~\ref{ptab:myTab}) % Not working "(Tableau ??)"

I an aware a similar question has already been asked before but it was not concerning new environment. How to reference a label within a newcommand in LATEX?


Solution

  • I found out that the order of \label{} and \caption{} was inverted. It is important since LaTeX needs to create a caption before it can be referenced with a label. Working code :

    \newcommand{\tabref}[2]{%
        \begin{ptab}
            \caption{#2} 
            \label{#1}  
        \end{ptab}}
    
    \tabref{ptab:myTab}{A caption for my table}
    
    Some text with a reference (Tableau~\ref{ptab:myTab}) % Now working !