source: flex_extract.git/documentation/Sphinx/build/latex/footnotehyper-sphinx.sty @ f66f990

ctbtodev
Last change on this file since f66f990 was f66f990, checked in by Anne Philipp <anne.philipp@…>, 5 years ago

deleted jobscripts for tracking and updated Sphinx doc

  • Property mode set to 100644
File size: 8.7 KB
Line 
1\NeedsTeXFormat{LaTeX2e}
2\ProvidesPackage{footnotehyper-sphinx}%
3 [2017/10/27 v1.7 hyperref aware footnote.sty for sphinx (JFB)]
4%%
5%% Package: footnotehyper-sphinx
6%% Version: based on footnotehyper.sty 2017/03/07 v1.0
7%% as available at https://www.ctan.org/pkg/footnotehyper
8%% License: the one applying to Sphinx
9%%
10%% Refer to the PDF documentation  at https://www.ctan.org/pkg/footnotehyper for
11%% the code comments.
12%%
13%% Differences:
14%% 1. a partial tabulary compatibility layer added (enough for Sphinx mark-up),
15%% 2. use of \spx@opt@BeforeFootnote from sphinx.sty,
16%% 3. use of \sphinxunactivateextrasandspace from sphinx.sty,
17%% 4. macro definition \sphinxfootnotemark,
18%% 5. macro definition \sphinxlongtablepatch
19%% 6. replaced an \undefined by \@undefined
20\DeclareOption*{\PackageWarning{footnotehyper-sphinx}{Option `\CurrentOption' is unknown}}%
21\ProcessOptions\relax
22\newbox\FNH@notes
23\newdimen\FNH@width
24\let\FNH@colwidth\columnwidth
25\newif\ifFNH@savingnotes
26\AtBeginDocument {%
27    \let\FNH@latex@footnote    \footnote
28    \let\FNH@latex@footnotetext\footnotetext
29    \let\FNH@H@@footnotetext   \@footnotetext
30    \newenvironment{savenotes}
31        {\FNH@savenotes\ignorespaces}{\FNH@spewnotes\ignorespacesafterend}%
32    \let\spewnotes      \FNH@spewnotes
33    \let\footnote       \FNH@footnote
34    \let\footnotetext   \FNH@footnotetext
35    \let\endfootnote    \FNH@endfntext
36    \let\endfootnotetext\FNH@endfntext
37    \@ifpackageloaded{hyperref}
38     {\ifHy@hyperfootnotes
39         \let\FNH@H@@footnotetext\H@@footnotetext
40      \else
41         \let\FNH@hyper@fntext\FNH@nohyp@fntext
42      \fi}%
43     {\let\FNH@hyper@fntext\FNH@nohyp@fntext}%
44}%
45\def\FNH@hyper@fntext{\FNH@fntext\FNH@hyper@fntext@i}%
46\def\FNH@nohyp@fntext{\FNH@fntext\FNH@nohyp@fntext@i}%
47\def\FNH@fntext #1{%
48  \ifx\ifmeasuring@\@undefined
49    \expandafter\@secondoftwo\else\expandafter\@firstofone\fi
50% these two lines modified for Sphinx (tabulary compatibility):
51    {\ifmeasuring@\expandafter\@gobbletwo\else\expandafter\@firstofone\fi}%
52    {\ifx\equation$\expandafter\@gobbletwo\fi #1}%$
53}%
54\long\def\FNH@hyper@fntext@i#1{%
55  \global\setbox\FNH@notes\vbox
56  {\unvbox\FNH@notes
57   \FNH@startnote
58   \@makefntext
59    {\rule\z@\footnotesep\ignorespaces
60     \ifHy@nesting\expandafter\ltx@firstoftwo
61             \else\expandafter\ltx@secondoftwo
62     \fi
63     {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}{#1}}%
64     {\Hy@raisedlink
65       {\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}%
66       {\relax}}%
67      \let\@currentHref\Hy@footnote@currentHref
68      \let\@currentlabelname\@empty
69      #1}%
70     \@finalstrut\strutbox
71    }%
72   \FNH@endnote
73  }%
74}%
75\long\def\FNH@nohyp@fntext@i#1{%
76  \global\setbox\FNH@notes\vbox
77  {\unvbox\FNH@notes
78   \FNH@startnote
79   \@makefntext{\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
80   \FNH@endnote
81  }%
82}%
83\def\FNH@startnote{%
84  \hsize\FNH@colwidth
85  \interlinepenalty\interfootnotelinepenalty
86  \reset@font\footnotesize
87  \floatingpenalty\@MM
88  \@parboxrestore
89  \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}%
90  \color@begingroup
91}%
92\def\FNH@endnote{\color@endgroup}%
93\def\FNH@savenotes{%
94  \begingroup
95  \ifFNH@savingnotes\else
96    \FNH@savingnotestrue
97    \let\@footnotetext    \FNH@hyper@fntext
98    \let\@mpfootnotetext  \FNH@hyper@fntext
99    \let\H@@mpfootnotetext\FNH@nohyp@fntext
100    \FNH@width\columnwidth
101    \let\FNH@colwidth\FNH@width
102    \global\setbox\FNH@notes\box\voidb@x
103    \let\FNH@thempfn\thempfn
104    \let\FNH@mpfn\@mpfn
105    \ifx\@minipagerestore\relax\let\@minipagerestore\@empty\fi
106    \expandafter\def\expandafter\@minipagerestore\expandafter{%
107      \@minipagerestore
108      \let\thempfn\FNH@thempfn
109      \let\@mpfn\FNH@mpfn
110    }%
111  \fi
112}%
113\def\FNH@spewnotes {%
114  \endgroup
115  \ifFNH@savingnotes\else
116   \ifvoid\FNH@notes\else
117    \begingroup
118     \let\@makefntext\@empty
119     \let\@finalstrut\@gobble
120     \let\rule\@gobbletwo
121     \FNH@H@@footnotetext{\unvbox\FNH@notes}%
122    \endgroup
123   \fi
124  \fi
125}%
126\def\FNH@footnote@envname    {footnote}%
127\def\FNH@footnotetext@envname{footnotetext}%
128\def\FNH@footnote{%
129% this line added for Sphinx:
130    \spx@opt@BeforeFootnote
131    \ifx\@currenvir\FNH@footnote@envname
132        \expandafter\FNH@footnoteenv
133    \else
134        \expandafter\FNH@latex@footnote
135    \fi
136}%
137\def\FNH@footnoteenv{%
138% this line added for Sphinx (footnotes in parsed literal blocks):
139    \catcode13=5 \sphinxunactivateextrasandspace
140    \@ifnextchar[%
141      \FNH@footnoteenv@i %]
142      {\stepcounter\@mpfn
143       \protected@xdef\@thefnmark{\thempfn}%
144       \@footnotemark
145       \def\FNH@endfntext@fntext{\@footnotetext}%
146       \FNH@startfntext}%
147}%
148\def\FNH@footnoteenv@i[#1]{%
149    \begingroup
150     \csname c@\@mpfn\endcsname #1\relax
151     \unrestored@protected@xdef\@thefnmark{\thempfn}%
152    \endgroup
153    \@footnotemark
154    \def\FNH@endfntext@fntext{\@footnotetext}%
155    \FNH@startfntext
156}%
157\def\FNH@footnotetext{%
158    \ifx\@currenvir\FNH@footnotetext@envname
159        \expandafter\FNH@footnotetextenv
160    \else
161        \expandafter\FNH@latex@footnotetext
162    \fi
163}%
164\def\FNH@footnotetextenv{%
165    \@ifnextchar[%
166      \FNH@footnotetextenv@i %]
167      {\protected@xdef\@thefnmark{\thempfn}%
168       \def\FNH@endfntext@fntext{\@footnotetext}%
169       \FNH@startfntext}%
170}%
171\def\FNH@footnotetextenv@i[#1]{%
172    \begingroup
173     \csname c@\@mpfn\endcsname #1\relax
174     \unrestored@protected@xdef\@thefnmark{\thempfn}%
175    \endgroup
176    \ifFNH@savingnotes
177      \def\FNH@endfntext@fntext{\FNH@nohyp@fntext}%
178    \else
179      \def\FNH@endfntext@fntext{\FNH@H@@footnotetext}%
180    \fi
181    \FNH@startfntext
182}%
183\def\FNH@startfntext{%
184  \setbox\z@\vbox\bgroup
185    \FNH@startnote
186    \FNH@prefntext
187    \rule\z@\footnotesep\ignorespaces
188}%
189\def\FNH@endfntext {%
190    \@finalstrut\strutbox
191    \FNH@postfntext
192    \FNH@endnote
193    \egroup
194  \begingroup
195    \let\@makefntext\@empty\let\@finalstrut\@gobble\let\rule\@gobbletwo
196    \FNH@endfntext@fntext {\unvbox\z@}%
197  \endgroup
198}%
199\AtBeginDocument{%
200   \let\FNH@@makefntext\@makefntext
201   \ifx\@makefntextFB\@undefined
202   \expandafter\@gobble\else\expandafter\@firstofone\fi
203   {\ifFBFrenchFootnotes \let\FNH@@makefntext\@makefntextFB \else
204                         \let\FNH@@makefntext\@makefntextORI\fi}%
205   \expandafter\FNH@check@a\FNH@@makefntext{1.2!3?4,}%
206               \FNH@@@1.2!3?4,\FNH@@@\relax
207}%
208\long\def\FNH@check@a #11.2!3?4,#2\FNH@@@#3{%
209    \ifx\relax#3\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
210    \FNH@bad@makefntext@alert
211    {\def\FNH@prefntext{#1}\def\FNH@postfntext{#2}\FNH@check@b}%
212}%
213\def\FNH@check@b #1\relax{%
214    \expandafter\expandafter\expandafter\FNH@check@c
215    \expandafter\meaning\expandafter\FNH@prefntext
216    \meaning\FNH@postfntext1.2!3?4,\FNH@check@c\relax
217}%
218\def\FNH@check@c #11.2!3?4,#2#3\relax{%
219    \ifx\FNH@check@c#2\expandafter\@gobble\fi\FNH@bad@makefntext@alert
220}%
221% slight reformulation for Sphinx
222\def\FNH@bad@makefntext@alert{%
223  \PackageWarningNoLine{footnotehyper-sphinx}%
224    {Footnotes will be sub-optimal, sorry. This is due to the document class or^^J
225  some package modifying macro \string\@makefntext.^^J
226  You can try to report this incompatibility at^^J
227  https://github.com/sphinx-doc/sphinx with this info:}%
228    \typeout{\meaning\@makefntext}%
229    \let\FNH@prefntext\@empty\let\FNH@postfntext\@empty
230}%
231% this macro from original footnote.sty is not used anymore by Sphinx
232% but for simplicity sake let's just keep it as is
233\def\makesavenoteenv{\@ifnextchar[\FNH@msne@ii\FNH@msne@i}%]
234\def\FNH@msne@i #1{%
235  \expandafter\let\csname FNH$#1\expandafter\endcsname %$
236                  \csname #1\endcsname
237  \expandafter\let\csname endFNH$#1\expandafter\endcsname %$
238                  \csname end#1\endcsname
239  \FNH@msne@ii[#1]{FNH$#1}%$
240}%
241\def\FNH@msne@ii[#1]#2{%
242  \expandafter\edef\csname#1\endcsname{%
243    \noexpand\savenotes
244    \expandafter\noexpand\csname#2\endcsname
245  }%
246  \expandafter\edef\csname end#1\endcsname{%
247    \expandafter\noexpand\csname end#2\endcsname
248    \noexpand\expandafter
249    \noexpand\spewnotes
250    \noexpand\if@endpe\noexpand\@endpetrue\noexpand\fi
251  }%
252}%
253% end of footnotehyper 2017/02/16 v0.99
254% some extras for Sphinx :
255% \sphinxfootnotemark: usable in section titles and silently removed from TOCs.
256\def\sphinxfootnotemark [#1]%
257   {\ifx\thepage\relax\else\protect\spx@opt@BeforeFootnote
258                             \protect\footnotemark[#1]\fi}%
259\AtBeginDocument{%
260   % let hyperref less complain
261   \pdfstringdefDisableCommands{\def\sphinxfootnotemark [#1]{}}%
262   % to obtain hyperlinked footnotes in longtable environment we must replace
263   % hyperref's patch of longtable's patch of \@footnotetext by our own
264   \let\LT@p@ftntext\FNH@hyper@fntext
265   % this *requires* longtable to be used always wrapped in savenotes environment
266}%
267\endinput
268%%
269%% End of file `footnotehyper-sphinx.sty'.
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG