
Ich habe versucht \label
, und \ref
either nach einem \caption
nor 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 \caption
oder 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 \label
Befehl speichert einen Wert für das Label basierend auf dem internen Makro \@currentlabel
. Dieses Makro wird von Befehlen wie \section
und 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 \@currentlabel
es handelt sich um ein internes Makro, das das @
Symbol enthält, das Sie benötigen \makeatletter
, und \makeatother
um 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):
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}