
Уважаемые эксперты: как написать подписи к таблицам для дальнейшего использования? Подумайте
\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
файл, но мои любительские попытки застряли в аду расширения. На самом деле, для этого особого случая может быть даже более простое решение: я думаю, что файл .aux
уже сохраняет подписи с использованием \newlabel
when hyperref
(когда его нет?), но мне нужно будет вытащить третье выражение в скобках из aux-written \newlabel
. Вместо того, чтобы гадать дальше, я надеюсь, что это достаточно распространенная проблема, которая проста и станет хорошим ответом sx...
помощь признательна. /iaw
решение1
Это «грязный» трюк: \newlabel
явно запишите в .aux
файл префикс для новой метки, скажем, stored::
и используйте \nameref*
from hyperref
, чтобы получить содержимое метки.
Аргументы {}{}
и {}
здесь могут быть пустыми, поскольку они не важны для данного подхода.
Однако расширение будет проблемой. Если само содержимое заголовка содержит команды, которые довольно просты, \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}