Definieren Sie die Befehle \label und \ref neu, sodass sie auch funktionieren, wenn sie nicht neben einer \caption oder \captionof stehen müssen.

Definieren Sie die Befehle \label und \ref neu, sodass sie auch funktionieren, wenn sie nicht neben einer \caption oder \captionof stehen müssen.

Ich habe versucht \label, und \refeither nach einem \captionnor zu verwenden \captionof, etwa so:

Figure \Roman{chapter}.\arabic{figure}: The caption % A manually created caption
\label{fig:the_ref_name} % the ref that sould ref the \Roman{chapter}.\arabic{figure} number

Gibt es eine Möglichkeit, dieses Befehlspaar zu verwenden, ohne dass es nach \captionoder stehen muss \captionof, ohne dass ich jedoch weiterhin auf Gleichungen, Abbildungen, Tabellen und all die Dinge verweisen kann, die ich normalerweise verwenden würde?

Antwort1

Der \labelBefehl speichert einen Wert für das Label basierend auf dem internen Makro \@currentlabel. Dieses Makro wird von Befehlen wie \sectionund Umgebungen wie gesetzt. Sie können es jedoch auch selbst setzen, und dann übernimmt \begin{figure}der nächste Befehl den von Ihnen angegebenen Wert.\label

Denn \@currentlabeles handelt sich um ein internes Makro, das das @Symbol enthält, das Sie benötigen \makeatletter, und \makeatotherum den Code, in dem Sie das Makro verwenden. Das folgende MWE weist dem Makro mithilfe von \edef(erweiterter Definition) einen Wert zu, wodurch sichergestellt wird, dass die Zähler durch die tatsächlichen Werte dargestellt werden.

\documentclass{report}
\begin{document}
\chapter{My chapter}
\setcounter{figure}{8} % set the figure counter to some number for illustration purposes
Figure \Roman{chapter}.\arabic{figure}: The caption % A manually created caption
\makeatletter\edef\@currentlabel{\Roman{chapter}.\arabic{figure}}\makeatother% set value for use by \label
\label{fig:the_ref_name} % assign the label
\section{New section}
As we have seen in Figure \ref{fig:the_ref_name}, figures can have captions.
\end{document}

Ergebnis (nach zweimaligem Kompilieren zum Schreiben des Labels in die Hilfsdatei und zum Wiedereinlesen):

Bildbeschreibung hier eingeben

Der obige Code soll das Prinzip des Setzens des internen Label-Werts und der anschließenden Zuweisung dieses Werts zu einem Label wie veranschaulichen fig:the_ref_name. Dies ist jedoch natürlich nicht sehr praktisch. Sie können ein kleines Makro schreiben, um die Überschrift zu generieren und gleichzeitig den Label-Wert zu setzen:

\documentclass{report}
\makeatletter
\newcommand{\customfigcaption}[1]{%
Figure \Roman{chapter}.\arabic{figure}: #1%
\edef\@currentlabel{\Roman{chapter}.\arabic{figure}}%
}
\makeatother

\begin{document}
\chapter{My chapter}
\setcounter{figure}{8}
\customfigcaption{The caption}
\label{fig:the_ref_name} % assign the label
\section{New section}
As we have seen in Figure \ref{fig:the_ref_name}, figures can have captions.
\end{document}

Die Ausgabe ist die gleiche wie oben.

Eine letzte Ergänzung besteht in der Hinzufügung eines Phantomabschnitts, der die Referenzierung des Etiketts ermöglicht durch hyperref:

\documentclass{report}
\usepackage{hyperref}
\makeatletter
\newcommand{\customfigcaption}[1]{%
Figure \Roman{chapter}.\arabic{figure}: #1%
\csname phantomsection\endcsname%
\edef\@currentlabel{\Roman{chapter}.\arabic{figure}}%
}
\makeatother

\begin{document}
\chapter{My chapter}
\setcounter{figure}{5}
\customfigcaption{The caption}
\label{fig:the_ref_name} % assign the label
\section{New section}
As we have seen in Figure \ref{fig:the_ref_name}, figures can have captions.
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen