TL;DR:是否有一个包允许在应该插入标记的位置后写入脚注文本?请注意,我问的是源代码的定位,不是关于输出文档中注释的定位。
在编写 LaTeX 时,我发现脚注源的内联字符有些分散注意力。
This is some text\footnote{That for
whatever reason contains a long
footnote. The main text becomes split
apart} so far that it is barely readable.
使用换行符来做一些小技巧
This is some text\footnote{
That for whatever reason contains a long
footnote. The main text becomes split
apart}
so far that it is barely readable.
也只能帮到这么多。我更愿意写
This is some text\fn{1} that contains a
couple\fn{2} footnotes yet remain readable.
\text{1}{Here is the text of the first
footnote, conveniently readable while reading
the main source, yet not disrupting it.}
\text{2}{-/2}
我知道使用
\footnotemark
和可以有一些技巧\footnotetext
。但是,当一个段落中有多个脚注时,这将需要手动更改脚注计数器,这太不方便了,因此这不是一个明智的选择。此外,如果我没记错的话,当段落延伸到下一页但 仍在当前页面上的文本中时,它可能会导致脚注显示在错误的页面上\footnotemark
。
+---------------+ +---------------+
|... | |end of the page|
| | |... |
| | | |
|some text with²| |————— |
|footnote on the| |²The FNText |
+---------------+ +---------------+
是否有一些包可以自动实现这种风格?
作为一个快速破解,我有时使用如下结构
\def\fnlater#1#2{\def#1{\footnote{#2}}}
...
\fnlater\myfnI{The footnote text must be
defined before the paragraph.}
...
Here is some textparagraph\myfnI that refers
to the previously defined footnote.
遗憾的是,这个定制解决方案有两个主要缺陷:
它需要定义脚注前 使用它,虽然直觉上需要脚注 后周围的文字。
当脚注被意外使用两次时,会导致编译错误。
当脚注根本没有使用时,它也会导致编译错误。
由于我认为这些问题不容易解决,特别是在周围文本之前定义脚注的要求,因此使用自定义黑客是不可取的。
如果 LaTeX 有这样的包,那么 LyX 是否有相应的模块就更好了。
作为最小可编译示例,请将这些代码示例放入框架中
\documentclass{article}
\begin{document}
...
\end{document}
答案1
我设法把它们拼凑起来。它只允许在页脚中使用纯文本,但除此之外,它应该可以满足您的所有要求。但是,如果标签未定义,则不会引发任何错误,因为每次添加新脚注时都会出现错误。
编辑:现在它支持格式化,感谢\detokenize
:D
脚注在文档的任何地方用 来定义\definefootnote{label}{footnotetext}
,并在文档的其他任何地方用 来使用\usefootnote{label}
。
\documentclass{article}
\makeatletter
\catcode`#=11
\AtEndDocument{
\immediate\write\@auxout{\detokenize{%
\newcommand{\@makefootnote}[2]%
{\expandafter\gdef\csname footnote@#1\endcsname{#2}%
% Check if footnote is unused
\AtEndDocument%
{\expandafter\ifx\csname footnoteused@#1\endcsname\relax%
\errmessage{Error: Footnote #1 never used!}%
\fi}}}}}
\catcode`#=6
\newcommand{\@addfootnotetolist}[2]
{\AtEndDocument{\immediate\write\@auxout
{\detokenize{\@makefootnote{#1}{#2}}}}}
\newcommand{\definefootnote}[2]
{% Check if footnote has been defined earlier
\expandafter\ifx\csname footnotedefd@#1\endcsname\relax
\@addfootnotetolist{#1}{#2}%
\expandafter\def\csname footnotedefd@#1\endcsname{}%
\else
\errmessage{Error: Footnote #1 defined twice!}
\fi}
\newcommand{\usefootnote}[1]
{% Check if footnote is defined
\expandafter\ifx\csname footnote@#1\endcsname\relax
% not yet defined, give warning?
% always happens first time used, of course
\expandafter\def\csname footnoteused@#1\endcsname{}%
\else
% Check if footnote has been used
\expandafter\ifx\csname footnoteused@#1\endcsname\relax
\footnote{\csname footnote@#1\endcsname}%
\expandafter\def\csname footnoteused@#1\endcsname{}%
\else
\errmessage{Error: Footnote #1 used twice!}
\fi
\fi}
\makeatother
\begin{document}
text\usefootnote{label}
\definefootnote{label}{footnotetext}
\end{document}
答案2
乔纳斯,
当我尝试使用您 2014 年 5 月 27 日发表的帖子中的 MVW 脚注宏时,在我通过 \usefootnote{label} 向同一脚注添加第二个引用后,它停止工作。错误在第二次运行 pdflatex 时出现,如下所示:
\usefootnote ...e {错误:脚注 #1 使用了两次!} \fi \fi l.49 ...s 第二次出现 \usefootnote{label} . ?
我的印象是,您的宏将会促进这样一种情况:页面上可能有两个点恰好引用同一个脚注(即共享的单个脚注)。
为避免疑问,我在下面附上了 MWE(其中有一个额外的脚注引用),如下所示:
\documentclass{article}
\makeatletter
\catcode`#=11
\AtEndDocument{
\immediate\write\@auxout{\detokenize{%
\newcommand{\@makefootnote}[2]%
{\expandafter\gdef\csname footnote@#1\endcsname{#2}%
% Check if footnote is unused
\AtEndDocument%
{\expandafter\ifx\csname footnoteused@#1\endcsname\relax%
\errmessage{Error: Footnote #1 never used!}%
\fi}}}}}
\catcode`#=6
\newcommand{\@addfootnotetolist}[2]
{\AtEndDocument{\immediate\write\@auxout
{\detokenize{\@makefootnote{#1}{#2}}}}}
\newcommand{\definefootnote}[2]
{% Check if footnote has been defined earlier
\expandafter\ifx\csname footnotedefd@#1\endcsname\relax
\@addfootnotetolist{#1}{#2}%
\expandafter\def\csname footnotedefd@#1\endcsname{}%
\else
\errmessage{Error: Footnote #1 defined twice!}
\fi}
\newcommand{\usefootnote}[1]
{% Check if footnote is defined
\expandafter\ifx\csname footnote@#1\endcsname\relax
% not yet defined, give warning?
% always happens first time used, of course
\expandafter\def\csname footnoteused@#1\endcsname{}%
\else
% Check if footnote has been used
\expandafter\ifx\csname footnoteused@#1\endcsname\relax
\footnote{\csname footnote@#1\endcsname}%
\expandafter\def\csname footnoteused@#1\endcsname{}%
\else
\errmessage{Error: Footnote #1 used twice!}
\fi
\fi}
\makeatother
\begin{document}
text\usefootnote{label}.
This is the second occurrence\usefootnote{label}.
\definefootnote{label}{footnotetext}
\end{document}