引用脚注

引用脚注

我需要为我的文档添加脚注。我发现语法是:

Something pretty complicated\footnote{This complicated thing needs details.}

这会使我的源代码难以阅读,所以我不得不问你们:有没有方法可以像这样工作?

Something pretty compLicated\footnote{ref:1}

\footnote{1}{This complicated thing needs details.}

答案1

如果你正在使用纯 TeX,那么你可以尝试这个:

\input opmac

\let\fnoteori=\fnote
\def\fnote#1{\fnoteori{%
   \expandafter\ifx\csname fn:#1\endcsname\relax Footnote not declared yet.%
   \else \csname fn:#1\endcsname\fi}}

\def\fnotedef#1#2{\toks0={#2}\openref\immediate\wref\sdef{{fn:#1}{\the\toks0}}}


Something pretty complicated\fnote{ref:1}

% at the end of the document (or somewhere else):
\fnotedef{ref:1}{This complicated thing needs details.}

\bye

如果您使用不同的 TeX 宏(例如 LaTeX),那么您可以在这里找到灵感。宏\fnotedef将信息保存到工作文件(auxref)中,格式如下:

\sdef{fn:ref:1}{text}

当再次处理该文档时,将读取此文件并将\sdef宏定义\fn:ref:1text。因此,\fnote宏可以执行展开的原始\fnote\fn:ref:1

答案2

类似这样的,使用.aux文件保存脚注。我不认为这在可读性方面有真正的进步。

\documentclass{article}
\usepackage{atveryend}

\makeatletter
\newcommand{\victor@fnread}[2]{%
  \global\@namedef{victor@#1@footnote}{#2}%
  \g@addto@macro\victor@footnotes{#2}%
}
\def\victor@footnotes{}%
\let\FOOTNOTE\victor@fnread
\AtEndDocument{%
  \gdef\victor@footnotesend{}%
  \let\FOOTNOTE\victor@fncheck
}
\newcommand{\victor@fncheck}[2]{%
  \g@addto@macro\victor@footnotesend{#2}%
}
\AtVeryEndDocument{%
  \ifx\victor@footnotes\victor@footnotesend\else
    \@latex@warning@no@line{Footnotes have changed, rerun LaTeX}%
  \fi
}

\let\victor@footnote@ori\footnote
\renewcommand{\footnote}[1]{%
  \victor@footnote@ori{\@nameuse{victor@#1@footnote}}%
}

\newcommand{\savefootnote}[2]{%
  \protected@write\@auxout{}{%
    \string\FOOTNOTE{#1}{#2}%
  }%
}
\makeatother

\textheight=4cm % just for the example

\begin{document}

Something pretty complicated\footnote{ref:1}

\savefootnote{ref:1}{This complicated thing needs details.}

Whatever\footnote{ref:what} and another\footnote{ouch}

\savefootnote{ref:what}{OK}
\savefootnote{ouch}{Ouch}

\end{document}

在此处输入图片描述

可以添加重复键检查。目前,如果出现这种情况,只会发出脚注已更改的警告。

相关内容