对具有超链接支持的同一脚注的多次引用 - 有没有更好的解决方案?

对具有超链接支持的同一脚注的多次引用 - 有没有更好的解决方案?

根据Latex 维基百科对支持同一脚注的多个引用的解决方法hyperref是:

\footnote{This is the footnote}\addtocounter{footnote}{-1}\addtocounter{Hfootnote}{-1}

我当然可以简单地将其包装在一个新命令中,但我想知道是否有任何包可以优雅地处理这个问题,最好有一个使用标签引用脚注的选项。如果中间有其他脚注,上面提出的方法也会搞砸。\footref来自footmisc软件包可以做类似的事情,但它不完全支持 hyperref。有人知道有哪个软件包可以做到这一点吗?

答案1

我不确定这是否是您想要的,但我认为这些宏可以实现您想要的功能:

\documentclass{article}
\usepackage{hyperref}

\newcommand{\footlabel}[2]{%
    \addtocounter{footnote}{1}%
    \footnotetext[\thefootnote]{%
        \addtocounter{footnote}{-1}%
        \refstepcounter{footnote}\label{#1}%
        #2%
    }%
    $^{\ref{#1}}$%
}

\newcommand{\footref}[1]{%
    $^{\ref{#1}}$%
}

%\newcounter{normalfootc}
%\renewcommand{\footnote}[1]{%
%    \footlabel{footsaferefiwontuse\thenormalfootc}{#1}%
%    \addtocounter{normalfootc}{1}%
%}

\begin{document}

This is a sentence with a footnote\footlabel{rom}{this is the adapted footnote} in it. 
This second sentence points to the same footnote,\footref{rom} so you don't have 
to write it all over again. As you can see, the macro's work in conjuncture with 
the normal\footnote{this is a normal footnote} footnote. 
Though there is a small discrepancy in how the links are displayed.

\end{document}

该宏\footlabel{<label>}{<foonote text>}创建脚注并赋予其标签,稍后可使用 来访问该标签\footref{<label>}

不过,这些宏有一个小问题:它们会为超链接生成一个略有不同的“框”(默认为红色框),如果您追求最终的一致性,这可能是不想要的。如果您已经将超链接样式重新定义为其他样式,则不会出现问题。您也可以使用\footlabel不带任何标签参数的命令全部你的脚注(甚至是正常的脚注)使一切再次保持一致。

序言中的这句话再次使其保持一致:

\newcounter{normalfootc}
\renewcommand{\footnote}[1]{%
    \footlabel{footsaferefiwontuse\thenormalfootc}{#1}%
    \addtocounter{normalfootc}{1}%
}

希望这可以帮助!

答案2

您可以使用该cleveref包(在任何情况下都很有用)并用一行重新定义脚注的引用样式。然后您只需使用 引用脚注(和任何其他材料)\cref{<label>}

\documentclass{article}
\usepackage{hyperref}
\usepackage{cleveref}[2012/02/15]% v0.18.4; 
% 0.16.1 of May 2010 would be sufficient, but what is the exact day?

\crefformat{footnote}{#2\footnotemark[#1]#3}

\begin{document}
First page, referencing future footnote\cref{second}.

Second paragraph, first footnote\footnote{\label{first}First footnote!}

\pagebreak
Second page, creating the second footnote\footnote{\label{second}Second footnote}, 
and referencing the first footnote\cref{first}.
\end{document}

答案3

我发现以下内容最容易实现:

First sentence.\footnote{\label{footnote-label} footnote content}

Second sentence.\textsuperscript{\ref{footnote-label}}

由于我除了 之外从不使用任何其他东西\ref,并且我不会弄乱 LaTeX 的计数器,因此hyperref其行为符合预期。您可以使用宏来自动执行这些选择:

\newcommand{\savefootnote}[2]{\footnote{\label{#1}#2}}
\newcommand{\repeatfootnote}[1]{\textsuperscript{\ref{#1}}}

First sentence.\savefootnote{footnote-label}{footnote content}

Second sentence.\repeatfootnote{footnote-label}

答案4

这是一个老问题,但我刚刚发现一个简单的

\newcommand{\footref}[1]{\textsuperscript{\ref{#1}}}

就足够了:

\documentclass{article}
\usepackage{hyperref}

\newcommand{\footref}[1]{\textsuperscript{\ref{#1}}}

\begin{document}

Some footnote.\footnote{Text.\label{footnote}} And referencing the same footnote.\footref{footnote}

\end{document}

相关内容