Wie fügt man Hyperlinks in die Markierungen von Endfloat ein?

Wie fügt man Hyperlinks in die Markierungen von Endfloat ein?

Die Dokumentation derEndfloatPaket erklärt, wie der Text in den Markierungen vom Standard „[Tabelle 3 ungefähr hier.]“ angepasst werden kann. Ich möchte die Markierungen jedoch anpassen, um einen Hyperlink zur Abbildung am Ende des Dokuments einzufügen. Wie kann dies erreicht werden?

Hier noch eine Unterfrage: Beim Anpassen des Markers \thepostfigurewird auf die Abbildungsnummer verwiesen. Gibt es einen ähnlichen Befehl, \thefigurereferenceder auf den Verweis auf die Abbildung verweist, sodass der Markertext etwa so lauten kann Figure \ref{\thefigurereference}} about here.?

Aktualisierung 2:In den Kommentaren habe ich auch nach einem Backlink gefragt, sodass die Bildunterschrift am Ende des Dokuments per Hyperlink auf den im Text eingebetteten Float „[Abbildung 1 ungefähr hier]“ verweist. Die akzeptierte Lösung von @John Kormylo bietet dies.

Update 1 [bearbeitet, um klarer zu machen, dass es sich auf die ursprüngliche Antwort von @John Kormylo bezieht, nicht auf seine überarbeitete]:

Die (ursprüngliche) Lösung von @John Kormylo funktioniert, ist aber, wie ich erfahren habe, mit dem Subcaption-Paket nicht kompatibel. Meine überarbeitete Frage lautet also: Gibt es eine Möglichkeit, Hyperlinks zu Abbildungen zu erstellen, die auch mit Bildunterschriften funktionieren?

Hier ist ein MWE, das seine Lösung verwendet, bei der die Hyperlinks nicht zu den Abbildungen am Ende führen. Abbildung 2 dient nur dazu, zu zeigen, warum ich eine Unterüberschrift benötige – die Verlinkung schlägt auch ohne sie fehl, solange das Paket „Unterüberschrift“ verwendet wird.

\documentclass{article}
\usepackage{endfloat}
\usepackage{mwe}
\usepackage{hyperref}
\usepackage{subcaption}

% John Kormylo's original solution, which works when the subcaption package isn't used:
\renewcommand{\floatplace}[1]{% #1 = float type (e.g. figure)
   \begin{center}
     \hyperlink{#1.\csname thepost#1\endcsname}%
       {[\csname #1name\endcsname~\csname thepost#1\endcsname\ about here.]}
   \end{center}}

\begin{document}

\begin{figure}
\includegraphics{example-image}
\caption{A figure without subfigures}
\end{figure}

\begin{figure}[htb]
\centering
\begin{subfigure}{.5\textwidth}
  \centering
    \includegraphics[width=.9\textwidth]{example-image}
  \caption{first part}
\end{subfigure}%
%
\begin{subfigure}{.5\textwidth}
  \centering
    \includegraphics[width=.9\textwidth]{example-image}
  \caption{(second part)}
\end{subfigure}%
\caption{A figure with subfigures}
\end{figure}

\lipsum[1-2]


\end{document}

Aus der auxerstellten Datei geht hervor, dass die Lösung nicht funktioniert hat, weil die Unterüberschrift die Namen der Zähler von usw. in usw. ändert figure.1. figure.2Sie figure.caption.2enthält figure.caption.3die folgenden Zeilen für die Tabellenliste (die funktionierende Hyperlinks zu den Abbildungen enthält):

\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces This is figure 1.\relax }}{3}{figure.caption.2}}
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces This is figure 2.\relax }}{4}{figure.caption.3}}

Eine Möglichkeit wäre, John Kormylos (ursprünglichen) Befehl neu zu schreiben, wobei die Nummerierung bei 2 beginnt und der Kopf in oder \floatplaceumbenannt wird . In einem anderen Dokument beginnt die Nummerierung in der AUX-Datei jedoch bei 18. (Ich habe jedoch noch nicht herausgefunden, wie ich dies in einem MWE reproduzieren kann.) Dies bedeutet, dass eine solche Problemumgehung nicht funktioniert.figure.captiontable.captionfigure.caption

Antwort1

Die \captionAufrufe , die einen benannten \refstepcounter{figure}erstellen . Leider hat nur Zugriff auf (eigentlich ). Wir müssen also eine Map von nach erstellen und diese über die aux-Datei an den Anfang des Dokuments verschieben. Um dies und den Backlink zu kombinieren, habe ich durch ersetzt .\hypertarget\@currentHref\floatplace\thefigure\thepostfigure\thefigure\@currentHref\caption\figurecaption

Um dem Original treu zu bleiben, \floatplacehabe ich es float-typunabhängig gemacht. Allerdings habe ich nur Code für \figurecaptionund hinzugefügt \newfigure.

\documentclass{article}
\usepackage{endfloat}
\usepackage{mwe}
\usepackage{subcaption}
\usepackage{hyperref}

\makeatletter
\renewcommand{\floatplace}[1]{% #1 = float type (e.g. figure)
   \begin{center}
     \def\floatnumber{\csname thepost#1\endcsname}
     \def\floatname{\csname #1name\endcsname}
     \hypertarget{figureback\floatnumber}{}%
     \@ifundefined{#1anchor\floatnumber}%
       {[\floatname~\floatnumber\ about here.]}%
       {\hyperlink{\csname #1anchor\floatnumber\endcsname}%
         {[\floatname~\floatnumber\ about here.]}}
   \end{center}}

\newcommand{\figurecaption}[2][\empty]% #1=short caption (optional), #2=caption
 {\ifx\empty#1\relax \caption[#2]{\hyperlink{figureback\thefigure}{#2}}%
  \else \caption[#1]{\hyperlink{figureback\thefigure}{#2}}%
  \fi
  \immediate\write\@auxout{\string\newfigure{\thefigure}{\@currentHref}}}
\makeatother

\newcommand{\newfigure}[2]% #1 = \thefigure, #2 = \@currentHref
  {\expandafter\gdef\csname figureanchor#1\endcsname{#2}}

\begin{document}

\begin{figure}
\includegraphics{example-image}
\figurecaption{A figure without subfigures}
\end{figure}

\begin{figure}[htb]
\centering
\begin{subfigure}{.5\textwidth}
  \centering
    \includegraphics[width=.9\textwidth]{example-image}
  \caption{first part}
\end{subfigure}%
%
\begin{subfigure}{.5\textwidth}
  \centering
    \includegraphics[width=.9\textwidth]{example-image}
  \caption{(second part)}
\end{subfigure}%
\figurecaption{A figure with subfigures}
\end{figure}

\lipsum[1-2]

\end{document}

Dies sollte funktionieren, unabhängig davon, welche seltsamen Namenskonventionen Subcaption vorgibt.

Antwort2

Ich musste dasselbe für Tabellen und Abbildungen tun und gleichzeitig einen Fehler im Glossarpaket unter Kontrolle halten. (Ich glaube, es könnte irgendwo eine eigene „tablecaption“-Funktion definiert haben.)
Hier ist sie:

\documentclass{scrartcl}
\usepackage{graphicx}
\usepackage{xcolor} %Farben
\usepackage{hyperref} %Links
\usepackage[nolists]{endfloat} % figures mit platzhalter und dann im Anhang
\renewcommand{\efloatseparator}{\mbox{}}
\usepackage{glossaries}
\usepackage{ifthen}

\usepackage{caption}
\usepackage{subcaption}
\usepackage{mwe}

\makeatletter
\renewcommand{\floatplace}[1]{% #1 = float type (e.g. figure)
    \begin{center}
        \def\floatnumber{\csname thepost#1\endcsname}
        \def\floatname{\csname #1name\endcsname}

        \ifthenelse{\equal{#1}{figure}}% define backlink based on figure or table
        {\def\backlink{figureback\floatnumber}}%
        {\def\backlink{tableback\floatnumber}}%

        \colorbox{yellow}{\floatname}
        \colorbox{red}{\backlink}

        \colorbox{orange}{\floatnumber}
        \colorbox{green}{\csname #1anchor\floatnumber\endcsname}

        \hypertarget{\backlink}{}
        \@ifundefined{#1anchor\floatnumber}%
        {[ \floatname~\floatnumber\ about here. ]}%
        {[ \hyperlink{\csname #1anchor\floatnumber\endcsname}%
            {\floatname~\floatnumber} about here. ]}
    \end{center}
}

%for figure
\newcommand{\figurecaption}[2][\empty]% #1=short caption (optional), #2=caption
{%
    \ifx\empty#1\relax %
        \caption[#2]{\hyperlink{figureback\thefigure}{#2}}%
    \else %
        \caption[#1]{\hyperlink{figureback\thefigure}{#2}}%
    \fi
    \immediate\write\@auxout{\string\newfigure{\thefigure}{\@currentHref}}%
}
\makeatother

\newcommand{\newfigure}[2]% #1 = \thefigure, #2 = \@currentHref
{\expandafter\gdef\csname figureanchor#1\endcsname{#2}}

\makeatletter
%for table
\newcommand{\tabcaption}[2][\empty]% #1=short caption (optional), #2=caption (tabcaption instead of tablecaption for glossaries)
{%
    \ifx\empty#1\relax %
        \caption[#2]{\hyperlink{tableback\thetable}{#2}}%
    \else %
        \caption[#1]{\hyperlink{tableback\thetable}{#2}}%
    \fi
    \immediate\write\@auxout{\string\newtable{\thetable}{\@currentHref}}%
}
\makeatother

\newcommand{\newtable}[2]% #1 = \thetable, #2 = \@currentHref
{\expandafter\gdef\csname tableanchor#1\endcsname{#2}}

\begin{document}
    \begin{table}
        \tabcaption{tab}
        \begin{tabular}{lcr}
            1 & 2 & 3 \\
        \end{tabular}
    \end{table}

    \begin{figure}
        \includegraphics{example-image}
        \figurecaption{A figure without subfigures}
    \end{figure}

    \begin{figure}[htb]
        \centering
        \begin{subfigure}{.5\textwidth}
            \centering
            \includegraphics[width=.9\textwidth]{example-image}
            \caption{first part}
        \end{subfigure}%
        %
        \begin{subfigure}{.5\textwidth}
            \centering
            \includegraphics[width=.9\textwidth]{example-image}
            \caption{(second part)}
        \end{subfigure}%
        \figurecaption{A figure with subfigures}
    \end{figure}

    \lipsum[1-2]
\end{document}

verwandte Informationen