类似目录的字幕前向存储

类似目录的字幕前向存储

各位专家:如何写出表格标题以供以后使用?想想

\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}

我几乎肯定想写入文件.aux,但我的业余尝试陷入了扩展地狱。事实上,对于这种特殊情况可能有一个更简单的解决方案:我认为文件已经使用when.aux保存了字幕(什么时候不是?),但我需要从 aux-written 中挑选出第三个带括号的表达式。与其进一步猜测,我希望这是一个足够常见的问题,它很容易并且成为一个好的 sx 答案......\newlabelhyperref\newlabel

感谢帮助。/iaw

答案1

这是一个“肮脏”的伎俩:\newlabel明确地向.aux文件写入一个新标签的前缀,然后stored::使用\nameref*fromhyperref来获取标签内容。

{}{}和参数{}在这里可以为空,因为它们对于这种方法并不重要。

但是,扩展会是个问题。如果标题内容本身包含的命令非常简单,则\unexpanded{}应该使用。更好的解决方案取决于确切的要求。

\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}

在此处输入图片描述

相关内容