有时,当我尝试编辑文本正文时,脚注会让我感到烦恼或分心:尤其是带有大量脚注的文本。我想到的一个解决方案是将脚注集中到文件中,这些文件的结构与我用于整个文档的文件/目录结构一致。
每个脚注都有自己独特的宏。下面是我用来定义脚注宏的代码示例:
\makeatletter
%% #1 = footnote identifier
%% #2 = footnote content
\long\def\setfootnote#1#2{%%
\expandafter\long\expandafter\def\csname ae@footnote@#1@ftnt@\endcsname{#2}}
\def\aefootnote#1{\footnote{\csname ae@footnote@#1@ftnt@\endcsname}}
\makeatother
这与我通常定义脚注命令的方式有点不同,但是我的文件/目录结构超出了这个问题的范围,并且会使这个例子过于复杂。
对于 MWE,我有三个文件:
脚注.tex
\setfootnote{first footnote}{This is just an example footnote.}
\setfootnote{another footnote}{sf;ksdf sf;lskf s;df spewr po s;fksf; sdkf.}
主要内容.tex
\input{footnotes}
Here is an illustration of using my footnotes.\aefootnote{first footnote}
This is another footnoted sentence.\aefootnote{another footnote}
master_doc.tex
\documentclass{article}
\makeatletter
%% #1 = footnote identifier
%% #2 = footnote content
\long\def\setfootnote#1#2{%%
\expandafter\long\expandafter\def\csname ae@footnote@#1@ftnt@\endcsname{#2}}
\def\aefootnote#1{\footnote{\csname ae@footnote@#1@ftnt@\endcsname}}
\makeatother
\begin{document}
\input{main_matter}
\end{document}
对我来说,这个功能非常有效。它清理了主文档的内容。我可以看到脚注的位置,但在编写和编辑主要内容时,我不必被脚注的内容所干扰。
但从内存角度来看,这是一种极其浪费的方法。如果我有一篇很长的文档,那么我就强迫 LaTeX 在整个文档生命周期内知道并记住我的脚注。
我可以实现一个垃圾收集系统。也就是说,我可以通过当前正在编译的文件跟踪脚注的宏,方法是将它们的名称存储在宏中,例如\ae@garbage@collection
。当我完成该文件的编译后,我可以执行以下几行操作
\expandafter\let\csname ae@footnote@.....@ftnt@\endcsname\ae@undefined@macro
.....
我要删除的每个脚注注释宏的标识符在哪里。这可以通过宏自动完成\ae@delete@garbage
。
换句话说,我是说我知道如何避免让 LaTeX 的内存因只需要一次的东西而变得混乱。
我感兴趣的是,是否有人对更好的方法有建议。有没有更有效的方法来管理脚注,同时又能避免弄乱主文档的源文件?
答案1
一个更简单的选择可能是clipboard
:
带脚注的文件:(例如footnotes.tex
)
\documentclass{article}
\usepackage{clipboard}
\newclipboard{myfootnotes}
\begin{document}
\Copy{lore}{\footnote{This is a footnote.}}
\Copy{ipsum}{\footnote{This is a more long footnote.}}
\Copy{dolor}{\footnote{\emph{Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit}.}}
\end{document}
包含正文的文件:(例如main.tex
)
\documentclass[a5paper,12pt]{article}
\usepackage[bmargin=14cm]{geometry}
\usepackage{clipboard}
\openclipboard{myfootnotes}
\begin{document}
This is the main text with a footnote,\Paste{lore}
another footnote \Paste{ipsum} and one Cicero quote.
\Paste{dolor}
\end{document}
笔记:
文件名无关紧要,但显然两个文件必须共享剪贴板的名称。
因为 的内容footnote.tex
被复制(到临时myfootnotes.cpy
)并粘贴到main.tex
,所以必须先编译footnote.tex
,然后再编译main.tex
。
这个包的最初目的是将一个独立文档的文本重新用于另一个独立文档,但如果第一个文件仅用于维护剪贴板,您也可以直接写入 myfootnotes.cpy
,仅包含以下格式的命令:
\clipboard{name}{text}
但显然,如果你\newclipboard{myfootnotes}
在任何.tex
文件中使用,该.cpy
文件将被覆盖!
结果:
答案2
是的。这正是九月脚注包确实如此,正如 cgnieder 上面所说的那样:
\documentclass{article}
\usepackage{sepfootnotes}
\newfootnotes{x}
\xnotecontent{key}{content}
\begin{document}
bla bla bla\xnote{key}
\end{document}
答案3
我的解决方案:
1.文件Notes.tex:
\documentclass[8pt]{article}
\begin{document}
%<*notes004>
\footnote{La mia footnotes è questa.}
%</notes004>
\end{document}
2.在main.tex文件中:
\usepackage{catchfilebetweentags}
\newcommand{\loadnote}[1]{%
\ExecuteMetaData[notepie.tex]{notes#1}%
}
- 例如在 masterdom.tex 插入中
我想解释一下在外部文件中插入脚注的方法是什么,要知道有必要按照说明进行操作\loadnote{004}
附言:我不知道这篇文章的存在,所以我写了另一篇邮政