为小页面和超链接中的样板文本提供特殊的、预定义的“无序”脚注

为小页面和超链接中的样板文本提供特殊的、预定义的“无序”脚注

在 minipage 环境中,我反复需要一些预定义的脚注(带有固定的样板文本),这些脚注应该使用符号脚注标记(为了更好的可检测性)以及自动编号的“正常”脚注。

在同一个小页面中,这种“特殊”的脚注可能会被引用多次,但脚注文本每个小页面只能出现一次。

特定脚注标记与其文本之间的关联是预先固定的。由于这些“特殊”脚注的数量是固定的且相对较小,我认为我可以使用硬编码的负值作为脚注计数器(以避免干扰正常计数)并使用硬编码的符号作为计数器的值(即\ddag\ast等等)。

这个 MWE 显示了我走了多远

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
%\usepackage{fnpct}
\usepackage[unicode,final]{hyperref}

\makeatletter

\newcommand*{\specialfnmark}{%
%\count255=\value\@mpfn% Originally, \@mpfn is stepped. Here, we save the old value and set \@mpfn to 0, -1, -2, and so on.
%\setcounter{\@mpfn}{0}%
\protected@xdef\@thefnmark{\ensuremath{\ddag}}% Originally: \protected@xdef\@thefnmark{\thempfn}
\@footnotemark%
%\setcounter{\@mpfn}{\count255}%  Restore old value
}

\newcommand*{\specialfntext}{%
\protected@xdef\@thefnmark{\ensuremath{\ddag}}% Originally: {\protected@xdef\@thefnmark{\thempfn}
\@footnotetext{A special footnote.}%
}

\makeatother

\begin{document}

\begin{minipage}{\textwidth}\specialfntext
Lore ipsum\footnote{1st minipage, 1st footnote.}.
Lore ipsum\specialfnmark.
Lore ipsum\footnote{1st minipage, 2nd footnote.}.
\end{minipage}

\begin{minipage}{\textwidth}\specialfntext
Lore ipsum\specialfnmark.
Lore ipsum\footnote{2nd minipage, 1st footnote.}.
Lore ipsum\specialfnmark.
\end{minipage}

\end{document}

请注意,为了成为 MWE,此 MWE 仅使用一种特殊脚注(即\specialfnmark和)。完整的论文使用了几个这样的脚注(即、、、),宏成对出现。\specialfntext\foofnmark\foofntext\thingyfnmark\thingyfntext

这几乎实现了我想要实现的目标,但仍然存在两个问题。

  1. 从脚注标记到正确脚注文本的 PDF 链接不起作用。我收到以下错误:

      Package hyperref Warning: Ignoring empty anchor on input line 28.
      pdfTeX warning (ext4): destination with the same identifier (name{Hfootnote.3}) has been already used, duplicate ignored
      pdfTeX warning (dest): name {Hfootnote.6} has been referenced but does not exist, replaced by a fixed one
      pdfTeX warning (dest): name{Hfootnote.4} has been referenced but does not exist, replaced by a fixed one
      pdfTeX warning (dest): name{Hfootnote.2} has been referenced but does not exist, replaced by a fixed one
    

    如何使宏定义与兼容hyperref?我已经尝试修改计数器(参见 MWE 的注释行),但没有成功。

  2. 是否可以另外使定义与fnpct包兼容,以便重新排序和水平调整句子的最后一个句号和脚注标记?

答案1

由于您想要多次使用脚注标记,因此您必须向 specialtext 添加多个锚点。hyperref 默认不执行此操作。您必须记录目标名称。\specialfntext在 minipage 末尾发出以避免必须浏览辅助文件。

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage{fnpct}
\usepackage{expl3}

\makeatletter
\ExplSyntaxOn
\seq_new:N\l_nagmat_fndest_seq

\newcommand*{\specialfnmark}
  {
    \protected@xdef\@thefnmark{\ensuremath{\ddag}}
    \@footnotemark\relax
    \seq_put_right:Nx\l_nagmat_fndest_seq
      {
       \Hy@footnote@currentHref
      }
  }

\AdaptNoteMark \specialfnmark %add to fnpct.

\newcommand*{\specialfntext}
  {
    \protected@xdef\@thefnmark{\ensuremath{\ddag}}
    \H@@mpfootnotetext
      { 
        \seq_map_inline:Nn\l_nagmat_fndest_seq
          {
           \Hy@raisedlink{\hypertarget{##1}{\relax}}
          }
        A special footnote.
      }
  }
\ExplSyntaxOff
\makeatother

\usepackage[unicode,final]{hyperref}



\begin{document}

\begin{minipage}{\textwidth}
Lore ipsum\footnote{1st minipage, 1st footnote.}.
Lore ipsum\specialfnmark.
Lore ipsum\footnote{1st minipage, 2nd footnote.}.
\specialfntext
\end{minipage}

\begin{minipage}{\textwidth}
Lore ipsum\specialfnmark.
Lore ipsum\footnote{2nd minipage, 1st footnote.}.
Lore ipsum\specialfnmark.
\specialfntext
\end{minipage}

\end{document}

在此处输入图片描述

相关内容