blob: 31e8be64fd44fc4fc66b3dfa7f42d4b2770e0a25 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
%% Copyright (C) 2013 Eduardo C. Lourenço de Lima
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3 of this license or (at your option) any later
%% version. The latest version of this license is in
%%
%% http://www.latex-project.org/lppl.txt
%%
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
\NeedsTeXFormat{LaTeX2e}[1996/06/01]
\ProvidesPackage{sepfootnotes}[2013/01/17 v0.2 Footnotes in separate file]
\newcommand\sep@packagename{sepfootnotes}
% ********************************* Public ************************************
% ==================== shared by footnotes and endnotes =======================
\newcommand\sep@new [1]
{\newcounter{#1note}%
\expandafter\newcommand\csname #1note\endcsname [1] {\csname #1notemark\endcsname{##1}\csname #1notetext\endcsname{##1}}%
\expandafter\newcommand\csname #1notecontent\endcsname [2] {\sep@namedef {#1} {##1} {##2}}%
\expandafter\newcommand\csname print#1note\endcsname [1] {\sep@nameuse {#1} {##1}}%
\expandafter\newcommand\csname the#1mark\endcsname {\csname the#1note\endcsname}}%
% -------------------------------- footnotes ----------------------------------
\newcommand\newfootnotes{\@ifstar\sep@newfootnotesfree\sep@newfootnotes}
\newcommand\sep@newfootnotes [1]
{\sep@new{#1}%
\expandafter\renewcommand\csname #1note\endcsname [1] {\footnote {\csname print#1note\endcsname{##1}}}%
\expandafter\newcommand\csname #1notetext\endcsname [1] {\footnotetext {\csname print#1note\endcsname{##1}}}%
\expandafter\newcommand\csname #1notemark\endcsname [1] {\footnotemark}%
\expandafter\renewcommand\csname the#1mark\endcsname {\thefootnote}}
\newcommand\sep@newfootnotesfree [1]
{\sep@new{#1}%
\expandafter\newcommand\csname #1notemark\endcsname [1] {\sep@mark {#1} {##1}}%
\expandafter\newcommand\csname #1notetext\endcsname [1] {\sep@markset {#1}\@footnotetext{\csname print#1note\endcsname {##1}}}}
\newcommand\newsymbolfootnotes [2] [page]
{\newfootnotes* {#2}%
\@addtoreset {#2note} {#1}%
\expandafter\renewcommand\csname the#2mark\endcsname {\fnsymbol {#2note}}}
% -------------------------------- endnotes -----------------------------------
\newcommand\newendnotes [1]
{\sep@new {#1}%
\sep@openout {#1}%
\expandafter\newcommand\csname #1notemark\endcsname [1] {\sep@mark {#1} {##1}}%
\expandafter\newcommand\csname #1notetext\endcsname [1] {\sep@markset {#1}\sep@write {#1} {\expandafter\noexpand\csname do#1note\endcsname{\arabic{#1note}}{\unexpanded{##1}}}}%
\expandafter\newcommand\csname addto#1notes\endcsname [1] {\sep@write {#1} {\unexpanded{##1}}}%
\expandafter\newcommand\csname the#1notes\endcsname {\sep@close {#1}\setcounter {#1note} {0}\begin{#1notes}\input\sep@filename{#1}\end{#1notes}}%
\expandafter\newcommand\csname make#1mark\endcsname {\hbox{\normalfont\csname the#1mark\endcsname.\ }}%
\expandafter\newcommand\csname #1noteformat\endcsname {\noindent\rightskip\z@ \leftskip\z@ \leavevmode\llap{\csname make#1mark\endcsname}}%
\expandafter\newcommand\csname do#1note\endcsname [2] {\sep@refsetcounter{#1note}{##1}\par\csname #1noteformat\endcsname\csname print#1note\endcsname{##2}\par}%
\expandafter\newcommand\csname #1notesize\endcsname {\footnotesize}
\newenvironment {#1notes} {\csname #1notesize\endcsname\setlength\parskip\footnotesep} {}}
% ********************************* Private ***********************************
% ---------------------------------- files ------------------------------------
\newcommand\sep@filename [1] {\jobname.ent-#1}
\newcommand\sep@openout [1] {\expandafter \newwrite\csname sep@fileout#1\endcsname\immediate\expandafter\openout\csname sep@fileout#1\endcsname=\sep@filename#1\relax}
\newcommand\sep@write [2] {\immediate \write\csname sep@fileout#1\endcsname {#2}}%
\newcommand\sep@close [1] {\immediate\expandafter\closeout\csname sep@fileout#1\endcsname\relax}
% ---------------------------------- table ------------------------------------
\newcommand\sep@nameuse [2] {\@ifundefined{sepfootnotes@text@#1@#2} {} {\@nameuse{sepfootnotes@text@#1@#2}}}
\newcommand\sep@namedef [3] {\@ifundefined{sepfootnotes@text@#1@#2} {\@namedef{sepfootnotes@text@#1@#2}{#3}} {\PackageError {\sep@packagename} {`#2' is already in use} {The key `#2' already identifies a note content.\MessageBreak Solution: Use another key.}}}
% ---------------------------------- marks ------------------------------------
\newcommand\sep@markset [1] {\protected@xdef\@thefnmark{\csname the#1mark\endcsname}}
\newcommand\sep@mark [2] {\stepcounter {#1note}\sep@markset {#1}\@footnotemark}
% ---------------------- cross-references and counters ------------------------
\newcommand\sep@refsetcounter [2] {\setcounter{#1}{#2}\protected@edef\@currentlabel{\csname p@#1\endcsname\csname the#1\endcsname}}
% ********************************* Default ***********************************
% ------------------------- footnotes: \sepfootnote ---------------------------
%% Default: The default \sepfootnote family relies on \footnote
\newfootnotes{sepfoot}
\endinput
%%
%% End of file `sepfootnotes.sty'.
|