标题中显示的表格/图形的使用

标题中显示的表格/图形的使用

有没有办法在 LaTeX 中的参考文献/表格的标题中添加表格/参考文献的使用情况?

例如:

\begin{table}
    \begin{tabular}{ll}
    \textbf{Name} & \textbf{Description} \\
        Foo & bar \\
        Foo & bar
    \end{tabular}
    \caption{Nice Table. Used on pages [2,3,4].}
    \label{tab:table}
\end{table}

我希望“用于第 [2,3,4] 页。”能够自动出现并链接到正确的参考,链接到文档中使用的所有位置\ref{tab:table}

有谁知道可以解决这个问题的软件包吗?

答案1

我想提供两种解决方案。第一种无需使用包即可工作hyperref。第二种解决方案支持超链接。

\documentclass{article}
\usepackage{etoolbox,xstring,xspace}
\makeatletter
\let\origref\ref
\renewcommand*\ref[1]{%
  \origref{#1}\xlabel{#1}}
\def\xlabel#1{%
   \ifcsdef{siteref@doc@#1}{}{\csgdef{siteref@doc@#1}{,}}%
    \@bsphack%
       \csxdef{siteref@doc@#1}{\csuse{siteref@doc@#1},\thepage}%
         \protected@write\@auxout{}%
        {\string\SiteRef{siteref@#1}{\csuse{siteref@doc@#1}}}%
     \@esphack%
}

\newrobustcmd*\SiteRef[2]{\csgdef{#1}{#2}}

\newrobustcmd*\xref[1]{%
\ifcsundef{siteref@#1}{%
     \@latex@warning@no@line{Label `#1' not defined}
     }{%
       [\StrGobbleLeft{\csuse{siteref@#1}}{2}]\xspace%
   }%
}
\makeatother
\usepackage{lipsum}
\begin{document}
\ref{tab:table}
\lipsum[1]
\begin{table}[!ht]
    \begin{tabular}{ll}
    \textbf{Name} & \textbf{Description} \\
        Foo & bar \\
        Foo & bar
    \end{tabular}
    \caption{Nice Table. Used on pages \xref{tab:table}.}
    \label{tab:table}
\end{table}

\lipsum
\ref{tab:table}
\end{document}

修改以配合使用hyperref

\documentclass{article}
\usepackage{etoolbox,xstring,xspace}
\usepackage[colorlinks=true]{hyperref}
\makeatletter

\AtBeginDocument{%
\let\origref\ref
\renewcommand*\ref[1]{%
  \origref{#1}\xlabel{#1}}
}
\newrobustcmd*\xlabel[1]{%
   \ifcsdef{siteref@doc@#1}{}{\csgdef{siteref@doc@#1}{,}}%
    \@bsphack%
    \begingroup
       \csxdef{siteref@doc@#1}{\csuse{siteref@doc@#1},\thepage}%
         \protected@write\@auxout{}%
        {\string\SiteRef{siteref@#1}{\csuse{siteref@doc@#1}}}%
     \endgroup
     \@esphack%
}

\newrobustcmd*\SiteRef[2]{\csgdef{#1}{#2}}

\newrobustcmd*\xref[1]{%
\ifcsundef{siteref@#1}{%
     \@latex@warning@no@line{Label `#1' not defined}
     }{%
    \begingroup
      \StrGobbleLeft{\csuse{siteref@#1}}{2}[\@tempa]\relax%
      \def\@tempb{}%
      \@tempcnta=0\relax%
      \@tempcntb=\@ne\relax%
      \def\do##1{\advance\@tempcnta\@ne}%
      \expandafter\docsvlist\expandafter{\@tempa}%
       \def\do##1{%
         \ifnum\@tempcntb=\@tempcnta\relax%
            \hyperpage{##1}%
         \else
            \hyperpage{##1},%
          \fi%
          \advance\@tempcntb\@ne
       }%
       [\expandafter\docsvlist\expandafter{\@tempa}]\xspace%
    \endgroup
   }%
}
\makeatother

\usepackage{lipsum}
\begin{document}
\ref{tab:table}
\lipsum[1]
\begin{table}[!ht]
    \begin{tabular}{ll}
    \textbf{Name} & \textbf{Description} \\
        Foo & bar \\
        Foo & bar
    \end{tabular}
    \caption{Nice Table. Used on pages \xref{tab:table}.}
    \label{tab:table}
\end{table}

\lipsum
\ref{tab:table}
\end{document}

该包也crossreference定义了命令\xref。因此,如果您加载该包,则必须重命名该命令\xref

答案2

您可以通过在使用表格的地方放置标签并添加来获取页码\pageref{..},但\pageref它很“脆弱”,因此必须在前面加上\protect,例如,

Table \ref{tab:table}\label{tabuse:table} used here...

然后在标题中:

\caption{Nice Table. Used on page \protect\pageref{tabuse:table}.}

对于文章来说,一个肮脏的伎俩就是输入一个空的目录行:

\caption[]{Nice Table. Used on page \pageref{tabuse:table}.}

相关内容