我需要为我的文档添加脚注。我发现语法是:
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
将信息保存到工作文件(aux
等ref
)中,格式如下:
\sdef{fn:ref:1}{text}
当再次处理该文档时,将读取此文件并将\sdef
宏定义\fn:ref:1
为text
。因此,\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}
可以添加重复键检查。目前,如果出现这种情况,只会发出脚注已更改的警告。