\footnoteref(= 修改后的 \footnotemark)在章节之外运行良好,但在章节之内则不行

\footnoteref(= 修改后的 \footnotemark)在章节之外运行良好,但在章节之内则不行

因为我需要一个参考同一脚注,我喜欢使用\footnoteref定义的这里

写作

\documentclass[12pt,a4paper]{report}
\usepackage[british]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[bottom,hang]{footmisc}
\usepackage{hyperref}
\usepackage{zref-perpage}
\usepackage[gen]{eurosym}
\usepackage{footnote}
\makesavenoteenv{tabular}
\makesavenoteenv{equation}
\zmakeperpage{footnote}

% Remove counter "footnote" from the reset counter list
% of counter "chapter".
\usepackage{remreset}
\makeatletter
\@removefromreset{footnote}{chapter}
\makeatother
\usepackage[labelfont=bf]{caption}

\makeatletter
\newcommand\footnoteref[1]{\protected@xdef\@thefnmark{\ref{#1}}\@footnotemark}
\makeatother

\begin{document}
    \begin{equation}
        \begin{tabular}{@{} l r @{}}
            Wood\footnote{\label{one}Footnote for wood.}\ \ & 10,000\ \euro\\
            Steel\ \ & 25,000\ \euro\\
            Coal\ \ & 5,000\ \euro\\
            Oil\ \ & 100,000\ \euro\\
            \hline
            Sum\ \ & 140,000\ \euro
        \end{tabular}
    \end{equation}
    \begin{equation}
        \begin{tabular}{@{} l r @{}}
            Wood\footnoteref{one}\ \ & 10,000\ \euro\\
            Steel\ \ & 25,000\ \euro\\
            Coal\ \ & 5,000\ \euro\\
            Oil\ \ & 100,000\ \euro\\
            \hline
            Sum\ \ & 140,000\ \euro
        \end{tabular}
    \end{equation}
\end{document}

结果是

在此处输入图片描述

这是我想要的结果。但是在和第一个\chapter{One}之间插入将导致\begin{document}\begin{equation}

在此处输入图片描述

这是我所不愿意看到的。

这整件事的错误在哪里?我找不到。我想\footnoteref必须修改的定义才能解决问题。或者可能需要修改某些章节/公式编号。

答案1

三个问题:

问题 1:

当您加载 footmisc-package 时,您可以使用它的\footref命令,而不是定义您自己的\footnoteref命令。

但是您需要调整\footref命令以正确考虑 hyperref-package。

你很幸运——最近在德语新闻组上就类似问题进行了讨论压缩文本.tex.
主题:“Fussnoten wiederholen”。(重复脚注。)
url:https://groups.google.com/forum/#!topic/de.comp.text.tex/fCIRB-5Fy_A

问题 2:

amsmath 包在方程环境中重新定义了\label-command,使得它无法在方程中的脚注中使用它。因此,我建议\label用不同的宏名保存该命令,并在 amsmath 应用其“良好”修改的地方使用它。

问题 3:

您的\makesavenoteenv条目确保“吐出”脚注将被延迟到某个时间点,此时\label由于内部宏(如\@currentlabel和)\@currentHref已被重新定义,放置将被破坏。
因此,您需要确保在处理命令之前本地恢复这些宏\label

\documentclass[12pt,a4paper]{report}
\usepackage[british]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[bottom,hang]{footmisc}
\usepackage{hyperref}
\usepackage{zref-perpage}
\usepackage[gen]{eurosym}
\usepackage{footnote}
\makesavenoteenv{tabular}
\makesavenoteenv{equation}
\zmakeperpage{footnote}

% Remove counter "footnote" from the reset counter list
% of counter "chapter".
\usepackage{remreset}
\makeatletter
\@removefromreset{footnote}{chapter}
\makeatother
\usepackage[labelfont=bf]{caption}

\makeatletter
\@ifpackageloaded{hyperref}{% 
  \renewcommand\footref[1]{% 
    \begingroup 
    \unrestored@protected@xdef\@thefnmark{% 
      \ref*{#1}% 
    }% 
    \endgroup 
    \ifHy@hyperfootnotes 
       \expandafter\@firstoftwo 
    \else 
       \expandafter\@secondoftwo 
    \fi 
    {\hyperref[#1]{\strut\H@@footnotemark}}{\@footnotemark}% 
  }% 
}{}% 

\newcommand\savedlabel{}%
\AtBeginDocument{\let\savedlabel=\label}%
\newcommand\footnotereflabel[1]{%
   \@bsphack
   \begingroup
   \def\@currentHref{Hfootnote.\theHfootnote}\savedlabel{#1}%
   \endgroup
   \@esphack
}%

\makeatother

\begin{document}
\chapter{One}
    \begin{equation}
        \begin{tabular}{@{} l r @{}}
            Wood\footnote{\footnotereflabel{one}Footnote for wood.}\ \ & 10,000\ \euro\\
            Steel\ \ & 25,000\ \euro\\
            Coal\ \ & 5,000\ \euro\\
            Oil\ \ & 100,000\ \euro\\
            \hline
            Sum\ \ & 140,000\ \euro
        \end{tabular}
    \end{equation}
    \begin{equation}
        \begin{tabular}{@{} l r @{}}
            Wood\footref{one}\ \ & 10,000\ \euro\\
            Steel\ \ & 25,000\ \euro\\
            Coal\ \ & 5,000\ \euro\\
            Oil\ \ & 100,000\ \euro\\
            \hline
            Sum\ \ & 140,000\ \euro
        \end{tabular}
    \end{equation}
\end{document}

在此处输入图片描述

相关内容