Inhaltsverzeichnisähnlicher Vorwärtsspeicher für Untertitel

Inhaltsverzeichnisähnlicher Vorwärtsspeicher für Untertitel

Liebe Experten: Wie schreibt man die Tabellenüberschriften für die spätere Verwendung? Denken Sie

\documentclass{article}

\newcommand{\mycaption}[2]{\caption{#2}\label{#1}\savecaptioncontent{#1}{#2}}
\newcommand{\insertmytable}[1]{
  \begin{center}
   Insert Table~\ref{#1} here: '\contentcaption{#1}'
  \end{center}
}

\begin{document}

blah blah.  Table~\ref{tbl:first} tells me little.

\insertmytable{tbl:first}

above, it should have printed:

\begin{center}
   Insert Table~\ref{tbl:first} here: 'This is my first table'
\end{center}

\begin{table}
\mycaption{tbl:first}{This is my first table}
\end{table}

\end{document}

Ich möchte mit ziemlicher Sicherheit in die .auxDatei schreiben, aber meine amateurhaften Versuche stecken in der Erweiterungshölle fest. Tatsächlich könnte es für diesen Sonderfall eine noch einfachere Lösung geben: Ich glaube, die .auxDatei speichert bereits Untertitel mit einem „ \newlabelwhen hyperrefis used“ (wann nicht?), aber ich müsste den dritten eingeklammerten Ausdruck aus dem „aux-written“ herausnehmen \newlabel. Anstatt weiter zu raten, hoffe ich, dass dies ein so häufiges Problem ist, dass es einfach ist und eine gute sx-Antwort ergibt …

Hilfe ist willkommen. /iaw

Antwort1

Dies ist ein „schmutziger“ Trick: Schreiben Sie \newlabelexplizit in die .auxDatei mit einem Präfix für ein neues Etikett stored::und verwenden Sie beispielsweise \nameref*„from“ hyperref, um den Etiketteninhalt abzurufen.

Die Argumente {}{}und {}können hier leer bleiben, da sie für diesen Ansatz nicht wichtig sind.

Die Erweiterung wird jedoch ein Problem sein. Wenn der Untertitelinhalt selbst recht einfache Befehle enthält, \unexpanded{}sollten diese verwendet werden. Eine bessere Lösung hängt von den genauen Anforderungen ab.

\documentclass{article}
\usepackage{caption}

\usepackage{hyperref}


\makeatletter
\newcommand{\savecaptioncontent}[2]{%
  \immediate\write\@auxout{%
    \string\newlabel{stored::#1}{{}{}{\unexpanded{#2}}{}}%
  }
}
\newcommand{\contentcaption}[1]{%
  \nameref*{stored::#1}%
}
\makeatother

\newcommand{\mycaption}[2]{\caption{#2}\label{#1}\savecaptioncontent{#1}{#2}}
\newcommand{\insertmytable}[1]{
  \begin{center}
   Insert Table~\ref{#1} here: '\contentcaption{#1}'
 \end{center}
}

\begin{document}

blah blah.  Table~\ref{tbl:first} tells me little.

But now:
\insertmytable{tbl:first}

above, it should have printed:

\begin{center}
   Insert Table~\ref{tbl:first} here: 'This is my first table'
\end{center}

\begin{table}
\mycaption{tbl:first}{This is my first table}
\end{table}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen