1 | % |
---|
2 | % sphinx.sty |
---|
3 | % |
---|
4 | % Adapted from the old python.sty, mostly written by Fred Drake, |
---|
5 | % by Georg Brandl. |
---|
6 | % |
---|
7 | |
---|
8 | \NeedsTeXFormat{LaTeX2e}[1995/12/01] |
---|
9 | \ProvidesPackage{sphinx}[2019/01/12 v1.8.4 LaTeX package (Sphinx markup)] |
---|
10 | |
---|
11 | % provides \ltx@ifundefined |
---|
12 | % (many packages load ltxcmds: graphicx does for pdftex and lualatex but |
---|
13 | % not xelatex, and anyhow kvoptions does, but it may be needed in future to |
---|
14 | % use \sphinxdeprecationwarning earlier, and it needs \ltx@ifundefined) |
---|
15 | \RequirePackage{ltxcmds} |
---|
16 | |
---|
17 | %% for deprecation warnings |
---|
18 | \newcommand\sphinxdeprecationwarning[4]{% #1 the deprecated macro or name, |
---|
19 | % #2 = when deprecated, #3 = when removed, #4 = additional info |
---|
20 | \edef\spx@tempa{\detokenize{#1}}% |
---|
21 | \ltx@ifundefined{sphinx_depr_\spx@tempa}{% |
---|
22 | \global\expandafter\let\csname sphinx_depr_\spx@tempa\endcsname\spx@tempa |
---|
23 | \expandafter\AtEndDocument\expandafter{\expandafter\let\expandafter |
---|
24 | \sphinxdeprecatedmacro\csname sphinx_depr_\spx@tempa\endcsname |
---|
25 | \PackageWarningNoLine{sphinx}{^^J**** SPHINX DEPRECATION WARNING:^^J |
---|
26 | \sphinxdeprecatedmacro^^J |
---|
27 | \@spaces- is deprecated at Sphinx #2^^J |
---|
28 | \@spaces- and removed at Sphinx #3.^^J |
---|
29 | #4^^J****}}% |
---|
30 | }{% warning already emitted (at end of latex log), don't repeat |
---|
31 | }} |
---|
32 | |
---|
33 | |
---|
34 | %% PACKAGES |
---|
35 | % |
---|
36 | % we delay handling of options to after having loaded packages, because |
---|
37 | % of the need to use \definecolor. |
---|
38 | \RequirePackage{graphicx} |
---|
39 | \@ifclassloaded{memoir}{}{\RequirePackage{fancyhdr}} |
---|
40 | % for \text macro and \iffirstchoice@ conditional even if amsmath not loaded |
---|
41 | \RequirePackage{amstext} |
---|
42 | \RequirePackage{textcomp}% "warn" option issued from template |
---|
43 | \RequirePackage{titlesec} |
---|
44 | \@ifpackagelater{titlesec}{2016/03/15}% |
---|
45 | {\@ifpackagelater{titlesec}{2016/03/21}% |
---|
46 | {}% |
---|
47 | {\newif\ifsphinx@ttlpatch@ok |
---|
48 | \IfFileExists{etoolbox.sty}{% |
---|
49 | \RequirePackage{etoolbox}% |
---|
50 | \patchcmd{\ttlh@hang}{\parindent\z@}{\parindent\z@\leavevmode}% |
---|
51 | {\sphinx@ttlpatch@oktrue}{}% |
---|
52 | \ifsphinx@ttlpatch@ok |
---|
53 | \patchcmd{\ttlh@hang}{\noindent}{}{}{\sphinx@ttlpatch@okfalse}% |
---|
54 | \fi |
---|
55 | }{}% |
---|
56 | \ifsphinx@ttlpatch@ok |
---|
57 | \typeout{^^J Package Sphinx Info: ^^J |
---|
58 | **** titlesec 2.10.1 successfully patched for bugfix ****^^J}% |
---|
59 | \else |
---|
60 | \AtEndDocument{\PackageWarningNoLine{sphinx}{^^J% |
---|
61 | ******** titlesec 2.10.1 has a bug, (section numbers disappear) ......|^^J% |
---|
62 | ******** and Sphinx could not patch it, perhaps because your local ...|^^J% |
---|
63 | ******** copy is already fixed without a changed release date. .......|^^J% |
---|
64 | ******** If not, you must update titlesec! ...........................|}}% |
---|
65 | \fi |
---|
66 | }% |
---|
67 | }{} |
---|
68 | \RequirePackage{tabulary} |
---|
69 | % tabulary has a bug with its re-definition of \multicolumn in its first pass |
---|
70 | % which is not \long. But now Sphinx does not use LaTeX's \multicolumn but its |
---|
71 | % own macro. Hence we don't even need to patch tabulary. See sphinxmulticell.sty |
---|
72 | % X or S (Sphinx) may have meanings if some table package is loaded hence |
---|
73 | % \X was chosen to avoid possibility of conflict |
---|
74 | \newcolumntype{\X}[2]{p{\dimexpr |
---|
75 | (\linewidth-\arrayrulewidth)*#1/#2-\tw@\tabcolsep-\arrayrulewidth\relax}} |
---|
76 | \newcolumntype{\Y}[1]{p{\dimexpr |
---|
77 | #1\dimexpr\linewidth-\arrayrulewidth\relax-\tw@\tabcolsep-\arrayrulewidth\relax}} |
---|
78 | % using here T (for Tabulary) feels less of a problem than the X could be |
---|
79 | \newcolumntype{T}{J}% |
---|
80 | % For tables allowing pagebreaks |
---|
81 | \RequirePackage{longtable} |
---|
82 | % User interface to set-up whitespace before and after tables: |
---|
83 | \newcommand*\sphinxtablepre {0pt}% |
---|
84 | \newcommand*\sphinxtablepost{\medskipamount}% |
---|
85 | % Space from caption baseline to top of table or frame of literal-block |
---|
86 | \newcommand*\sphinxbelowcaptionspace{.5\sphinxbaselineskip}% |
---|
87 | % as one can not use \baselineskip from inside longtable (it is zero there) |
---|
88 | % we need \sphinxbaselineskip, which defaults to \baselineskip |
---|
89 | \def\sphinxbaselineskip{\baselineskip}% |
---|
90 | % The following is to ensure that, whether tabular(y) or longtable: |
---|
91 | % - if a caption is on top of table: |
---|
92 | % a) the space between its last baseline and the top rule of table is |
---|
93 | % exactly \sphinxbelowcaptionspace |
---|
94 | % b) the space from last baseline of previous text to first baseline of |
---|
95 | % caption is exactly \parskip+\baselineskip+ height of a strut. |
---|
96 | % c) the caption text will wrap at width \LTcapwidth (4in) |
---|
97 | % - make sure this works also if "caption" package is loaded by user |
---|
98 | % (with its width or margin option taking place of \LTcapwidth role) |
---|
99 | % TODO: obtain same for caption of literal block: a) & c) DONE, b) TO BE DONE |
---|
100 | % |
---|
101 | % To modify space below such top caption, adjust \sphinxbelowcaptionspace |
---|
102 | % To add or remove space above such top caption, adjust \sphinxtablepre: |
---|
103 | % notice that \abovecaptionskip, \belowcaptionskip, \LTpre are **ignored** |
---|
104 | % A. Table with longtable |
---|
105 | \def\sphinxatlongtablestart |
---|
106 | {\par |
---|
107 | \vskip\parskip |
---|
108 | \vskip\dimexpr\sphinxtablepre\relax % adjust vertical position |
---|
109 | \vbox{}% get correct baseline from above |
---|
110 | \LTpre\z@skip\LTpost\z@skip % set to zero longtable's own skips |
---|
111 | \edef\sphinxbaselineskip{\dimexpr\the\dimexpr\baselineskip\relax\relax}% |
---|
112 | }% |
---|
113 | % Compatibility with caption package |
---|
114 | \def\sphinxthelongtablecaptionisattop{% |
---|
115 | \spx@ifcaptionpackage{\noalign{\vskip-\belowcaptionskip}}{}% |
---|
116 | }% |
---|
117 | % Achieves exactly \sphinxbelowcaptionspace below longtable caption |
---|
118 | \def\sphinxlongtablecapskipadjust |
---|
119 | {\dimexpr-\dp\strutbox |
---|
120 | -\spx@ifcaptionpackage{\abovecaptionskip}{\sphinxbaselineskip}% |
---|
121 | +\sphinxbelowcaptionspace\relax}% |
---|
122 | \def\sphinxatlongtableend{\prevdepth\z@\vskip\sphinxtablepost\relax}% |
---|
123 | % B. Table with tabular or tabulary |
---|
124 | \def\sphinxattablestart{\par\vskip\dimexpr\sphinxtablepre\relax}% |
---|
125 | \let\sphinxattableend\sphinxatlongtableend |
---|
126 | % This is used by tabular and tabulary templates |
---|
127 | \newcommand*\sphinxcapstartof[1]{% |
---|
128 | \vskip\parskip |
---|
129 | \vbox{}% force baselineskip for good positioning by capstart of hyperanchor |
---|
130 | % hyperref puts the anchor 6pt above this baseline; in case of caption |
---|
131 | % this baseline will be \ht\strutbox above first baseline of caption |
---|
132 | \def\@captype{#1}% |
---|
133 | \capstart |
---|
134 | % move back vertically, as tabular (or its caption) will compensate |
---|
135 | \vskip-\baselineskip\vskip-\parskip |
---|
136 | }% |
---|
137 | \def\sphinxthecaptionisattop{% locate it after \sphinxcapstartof |
---|
138 | \spx@ifcaptionpackage |
---|
139 | {\caption@setposition{t}% |
---|
140 | \vskip\baselineskip\vskip\parskip % undo those from \sphinxcapstartof |
---|
141 | \vskip-\belowcaptionskip % anticipate caption package skip |
---|
142 | % caption package uses a \vbox, not a \vtop, so "single line" case |
---|
143 | % gives different result from "multi-line" without this: |
---|
144 | \nointerlineskip |
---|
145 | }% |
---|
146 | {}% |
---|
147 | }% |
---|
148 | \def\sphinxthecaptionisatbottom{% (not finalized; for template usage) |
---|
149 | \spx@ifcaptionpackage{\caption@setposition{b}}{}% |
---|
150 | }% |
---|
151 | % The aim of \sphinxcaption is to apply to tabular(y) the maximal width |
---|
152 | % of caption as done by longtable |
---|
153 | \def\sphinxtablecapwidth{\LTcapwidth}% |
---|
154 | \newcommand\sphinxcaption{\@dblarg\spx@caption}% |
---|
155 | \long\def\spx@caption[#1]#2{% |
---|
156 | \noindent\hb@xt@\linewidth{\hss |
---|
157 | \vtop{\@tempdima\dimexpr\sphinxtablecapwidth\relax |
---|
158 | % don't exceed linewidth for the caption width |
---|
159 | \ifdim\@tempdima>\linewidth\hsize\linewidth\else\hsize\@tempdima\fi |
---|
160 | % longtable ignores \abovecaptionskip/\belowcaptionskip, so do the same here |
---|
161 | \abovecaptionskip\sphinxabovecaptionskip % \z@skip |
---|
162 | \belowcaptionskip\sphinxbelowcaptionskip % \z@skip |
---|
163 | \caption[{#1}]% |
---|
164 | {\strut\ignorespaces#2\ifhmode\unskip\@finalstrut\strutbox\fi}% |
---|
165 | }\hss}% |
---|
166 | \par\prevdepth\dp\strutbox |
---|
167 | }% |
---|
168 | \def\sphinxabovecaptionskip{\z@skip}% Do not use! Flagged for removal |
---|
169 | \def\sphinxbelowcaptionskip{\z@skip}% Do not use! Flagged for removal |
---|
170 | % This wrapper of \abovecaptionskip is used in sphinxVerbatim for top |
---|
171 | % caption, and with another value in sphinxVerbatimintable |
---|
172 | % TODO: To unify space above caption of a code-block with the one above |
---|
173 | % caption of a table/longtable, \abovecaptionskip must not be used |
---|
174 | % This auxiliary will get renamed and receive a different meaning |
---|
175 | % in future. |
---|
176 | \def\spx@abovecaptionskip{\abovecaptionskip}% |
---|
177 | % Achieve \sphinxbelowcaptionspace below a caption located above a tabular |
---|
178 | % or a tabulary |
---|
179 | \newcommand\sphinxaftertopcaption |
---|
180 | {% |
---|
181 | \spx@ifcaptionpackage |
---|
182 | {\par\prevdepth\dp\strutbox\nobreak\vskip-\abovecaptionskip}{\nobreak}% |
---|
183 | \vskip\dimexpr\sphinxbelowcaptionspace\relax |
---|
184 | \vskip-\baselineskip\vskip-\parskip |
---|
185 | }% |
---|
186 | % varwidth is crucial for our handling of general contents in merged cells |
---|
187 | \RequirePackage{varwidth} |
---|
188 | % but addition of a compatibility patch with hyperref is needed |
---|
189 | % (tested with varwidth v 0.92 Mar 2009) |
---|
190 | \AtBeginDocument {% |
---|
191 | \let\@@vwid@Hy@raisedlink\Hy@raisedlink |
---|
192 | \long\def\@vwid@Hy@raisedlink#1{\@vwid@wrap{\@@vwid@Hy@raisedlink{#1}}}% |
---|
193 | \edef\@vwid@setup{% |
---|
194 | \let\noexpand\Hy@raisedlink\noexpand\@vwid@Hy@raisedlink % HYPERREF ! |
---|
195 | \unexpanded\expandafter{\@vwid@setup}}% |
---|
196 | }% |
---|
197 | % Homemade package to handle merged cells |
---|
198 | \RequirePackage{sphinxmulticell} |
---|
199 | \RequirePackage{makeidx} |
---|
200 | % For framing code-blocks and warning type notices, and shadowing topics |
---|
201 | \RequirePackage{framed} |
---|
202 | % The xcolor package draws better fcolorboxes around verbatim code |
---|
203 | \IfFileExists{xcolor.sty}{ |
---|
204 | \RequirePackage{xcolor} |
---|
205 | }{ |
---|
206 | \RequirePackage{color} |
---|
207 | } |
---|
208 | % For highlighted code. |
---|
209 | \RequirePackage{fancyvrb} |
---|
210 | \define@key{FV}{hllines}{\def\sphinx@verbatim@checkifhl##1{\in@{, ##1,}{#1}}} |
---|
211 | % sphinxVerbatim must be usable by third party without requiring hllines set-up |
---|
212 | \def\sphinxresetverbatimhllines{\def\sphinx@verbatim@checkifhl##1{\in@false}} |
---|
213 | \sphinxresetverbatimhllines |
---|
214 | % For hyperlinked footnotes in tables; also for gathering footnotes from |
---|
215 | % topic and warning blocks. Also to allow code-blocks in footnotes. |
---|
216 | \RequirePackage{footnotehyper-sphinx} |
---|
217 | % For the H specifier. Do not \restylefloat{figure}, it breaks Sphinx code |
---|
218 | % for allowing figures in tables. |
---|
219 | \RequirePackage{float} |
---|
220 | % For floating figures in the text. Better to load after float. |
---|
221 | \RequirePackage{wrapfig} |
---|
222 | % Separate paragraphs by space by default. |
---|
223 | \IfFileExists{parskip-2001-04-09.sty}% since September 2018 TeXLive update |
---|
224 | % new parskip.sty, but let it rollback to old one. |
---|
225 | % hopefully TeX installation not broken and LaTeX kernel not too old |
---|
226 | {\RequirePackage{parskip}[=v1]} |
---|
227 | % standard one from 1989. Admittedly \section of article/book gives possibly |
---|
228 | % anomalous spacing, but we can't require September 2018 release for some time. |
---|
229 | {\RequirePackage{parskip}} |
---|
230 | % For parsed-literal blocks. |
---|
231 | \RequirePackage{alltt} |
---|
232 | % Display "real" single quotes in literal blocks. |
---|
233 | \RequirePackage{upquote} |
---|
234 | % control caption around literal-block |
---|
235 | \RequirePackage{capt-of} |
---|
236 | \RequirePackage{needspace} |
---|
237 | % LaTeX 2018-04-01 and later provides \@removefromreset |
---|
238 | \ltx@ifundefined{@removefromreset} |
---|
239 | {\RequirePackage{remreset}} |
---|
240 | {}% avoid warning |
---|
241 | % to make pdf with correct encoded bookmarks in Japanese |
---|
242 | % this should precede the hyperref package |
---|
243 | \ifx\kanjiskip\@undefined |
---|
244 | % for non-Japanese: make sure bookmarks are ok also with lualatex |
---|
245 | \PassOptionsToPackage{pdfencoding=unicode}{hyperref} |
---|
246 | \else |
---|
247 | \RequirePackage{atbegshi} |
---|
248 | \ifx\ucs\@undefined |
---|
249 | \ifnum 42146=\euc"A4A2 |
---|
250 | \AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}} |
---|
251 | \else |
---|
252 | \AtBeginShipoutFirst{\special{pdf:tounicode 90ms-RKSJ-UCS2}} |
---|
253 | \fi |
---|
254 | \else |
---|
255 | \AtBeginShipoutFirst{\special{pdf:tounicode UTF8-UCS2}} |
---|
256 | \fi |
---|
257 | \fi |
---|
258 | |
---|
259 | \ifx\@jsc@uplatextrue\@undefined\else |
---|
260 | \PassOptionsToPackage{setpagesize=false}{hyperref} |
---|
261 | \fi |
---|
262 | |
---|
263 | % These options can be overriden inside 'hyperref' key |
---|
264 | % or by later use of \hypersetup. |
---|
265 | \PassOptionsToPackage{colorlinks,breaklinks,% |
---|
266 | linkcolor=InnerLinkColor,filecolor=OuterLinkColor,% |
---|
267 | menucolor=OuterLinkColor,urlcolor=OuterLinkColor,% |
---|
268 | citecolor=InnerLinkColor}{hyperref} |
---|
269 | |
---|
270 | % stylesheet for highlighting with pygments |
---|
271 | \RequirePackage{sphinxhighlight} |
---|
272 | % fix baseline increase from Pygments latex formatter in case of error tokens |
---|
273 | % and keep \fboxsep's scope local via added braces |
---|
274 | \def\PYG@tok@err{% |
---|
275 | \def\PYG@bc##1{{\setlength{\fboxsep}{-\fboxrule}% |
---|
276 | \fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}}% |
---|
277 | } |
---|
278 | \def\PYG@tok@cs{% |
---|
279 | \def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}% |
---|
280 | \def\PYG@bc##1{{\setlength{\fboxsep}{0pt}% |
---|
281 | \colorbox[rgb]{1.00,0.94,0.94}{\strut ##1}}}% |
---|
282 | }% |
---|
283 | |
---|
284 | |
---|
285 | %% OPTIONS |
---|
286 | % |
---|
287 | % Handle options via "kvoptions" (later loaded by hyperref anyhow) |
---|
288 | \RequirePackage{kvoptions} |
---|
289 | \SetupKeyvalOptions{prefix=spx@opt@} % use \spx@opt@ prefix |
---|
290 | |
---|
291 | % Sphinx legacy text layout: 1in margins on all four sides |
---|
292 | \ifx\@jsc@uplatextrue\@undefined |
---|
293 | \DeclareStringOption[1in]{hmargin} |
---|
294 | \DeclareStringOption[1in]{vmargin} |
---|
295 | \DeclareStringOption[.5in]{marginpar} |
---|
296 | \else |
---|
297 | % Japanese standard document classes handle \mag in a special way |
---|
298 | \DeclareStringOption[\inv@mag in]{hmargin} |
---|
299 | \DeclareStringOption[\inv@mag in]{vmargin} |
---|
300 | \DeclareStringOption[.5\dimexpr\inv@mag in\relax]{marginpar} |
---|
301 | \fi |
---|
302 | |
---|
303 | \DeclareStringOption[0]{maxlistdepth}% \newcommand*\spx@opt@maxlistdepth{0} |
---|
304 | \DeclareStringOption[-1]{numfigreset} |
---|
305 | \DeclareBoolOption[false]{nonumfigreset} |
---|
306 | \DeclareBoolOption[false]{mathnumfig} |
---|
307 | % \DeclareBoolOption[false]{usespart}% not used |
---|
308 | % dimensions, we declare the \dimen registers here. |
---|
309 | \newdimen\sphinxverbatimsep |
---|
310 | \newdimen\sphinxverbatimborder |
---|
311 | \newdimen\sphinxshadowsep |
---|
312 | \newdimen\sphinxshadowsize |
---|
313 | \newdimen\sphinxshadowrule |
---|
314 | % \DeclareStringOption is not convenient for the handling of these dimensions |
---|
315 | % because we want to assign the values to the corresponding registers. Even if |
---|
316 | % we added the code to the key handler it would be too late for the initial |
---|
317 | % set-up and we would need to do initial assignments explicitely. We end up |
---|
318 | % using \define@key directly. |
---|
319 | % verbatim |
---|
320 | \sphinxverbatimsep=\fboxsep |
---|
321 | \define@key{sphinx}{verbatimsep}{\sphinxverbatimsep\dimexpr #1\relax} |
---|
322 | \sphinxverbatimborder=\fboxrule |
---|
323 | \define@key{sphinx}{verbatimborder}{\sphinxverbatimborder\dimexpr #1\relax} |
---|
324 | % topic boxes |
---|
325 | \sphinxshadowsep =5pt |
---|
326 | \define@key{sphinx}{shadowsep}{\sphinxshadowsep\dimexpr #1\relax} |
---|
327 | \sphinxshadowsize=4pt |
---|
328 | \define@key{sphinx}{shadowsize}{\sphinxshadowsize\dimexpr #1\relax} |
---|
329 | \sphinxshadowrule=\fboxrule |
---|
330 | \define@key{sphinx}{shadowrule}{\sphinxshadowrule\dimexpr #1\relax} |
---|
331 | % verbatim |
---|
332 | \DeclareBoolOption[true]{verbatimwithframe} |
---|
333 | \DeclareBoolOption[true]{verbatimwrapslines} |
---|
334 | \DeclareBoolOption[true]{verbatimhintsturnover} |
---|
335 | \DeclareBoolOption[true]{inlineliteralwraps} |
---|
336 | \DeclareStringOption[t]{literalblockcappos} |
---|
337 | \DeclareStringOption[r]{verbatimcontinuedalign} |
---|
338 | \DeclareStringOption[r]{verbatimcontinuesalign} |
---|
339 | % parsed literal |
---|
340 | \DeclareBoolOption[true]{parsedliteralwraps} |
---|
341 | % \textvisiblespace for compatibility with fontspec+XeTeX/LuaTeX |
---|
342 | \DeclareStringOption[\textcolor{red}{\textvisiblespace}]{verbatimvisiblespace} |
---|
343 | \DeclareStringOption % must use braces to hide the brackets |
---|
344 | [{\makebox[2\fontcharwd\font`\x][r]{\textcolor{red}{\tiny$\m@th\hookrightarrow$}}}]% |
---|
345 | {verbatimcontinued} |
---|
346 | % notices/admonitions |
---|
347 | % the dimensions for notices/admonitions are kept as macros and assigned to |
---|
348 | % \spx@notice@border at time of use, hence \DeclareStringOption is ok for this |
---|
349 | \newdimen\spx@notice@border |
---|
350 | \DeclareStringOption[0.5pt]{noteborder} |
---|
351 | \DeclareStringOption[0.5pt]{hintborder} |
---|
352 | \DeclareStringOption[0.5pt]{importantborder} |
---|
353 | \DeclareStringOption[0.5pt]{tipborder} |
---|
354 | \DeclareStringOption[1pt]{warningborder} |
---|
355 | \DeclareStringOption[1pt]{cautionborder} |
---|
356 | \DeclareStringOption[1pt]{attentionborder} |
---|
357 | \DeclareStringOption[1pt]{dangerborder} |
---|
358 | \DeclareStringOption[1pt]{errorborder} |
---|
359 | % footnotes |
---|
360 | \DeclareStringOption[\mbox{ }]{AtStartFootnote} |
---|
361 | % we need a public macro name for direct use in latex file |
---|
362 | \newcommand*{\sphinxAtStartFootnote}{\spx@opt@AtStartFootnote} |
---|
363 | % no such need for this one, as it is used inside other macros |
---|
364 | \DeclareStringOption[\leavevmode\unskip]{BeforeFootnote} |
---|
365 | % some font styling. |
---|
366 | \DeclareStringOption[\sffamily\bfseries]{HeaderFamily} |
---|
367 | % colours |
---|
368 | % same problems as for dimensions: we want the key handler to use \definecolor. |
---|
369 | % first, some colours with no prefix, for backwards compatibility |
---|
370 | \newcommand*{\sphinxDeclareColorOption}[2]{% |
---|
371 | \definecolor{#1}#2% |
---|
372 | \define@key{sphinx}{#1}{\definecolor{#1}##1}% |
---|
373 | }% |
---|
374 | \sphinxDeclareColorOption{TitleColor}{{rgb}{0.126,0.263,0.361}} |
---|
375 | \sphinxDeclareColorOption{InnerLinkColor}{{rgb}{0.208,0.374,0.486}} |
---|
376 | \sphinxDeclareColorOption{OuterLinkColor}{{rgb}{0.216,0.439,0.388}} |
---|
377 | \sphinxDeclareColorOption{VerbatimColor}{{rgb}{1,1,1}} |
---|
378 | \sphinxDeclareColorOption{VerbatimBorderColor}{{rgb}{0,0,0}} |
---|
379 | % now the colours defined with "sphinx" prefix in their names |
---|
380 | \newcommand*{\sphinxDeclareSphinxColorOption}[2]{% |
---|
381 | % set the initial default |
---|
382 | \definecolor{sphinx#1}#2% |
---|
383 | % set the key handler. The "value" ##1 must be acceptable by \definecolor. |
---|
384 | \define@key{sphinx}{#1}{\definecolor{sphinx#1}##1}% |
---|
385 | }% |
---|
386 | % Default color chosen to be as in minted.sty LaTeX package! |
---|
387 | \sphinxDeclareSphinxColorOption{VerbatimHighlightColor}{{rgb}{0.878,1,1}} |
---|
388 | % admonition boxes, "light" style |
---|
389 | \sphinxDeclareSphinxColorOption{noteBorderColor}{{rgb}{0,0,0}} |
---|
390 | \sphinxDeclareSphinxColorOption{hintBorderColor}{{rgb}{0,0,0}} |
---|
391 | \sphinxDeclareSphinxColorOption{importantBorderColor}{{rgb}{0,0,0}} |
---|
392 | \sphinxDeclareSphinxColorOption{tipBorderColor}{{rgb}{0,0,0}} |
---|
393 | % admonition boxes, "heavy" style |
---|
394 | \sphinxDeclareSphinxColorOption{warningBorderColor}{{rgb}{0,0,0}} |
---|
395 | \sphinxDeclareSphinxColorOption{cautionBorderColor}{{rgb}{0,0,0}} |
---|
396 | \sphinxDeclareSphinxColorOption{attentionBorderColor}{{rgb}{0,0,0}} |
---|
397 | \sphinxDeclareSphinxColorOption{dangerBorderColor}{{rgb}{0,0,0}} |
---|
398 | \sphinxDeclareSphinxColorOption{errorBorderColor}{{rgb}{0,0,0}} |
---|
399 | \sphinxDeclareSphinxColorOption{warningBgColor}{{rgb}{1,1,1}} |
---|
400 | \sphinxDeclareSphinxColorOption{cautionBgColor}{{rgb}{1,1,1}} |
---|
401 | \sphinxDeclareSphinxColorOption{attentionBgColor}{{rgb}{1,1,1}} |
---|
402 | \sphinxDeclareSphinxColorOption{dangerBgColor}{{rgb}{1,1,1}} |
---|
403 | \sphinxDeclareSphinxColorOption{errorBgColor}{{rgb}{1,1,1}} |
---|
404 | |
---|
405 | \DeclareDefaultOption{\@unknownoptionerror} |
---|
406 | \ProcessKeyvalOptions* |
---|
407 | % don't allow use of maxlistdepth via \sphinxsetup. |
---|
408 | \DisableKeyvalOption{sphinx}{maxlistdepth} |
---|
409 | \DisableKeyvalOption{sphinx}{numfigreset} |
---|
410 | \DisableKeyvalOption{sphinx}{nonumfigreset} |
---|
411 | \DisableKeyvalOption{sphinx}{mathnumfig} |
---|
412 | % user interface: options can be changed midway in a document! |
---|
413 | \newcommand\sphinxsetup[1]{\setkeys{sphinx}{#1}} |
---|
414 | |
---|
415 | |
---|
416 | %% MAXLISTDEPTH |
---|
417 | % |
---|
418 | % remove LaTeX's cap on nesting depth if 'maxlistdepth' key used. |
---|
419 | % This is a hack, which works with the standard classes: it assumes \@toodeep |
---|
420 | % is always used in "true" branches: "\if ... \@toodeep \else .. \fi." |
---|
421 | |
---|
422 | % will force use the "false" branch (if there is one) |
---|
423 | \def\spx@toodeep@hack{\fi\iffalse} |
---|
424 | |
---|
425 | % do nothing if 'maxlistdepth' key not used or if package enumitem loaded. |
---|
426 | \ifnum\spx@opt@maxlistdepth=\z@\expandafter\@gobbletwo\fi |
---|
427 | \AtBeginDocument{% |
---|
428 | \@ifpackageloaded{enumitem}{\remove@to@nnil}{}% |
---|
429 | \let\spx@toodeepORI\@toodeep |
---|
430 | \def\@toodeep{% |
---|
431 | \ifnum\@listdepth<\spx@opt@maxlistdepth\relax |
---|
432 | \expandafter\spx@toodeep@hack |
---|
433 | \else |
---|
434 | \expandafter\spx@toodeepORI |
---|
435 | \fi}% |
---|
436 | % define all missing \@list... macros |
---|
437 | \count@\@ne |
---|
438 | \loop |
---|
439 | \ltx@ifundefined{@list\romannumeral\the\count@} |
---|
440 | {\iffalse}{\iftrue\advance\count@\@ne}% |
---|
441 | \repeat |
---|
442 | \loop |
---|
443 | \ifnum\count@>\spx@opt@maxlistdepth\relax\else |
---|
444 | \expandafter\let |
---|
445 | \csname @list\romannumeral\the\count@\expandafter\endcsname |
---|
446 | \csname @list\romannumeral\the\numexpr\count@-\@ne\endcsname |
---|
447 | % workaround 2.6--3.2d babel-french issue (fixed in 3.2e; no change needed) |
---|
448 | \ltx@ifundefined{leftmargin\romannumeral\the\count@} |
---|
449 | {\expandafter\let |
---|
450 | \csname leftmargin\romannumeral\the\count@\expandafter\endcsname |
---|
451 | \csname leftmargin\romannumeral\the\numexpr\count@-\@ne\endcsname}{}% |
---|
452 | \advance\count@\@ne |
---|
453 | \repeat |
---|
454 | % define all missing enum... counters and \labelenum... macros and \p@enum.. |
---|
455 | \count@\@ne |
---|
456 | \loop |
---|
457 | \ltx@ifundefined{c@enum\romannumeral\the\count@} |
---|
458 | {\iffalse}{\iftrue\advance\count@\@ne}% |
---|
459 | \repeat |
---|
460 | \loop |
---|
461 | \ifnum\count@>\spx@opt@maxlistdepth\relax\else |
---|
462 | \newcounter{enum\romannumeral\the\count@}% |
---|
463 | \expandafter\def |
---|
464 | \csname labelenum\romannumeral\the\count@\expandafter\endcsname |
---|
465 | \expandafter |
---|
466 | {\csname theenum\romannumeral\the\numexpr\count@\endcsname.}% |
---|
467 | \expandafter\def |
---|
468 | \csname p@enum\romannumeral\the\count@\expandafter\endcsname |
---|
469 | \expandafter |
---|
470 | {\csname p@enum\romannumeral\the\numexpr\count@-\@ne\expandafter |
---|
471 | \endcsname\csname theenum\romannumeral\the\numexpr\count@-\@ne\endcsname.}% |
---|
472 | \advance\count@\@ne |
---|
473 | \repeat |
---|
474 | % define all missing labelitem... macros |
---|
475 | \count@\@ne |
---|
476 | \loop |
---|
477 | \ltx@ifundefined{labelitem\romannumeral\the\count@} |
---|
478 | {\iffalse}{\iftrue\advance\count@\@ne}% |
---|
479 | \repeat |
---|
480 | \loop |
---|
481 | \ifnum\count@>\spx@opt@maxlistdepth\relax\else |
---|
482 | \expandafter\let |
---|
483 | \csname labelitem\romannumeral\the\count@\expandafter\endcsname |
---|
484 | \csname labelitem\romannumeral\the\numexpr\count@-\@ne\endcsname |
---|
485 | \advance\count@\@ne |
---|
486 | \repeat |
---|
487 | \PackageInfo{sphinx}{maximal list depth extended to \spx@opt@maxlistdepth}% |
---|
488 | \@gobble\@nnil |
---|
489 | } |
---|
490 | |
---|
491 | |
---|
492 | %% INDEX, BIBLIOGRAPHY, APPENDIX, TABLE OF CONTENTS |
---|
493 | % |
---|
494 | % fix the double index and bibliography on the table of contents |
---|
495 | % in jsclasses (Japanese standard document classes) |
---|
496 | \ifx\@jsc@uplatextrue\@undefined\else |
---|
497 | \renewenvironment{sphinxtheindex} |
---|
498 | {\cleardoublepage\phantomsection |
---|
499 | \begin{theindex}} |
---|
500 | {\end{theindex}} |
---|
501 | |
---|
502 | \renewenvironment{sphinxthebibliography}[1] |
---|
503 | {\cleardoublepage% \phantomsection % not needed here since TeXLive 2010's hyperref |
---|
504 | \begin{thebibliography}{#1}} |
---|
505 | {\end{thebibliography}} |
---|
506 | \fi |
---|
507 | |
---|
508 | % disable \@chappos in Appendix in pTeX |
---|
509 | \ifx\kanjiskip\@undefined\else |
---|
510 | \let\py@OldAppendix=\appendix |
---|
511 | \renewcommand{\appendix}{ |
---|
512 | \py@OldAppendix |
---|
513 | \gdef\@chappos{} |
---|
514 | } |
---|
515 | \fi |
---|
516 | |
---|
517 | % make commands known to non-Sphinx document classes |
---|
518 | \providecommand*{\sphinxtableofcontents}{\tableofcontents} |
---|
519 | \ltx@ifundefined{sphinxthebibliography} |
---|
520 | {\newenvironment |
---|
521 | {sphinxthebibliography}{\begin{thebibliography}}{\end{thebibliography}}% |
---|
522 | } |
---|
523 | {}% else clause of \ltx@ifundefined |
---|
524 | \ltx@ifundefined{sphinxtheindex} |
---|
525 | {\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}}% |
---|
526 | {}% else clause of \ltx@ifundefined |
---|
527 | |
---|
528 | % for usage with xindy: this string gets internationalized in preamble |
---|
529 | \newcommand*{\sphinxnonalphabeticalgroupname}{} |
---|
530 | % redefined in preamble, headings for makeindex produced index |
---|
531 | \newcommand*{\sphinxsymbolsname}{} |
---|
532 | \newcommand*{\sphinxnumbersname}{} |
---|
533 | |
---|
534 | %% COLOR (general) |
---|
535 | % |
---|
536 | % FIXME: \normalcolor should probably be used in place of \py@NormalColor |
---|
537 | % elsewhere, and \py@NormalColor should never be defined. \normalcolor |
---|
538 | % switches to the colour from last \color call in preamble. |
---|
539 | \def\py@NormalColor{\color{black}} |
---|
540 | % FIXME: it is probably better to use \color{TitleColor}, as TitleColor |
---|
541 | % can be customized from 'sphinxsetup', and drop usage of \py@TitleColor |
---|
542 | \def\py@TitleColor{\color{TitleColor}} |
---|
543 | % FIXME: this line should be dropped, as "9" is default anyhow. |
---|
544 | \ifdefined\pdfcompresslevel\pdfcompresslevel = 9 \fi |
---|
545 | |
---|
546 | |
---|
547 | %% PAGE STYLING |
---|
548 | % |
---|
549 | % Style parameters and macros used by most documents here |
---|
550 | \raggedbottom |
---|
551 | \sloppy |
---|
552 | \hbadness = 5000 % don't print trivial gripes |
---|
553 | |
---|
554 | % Use \pagestyle{normal} as the primary pagestyle for text. |
---|
555 | % Redefine the 'normal' header/footer style when using "fancyhdr" package: |
---|
556 | \@ifpackageloaded{fancyhdr}{% |
---|
557 | \ltx@ifundefined{c@chapter} |
---|
558 | {% no \chapter, "howto" (non-Japanese) docclass |
---|
559 | \fancypagestyle{plain}{ |
---|
560 | \fancyhf{} |
---|
561 | \fancyfoot[C]{{\py@HeaderFamily\thepage}} |
---|
562 | \renewcommand{\headrulewidth}{0pt} |
---|
563 | \renewcommand{\footrulewidth}{0pt} |
---|
564 | } |
---|
565 | % Same as 'plain', this way we can use it in template |
---|
566 | % FIXME: shouldn't this have a running header with Name and Release like 'manual'? |
---|
567 | \fancypagestyle{normal}{ |
---|
568 | \fancyhf{} |
---|
569 | \fancyfoot[C]{{\py@HeaderFamily\thepage}} |
---|
570 | \renewcommand{\headrulewidth}{0pt} |
---|
571 | \renewcommand{\footrulewidth}{0pt} |
---|
572 | } |
---|
573 | }% |
---|
574 | {% classes with \chapter command |
---|
575 | \fancypagestyle{normal}{ |
---|
576 | \fancyhf{} |
---|
577 | % FIXME: this presupposes "twoside". |
---|
578 | % If "oneside" class option, there are warnings in LaTeX log. |
---|
579 | \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}} |
---|
580 | \fancyfoot[LO]{{\py@HeaderFamily\nouppercase{\rightmark}}} |
---|
581 | \fancyfoot[RE]{{\py@HeaderFamily\nouppercase{\leftmark}}} |
---|
582 | \fancyhead[LE,RO]{{\py@HeaderFamily \@title\sphinxheadercomma\py@release}} |
---|
583 | \renewcommand{\headrulewidth}{0.4pt} |
---|
584 | \renewcommand{\footrulewidth}{0.4pt} |
---|
585 | % define chaptermark with \@chappos when \@chappos is available for Japanese |
---|
586 | \ltx@ifundefined{@chappos}{} |
---|
587 | {\def\chaptermark##1{\markboth{\@chapapp\space\thechapter\space\@chappos\space ##1}{}}} |
---|
588 | } |
---|
589 | % Update the plain style so we get the page number & footer line, |
---|
590 | % but not a chapter or section title. This is to keep the first |
---|
591 | % page of a chapter `clean.' |
---|
592 | \fancypagestyle{plain}{ |
---|
593 | \fancyhf{} |
---|
594 | \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}} |
---|
595 | \renewcommand{\headrulewidth}{0pt} |
---|
596 | \renewcommand{\footrulewidth}{0.4pt} |
---|
597 | } |
---|
598 | } |
---|
599 | } |
---|
600 | {% no fancyhdr: memoir class |
---|
601 | % Provide default for 'normal' style simply as an alias of 'plain' style |
---|
602 | % This way we can use \pagestyle{normal} in LaTeX template |
---|
603 | \def\ps@normal{\ps@plain} |
---|
604 | % Users of memoir class are invited to redefine 'normal' style in preamble |
---|
605 | } |
---|
606 | |
---|
607 | % geometry |
---|
608 | \ifx\kanjiskip\@undefined |
---|
609 | \PassOptionsToPackage{% |
---|
610 | hmargin={\unexpanded{\spx@opt@hmargin}},% |
---|
611 | vmargin={\unexpanded{\spx@opt@vmargin}},% |
---|
612 | marginpar=\unexpanded{\spx@opt@marginpar}} |
---|
613 | {geometry} |
---|
614 | \else |
---|
615 | % set text width for Japanese documents to be integer multiple of 1zw |
---|
616 | % and text height to be integer multiple of \baselineskip |
---|
617 | % the execution is delayed to \sphinxsetup then geometry.sty |
---|
618 | \normalsize\normalfont |
---|
619 | \newcommand*\sphinxtextwidthja[1]{% |
---|
620 | \if@twocolumn\tw@\fi |
---|
621 | \dimexpr |
---|
622 | \numexpr\dimexpr\paperwidth-\tw@\dimexpr#1\relax\relax/ |
---|
623 | \dimexpr\if@twocolumn\tw@\else\@ne\fi zw\relax |
---|
624 | zw\relax}% |
---|
625 | \newcommand*\sphinxmarginparwidthja[1]{% |
---|
626 | \dimexpr\numexpr\dimexpr#1\relax/\dimexpr1zw\relax zw\relax}% |
---|
627 | \newcommand*\sphinxtextlinesja[1]{% |
---|
628 | \numexpr\@ne+\dimexpr\paperheight-\topskip-\tw@\dimexpr#1\relax\relax/ |
---|
629 | \baselineskip\relax}% |
---|
630 | \ifx\@jsc@uplatextrue\@undefined\else |
---|
631 | % the way we found in order for the papersize special written by |
---|
632 | % geometry in the dvi file to be correct in case of jsbook class |
---|
633 | \ifnum\mag=\@m\else % do nothing special if nomag class option or 10pt |
---|
634 | \PassOptionsToPackage{truedimen}{geometry}% |
---|
635 | \fi |
---|
636 | \fi |
---|
637 | \PassOptionsToPackage{% |
---|
638 | hmarginratio={1:1},% |
---|
639 | textwidth=\unexpanded{\sphinxtextwidthja{\spx@opt@hmargin}},% |
---|
640 | vmarginratio={1:1},% |
---|
641 | lines=\unexpanded{\sphinxtextlinesja{\spx@opt@vmargin}},% |
---|
642 | marginpar=\unexpanded{\sphinxmarginparwidthja{\spx@opt@marginpar}},% |
---|
643 | footskip=2\baselineskip,% |
---|
644 | }{geometry}% |
---|
645 | \AtBeginDocument |
---|
646 | {% update a dimension used by the jsclasses |
---|
647 | \ifx\@jsc@uplatextrue\@undefined\else\fullwidth\textwidth\fi |
---|
648 | % for some reason, jreport normalizes all dimensions with \@settopoint |
---|
649 | \@ifclassloaded{jreport} |
---|
650 | {\@settopoint\textwidth\@settopoint\textheight\@settopoint\marginparwidth} |
---|
651 | {}% <-- "false" clause of \@ifclassloaded |
---|
652 | }% |
---|
653 | \fi |
---|
654 | |
---|
655 | % fix fncychap's bug which uses prematurely the \textwidth value |
---|
656 | \@ifpackagewith{fncychap}{Bjornstrup} |
---|
657 | {\AtBeginDocument{\mylen\textwidth\advance\mylen-2\myhi}}% |
---|
658 | {}% <-- "false" clause of \@ifpackagewith |
---|
659 | |
---|
660 | |
---|
661 | %% TITLES |
---|
662 | % |
---|
663 | % Since Sphinx 1.5, users should use HeaderFamily key to 'sphinxsetup' rather |
---|
664 | % than defining their own \py@HeaderFamily command (which is still possible). |
---|
665 | % Memo: \py@HeaderFamily is also used by \maketitle as defined in |
---|
666 | % sphinxmanual.cls/sphinxhowto.cls |
---|
667 | \newcommand{\py@HeaderFamily}{\spx@opt@HeaderFamily} |
---|
668 | |
---|
669 | % This sets up the fancy chapter headings that make the documents look |
---|
670 | % at least a little better than the usual LaTeX output. |
---|
671 | \@ifpackagewith{fncychap}{Bjarne}{ |
---|
672 | \ChNameVar {\raggedleft\normalsize \py@HeaderFamily} |
---|
673 | \ChNumVar {\raggedleft\Large \py@HeaderFamily} |
---|
674 | \ChTitleVar{\raggedleft\Large \py@HeaderFamily} |
---|
675 | % This creates (numbered) chapter heads without the leading \vspace*{}: |
---|
676 | \def\@makechapterhead#1{% |
---|
677 | {\parindent \z@ \raggedright \normalfont |
---|
678 | \ifnum \c@secnumdepth >\m@ne |
---|
679 | \if@mainmatter |
---|
680 | \DOCH |
---|
681 | \fi |
---|
682 | \fi |
---|
683 | \interlinepenalty\@M |
---|
684 | \if@mainmatter |
---|
685 | \DOTI{#1}% |
---|
686 | \else% |
---|
687 | \DOTIS{#1}% |
---|
688 | \fi |
---|
689 | }} |
---|
690 | }{}% <-- "false" clause of \@ifpackagewith |
---|
691 | |
---|
692 | % Augment the sectioning commands used to get our own font family in place, |
---|
693 | % and reset some internal data items (\titleformat from titlesec package) |
---|
694 | \titleformat{\section}{\Large\py@HeaderFamily}% |
---|
695 | {\py@TitleColor\thesection}{0.5em}{\py@TitleColor}{\py@NormalColor} |
---|
696 | \titleformat{\subsection}{\large\py@HeaderFamily}% |
---|
697 | {\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} |
---|
698 | \titleformat{\subsubsection}{\py@HeaderFamily}% |
---|
699 | {\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} |
---|
700 | % By default paragraphs (and subsubsections) will not be numbered because |
---|
701 | % sphinxmanual.cls and sphinxhowto.cls set secnumdepth to 2 |
---|
702 | \titleformat{\paragraph}{\py@HeaderFamily}% |
---|
703 | {\py@TitleColor\theparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor} |
---|
704 | \titleformat{\subparagraph}{\py@HeaderFamily}% |
---|
705 | {\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor} |
---|
706 | |
---|
707 | |
---|
708 | %% GRAPHICS |
---|
709 | % |
---|
710 | % \sphinxincludegraphics defined to resize images larger than the line width, |
---|
711 | % except if height or width option present. |
---|
712 | % |
---|
713 | % If scale is present, rescale before fitting to line width. (since 1.5) |
---|
714 | \newbox\spx@image@box |
---|
715 | \newcommand*{\sphinxincludegraphics}[2][]{% |
---|
716 | \in@{height}{#1}\ifin@\else\in@{width}{#1}\fi |
---|
717 | \ifin@ % height or width present |
---|
718 | \includegraphics[#1]{#2}% |
---|
719 | \else % no height nor width (but #1 may be "scale=...") |
---|
720 | \setbox\spx@image@box\hbox{\includegraphics[#1,draft]{#2}}% |
---|
721 | \ifdim \wd\spx@image@box>\linewidth |
---|
722 | \setbox\spx@image@box\box\voidb@x % clear memory |
---|
723 | \includegraphics[#1,width=\linewidth]{#2}% |
---|
724 | \else |
---|
725 | \setbox\spx@image@box\box\voidb@x % clear memory |
---|
726 | \includegraphics[#1]{#2}% |
---|
727 | \fi |
---|
728 | \fi |
---|
729 | } |
---|
730 | % \sphinxsafeincludegraphics resizes images larger than the line width, |
---|
731 | % or taller than about the text height (whether or not height/width options |
---|
732 | % were used). This is requested to avoid a crash with \MakeFramed as used by |
---|
733 | % sphinxShadowBox (topic/contents) and sphinxheavybox (admonitions), and also |
---|
734 | % by sphinxVerbatim (but a priori no image inclusion there). |
---|
735 | \newdimen\spx@image@maxheight |
---|
736 | % default maximal setting will get reduced by sphinxShadowBox/sphinxheavybox |
---|
737 | \AtBeginDocument{\spx@image@maxheight\textheight} |
---|
738 | \newcommand*{\sphinxsafeincludegraphics}[2][]{% |
---|
739 | \gdef\spx@includegraphics@options{#1}% |
---|
740 | \setbox\spx@image@box\hbox{\includegraphics[#1,draft]{#2}}% |
---|
741 | \in@false |
---|
742 | \ifdim \wd\spx@image@box>\linewidth |
---|
743 | \g@addto@macro\spx@includegraphics@options{,width=\linewidth}% |
---|
744 | \in@true |
---|
745 | \fi |
---|
746 | % no rotation, no need to worry about depth |
---|
747 | \ifdim \ht\spx@image@box>\spx@image@maxheight |
---|
748 | \g@addto@macro\spx@includegraphics@options{,height=\spx@image@maxheight}% |
---|
749 | \in@true |
---|
750 | \fi |
---|
751 | \ifin@ |
---|
752 | \g@addto@macro\spx@includegraphics@options{,keepaspectratio}% |
---|
753 | \fi |
---|
754 | \setbox\spx@image@box\box\voidb@x % clear memory |
---|
755 | \expandafter\includegraphics\expandafter[\spx@includegraphics@options]{#2}% |
---|
756 | }% |
---|
757 | |
---|
758 | |
---|
759 | %% FIGURE IN TABLE |
---|
760 | % |
---|
761 | \newenvironment{sphinxfigure-in-table}[1][\linewidth]{% |
---|
762 | \def\@captype{figure}% |
---|
763 | \sphinxsetvskipsforfigintablecaption |
---|
764 | \begin{minipage}{#1}% |
---|
765 | }{\end{minipage}} |
---|
766 | % store the original \caption macro for usage with figures inside longtable |
---|
767 | % and tabulary cells. Make sure we get the final \caption in presence of |
---|
768 | % caption package, whether the latter was loaded before or after sphinx. |
---|
769 | \AtBeginDocument{% |
---|
770 | \let\spx@originalcaption\caption |
---|
771 | \@ifpackageloaded{caption} |
---|
772 | {\let\spx@ifcaptionpackage\@firstoftwo |
---|
773 | \caption@AtBeginDocument*{\let\spx@originalcaption\caption}% |
---|
774 | % in presence of caption package, drop our own \sphinxcaption whose aim was to |
---|
775 | % ensure same width of caption to all kinds of tables (tabular(y), longtable), |
---|
776 | % because caption package has its own width (or margin) option |
---|
777 | \def\sphinxcaption{\caption}% |
---|
778 | }% |
---|
779 | {\let\spx@ifcaptionpackage\@secondoftwo}% |
---|
780 | } |
---|
781 | % tabulary expands twice contents, we need to prevent double counter stepping |
---|
782 | \newcommand*\sphinxfigcaption |
---|
783 | {\ifx\equation$%$% this is trick to identify tabulary first pass |
---|
784 | \firstchoice@false\else\firstchoice@true\fi |
---|
785 | \spx@originalcaption } |
---|
786 | \newcommand*\sphinxsetvskipsforfigintablecaption |
---|
787 | {\abovecaptionskip\smallskipamount |
---|
788 | \belowcaptionskip\smallskipamount} |
---|
789 | |
---|
790 | |
---|
791 | %% CITATIONS |
---|
792 | % |
---|
793 | \protected\def\sphinxcite{\cite} |
---|
794 | |
---|
795 | %% FOOTNOTES |
---|
796 | % |
---|
797 | % Support large numbered footnotes in minipage |
---|
798 | % But now obsolete due to systematic use of \savenotes/\spewnotes |
---|
799 | % when minipages are in use in the various macro definitions next. |
---|
800 | \def\thempfootnote{\arabic{mpfootnote}} |
---|
801 | |
---|
802 | |
---|
803 | %% NUMBERING OF FIGURES, TABLES, AND LITERAL BLOCKS |
---|
804 | \ltx@ifundefined{c@chapter} |
---|
805 | {\newcounter{literalblock}}% |
---|
806 | {\newcounter{literalblock}[chapter]% |
---|
807 | \def\theliteralblock{\ifnum\c@chapter>\z@\arabic{chapter}.\fi |
---|
808 | \arabic{literalblock}}% |
---|
809 | }% |
---|
810 | \ifspx@opt@nonumfigreset |
---|
811 | \ltx@ifundefined{c@chapter}{}{% |
---|
812 | \@removefromreset{figure}{chapter}% |
---|
813 | \@removefromreset{table}{chapter}% |
---|
814 | \@removefromreset{literalblock}{chapter}% |
---|
815 | \ifspx@opt@mathnumfig |
---|
816 | \@removefromreset{equation}{chapter}% |
---|
817 | \fi |
---|
818 | }% |
---|
819 | \def\thefigure{\arabic{figure}}% |
---|
820 | \def\thetable {\arabic{table}}% |
---|
821 | \def\theliteralblock{\arabic{literalblock}}% |
---|
822 | \ifspx@opt@mathnumfig |
---|
823 | \def\theequation{\arabic{equation}}% |
---|
824 | \fi |
---|
825 | \else |
---|
826 | \let\spx@preAthefigure\@empty |
---|
827 | \let\spx@preBthefigure\@empty |
---|
828 | % \ifspx@opt@usespart % <-- LaTeX writer could pass such a 'usespart' boolean |
---|
829 | % % as sphinx.sty package option |
---|
830 | % If document uses \part, (triggered in Sphinx by latex_toplevel_sectioning) |
---|
831 | % LaTeX core per default does not reset chapter or section |
---|
832 | % counters at each part. |
---|
833 | % But if we modify this, we need to redefine \thechapter, \thesection to |
---|
834 | % include the part number and this will cause problems in table of contents |
---|
835 | % because of too wide numbering. Simplest is to do nothing. |
---|
836 | % \fi |
---|
837 | \ifnum\spx@opt@numfigreset>0 |
---|
838 | \ltx@ifundefined{c@chapter} |
---|
839 | {} |
---|
840 | {\g@addto@macro\spx@preAthefigure{\ifnum\c@chapter>\z@\arabic{chapter}.}% |
---|
841 | \g@addto@macro\spx@preBthefigure{\fi}}% |
---|
842 | \fi |
---|
843 | \ifnum\spx@opt@numfigreset>1 |
---|
844 | \@addtoreset{figure}{section}% |
---|
845 | \@addtoreset{table}{section}% |
---|
846 | \@addtoreset{literalblock}{section}% |
---|
847 | \ifspx@opt@mathnumfig |
---|
848 | \@addtoreset{equation}{section}% |
---|
849 | \fi |
---|
850 | \g@addto@macro\spx@preAthefigure{\ifnum\c@section>\z@\arabic{section}.}% |
---|
851 | \g@addto@macro\spx@preBthefigure{\fi}% |
---|
852 | \fi |
---|
853 | \ifnum\spx@opt@numfigreset>2 |
---|
854 | \@addtoreset{figure}{subsection}% |
---|
855 | \@addtoreset{table}{subsection}% |
---|
856 | \@addtoreset{literalblock}{subsection}% |
---|
857 | \ifspx@opt@mathnumfig |
---|
858 | \@addtoreset{equation}{subsection}% |
---|
859 | \fi |
---|
860 | \g@addto@macro\spx@preAthefigure{\ifnum\c@subsection>\z@\arabic{subsection}.}% |
---|
861 | \g@addto@macro\spx@preBthefigure{\fi}% |
---|
862 | \fi |
---|
863 | \ifnum\spx@opt@numfigreset>3 |
---|
864 | \@addtoreset{figure}{subsubsection}% |
---|
865 | \@addtoreset{table}{subsubsection}% |
---|
866 | \@addtoreset{literalblock}{subsubsection}% |
---|
867 | \ifspx@opt@mathnumfig |
---|
868 | \@addtoreset{equation}{subsubsection}% |
---|
869 | \fi |
---|
870 | \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubsection>\z@\arabic{subsubsection}.}% |
---|
871 | \g@addto@macro\spx@preBthefigure{\fi}% |
---|
872 | \fi |
---|
873 | \ifnum\spx@opt@numfigreset>4 |
---|
874 | \@addtoreset{figure}{paragraph}% |
---|
875 | \@addtoreset{table}{paragraph}% |
---|
876 | \@addtoreset{literalblock}{paragraph}% |
---|
877 | \ifspx@opt@mathnumfig |
---|
878 | \@addtoreset{equation}{paragraph}% |
---|
879 | \fi |
---|
880 | \g@addto@macro\spx@preAthefigure{\ifnum\c@subparagraph>\z@\arabic{subparagraph}.}% |
---|
881 | \g@addto@macro\spx@preBthefigure{\fi}% |
---|
882 | \fi |
---|
883 | \ifnum\spx@opt@numfigreset>5 |
---|
884 | \@addtoreset{figure}{subparagraph}% |
---|
885 | \@addtoreset{table}{subparagraph}% |
---|
886 | \@addtoreset{literalblock}{subparagraph}% |
---|
887 | \ifspx@opt@mathnumfig |
---|
888 | \@addtoreset{equation}{subparagraph}% |
---|
889 | \fi |
---|
890 | \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubparagraph>\z@\arabic{subsubparagraph}.}% |
---|
891 | \g@addto@macro\spx@preBthefigure{\fi}% |
---|
892 | \fi |
---|
893 | \expandafter\g@addto@macro |
---|
894 | \expandafter\spx@preAthefigure\expandafter{\spx@preBthefigure}% |
---|
895 | \let\thefigure\spx@preAthefigure |
---|
896 | \let\thetable\spx@preAthefigure |
---|
897 | \let\theliteralblock\spx@preAthefigure |
---|
898 | \g@addto@macro\thefigure{\arabic{figure}}% |
---|
899 | \g@addto@macro\thetable{\arabic{table}}% |
---|
900 | \g@addto@macro\theliteralblock{\arabic{literalblock}}% |
---|
901 | \ifspx@opt@mathnumfig |
---|
902 | \let\theequation\spx@preAthefigure |
---|
903 | \g@addto@macro\theequation{\arabic{equation}}% |
---|
904 | \fi |
---|
905 | \fi |
---|
906 | |
---|
907 | |
---|
908 | %% LITERAL BLOCKS |
---|
909 | % |
---|
910 | % Based on use of "fancyvrb.sty"'s Verbatim. |
---|
911 | % - with framing allowing page breaks ("framed.sty") |
---|
912 | % - with breaking of long lines (exploits Pygments mark-up), |
---|
913 | % - with possibly of a top caption, non-separable by pagebreak. |
---|
914 | % - and usable inside tables or footnotes ("footnotehyper-sphinx"). |
---|
915 | |
---|
916 | % For extensions which use \OriginalVerbatim and compatibility with Sphinx < |
---|
917 | % 1.5, we define and use these when (unmodified) Verbatim will be needed. But |
---|
918 | % Sphinx >= 1.5 does not modify the \Verbatim macro anymore. |
---|
919 | \let\OriginalVerbatim \Verbatim |
---|
920 | \let\endOriginalVerbatim\endVerbatim |
---|
921 | |
---|
922 | % for captions of literal blocks |
---|
923 | % at start of caption title |
---|
924 | \newcommand*{\fnum@literalblock}{\literalblockname\nobreakspace\theliteralblock} |
---|
925 | % this will be overwritten in document preamble by Babel translation |
---|
926 | \newcommand*{\literalblockname}{Listing } |
---|
927 | % file extension needed for \caption's good functioning, the file is created |
---|
928 | % only if a \listof{literalblock}{foo} command is encountered, which is |
---|
929 | % analogous to \listoffigures, but for the code listings (foo = chosen title.) |
---|
930 | \newcommand*{\ext@literalblock}{lol} |
---|
931 | |
---|
932 | \newif\ifspx@inframed % flag set if we are already in a framed environment |
---|
933 | % if forced use of minipage encapsulation is needed (e.g. table cells) |
---|
934 | \newif\ifsphinxverbatimwithminipage \sphinxverbatimwithminipagefalse |
---|
935 | |
---|
936 | % Framing macro for use with framed.sty's \FrameCommand |
---|
937 | % - it obeys current indentation, |
---|
938 | % - frame is \fboxsep separated from the contents, |
---|
939 | % - the contents use the full available text width, |
---|
940 | % - #1 = color of frame, #2 = color of background, |
---|
941 | % - #3 = above frame, #4 = below frame, #5 = within frame, |
---|
942 | % - #3 and #4 must be already typeset boxes; they must issue \normalcolor |
---|
943 | % or similar, else, they are under scope of color #1 |
---|
944 | \long\def\spx@fcolorbox #1#2#3#4#5{% |
---|
945 | \hskip\@totalleftmargin |
---|
946 | \hskip-\fboxsep\hskip-\fboxrule |
---|
947 | % use of \color@b@x here is compatible with both xcolor.sty and color.sty |
---|
948 | \color@b@x {\color{#1}\spx@CustomFBox{#3}{#4}}{\color{#2}}{#5}% |
---|
949 | \hskip-\fboxsep\hskip-\fboxrule |
---|
950 | \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth |
---|
951 | }% |
---|
952 | % #1 = for material above frame, such as a caption or a "continued" hint |
---|
953 | % #2 = for material below frame, such as a caption or "continues on next page" |
---|
954 | % #3 = actual contents, which will be typeset with a background color |
---|
955 | \long\def\spx@CustomFBox#1#2#3{% |
---|
956 | \begingroup |
---|
957 | \setbox\@tempboxa\hbox{{#3}}% inner braces to avoid color leaks |
---|
958 | \vbox{#1% above frame |
---|
959 | % draw frame border _latest_ to avoid pdf viewer issue |
---|
960 | \kern\fboxrule |
---|
961 | \hbox{\kern\fboxrule |
---|
962 | \copy\@tempboxa |
---|
963 | \kern-\wd\@tempboxa\kern-\fboxrule |
---|
964 | \vrule\@width\fboxrule |
---|
965 | \kern\wd\@tempboxa |
---|
966 | \vrule\@width\fboxrule}% |
---|
967 | \kern-\dimexpr\ht\@tempboxa+\dp\@tempboxa+\fboxrule\relax |
---|
968 | \hrule\@height\fboxrule |
---|
969 | \kern\dimexpr\ht\@tempboxa+\dp\@tempboxa\relax |
---|
970 | \hrule\@height\fboxrule |
---|
971 | #2% below frame |
---|
972 | }% |
---|
973 | \endgroup |
---|
974 | }% |
---|
975 | \def\spx@fcolorbox@put@c#1{% hide width from framed.sty measuring |
---|
976 | \moveright\dimexpr\fboxrule+.5\wd\@tempboxa\hb@xt@\z@{\hss#1\hss}% |
---|
977 | }% |
---|
978 | \def\spx@fcolorbox@put@r#1{% right align with contents, width hidden |
---|
979 | \moveright\dimexpr\fboxrule+\wd\@tempboxa-\fboxsep\hb@xt@\z@{\hss#1}% |
---|
980 | }% |
---|
981 | \def\spx@fcolorbox@put@l#1{% left align with contents, width hidden |
---|
982 | \moveright\dimexpr\fboxrule+\fboxsep\hb@xt@\z@{#1\hss}% |
---|
983 | }% |
---|
984 | % |
---|
985 | \def\sphinxVerbatim@Continued |
---|
986 | {\csname spx@fcolorbox@put@\spx@opt@verbatimcontinuedalign\endcsname |
---|
987 | {\normalcolor\sphinxstylecodecontinued\literalblockcontinuedname}}% |
---|
988 | \def\sphinxVerbatim@Continues |
---|
989 | {\csname spx@fcolorbox@put@\spx@opt@verbatimcontinuesalign\endcsname |
---|
990 | {\normalcolor\sphinxstylecodecontinues\literalblockcontinuesname}}% |
---|
991 | \def\sphinxVerbatim@Title |
---|
992 | {\spx@fcolorbox@put@c{\unhcopy\sphinxVerbatim@TitleBox}}% |
---|
993 | \let\sphinxVerbatim@Before\@empty |
---|
994 | \let\sphinxVerbatim@After\@empty |
---|
995 | % Defaults are redefined in document preamble according to language |
---|
996 | \newcommand*\literalblockcontinuedname{continued from previous page}% |
---|
997 | \newcommand*\literalblockcontinuesname{continues on next page}% |
---|
998 | % |
---|
999 | \def\spx@verbatimfcolorbox{\spx@fcolorbox{VerbatimBorderColor}{VerbatimColor}}% |
---|
1000 | \def\sphinxVerbatim@FrameCommand |
---|
1001 | {\spx@verbatimfcolorbox\sphinxVerbatim@Before\sphinxVerbatim@After}% |
---|
1002 | \def\sphinxVerbatim@FirstFrameCommand |
---|
1003 | {\spx@verbatimfcolorbox\sphinxVerbatim@Before\sphinxVerbatim@Continues}% |
---|
1004 | \def\sphinxVerbatim@MidFrameCommand |
---|
1005 | {\spx@verbatimfcolorbox\sphinxVerbatim@Continued\sphinxVerbatim@Continues}% |
---|
1006 | \def\sphinxVerbatim@LastFrameCommand |
---|
1007 | {\spx@verbatimfcolorbox\sphinxVerbatim@Continued\sphinxVerbatim@After}% |
---|
1008 | |
---|
1009 | % For linebreaks inside Verbatim environment from package fancyvrb. |
---|
1010 | \newbox\sphinxcontinuationbox |
---|
1011 | \newbox\sphinxvisiblespacebox |
---|
1012 | \newcommand*\sphinxafterbreak {\copy\sphinxcontinuationbox} |
---|
1013 | |
---|
1014 | % Take advantage of the already applied Pygments mark-up to insert |
---|
1015 | % potential linebreaks for TeX processing. |
---|
1016 | % {, <, #, %, $, ' and ": go to next line. |
---|
1017 | % _, }, ^, &, >, - and ~: stay at end of broken line. |
---|
1018 | % Use of \textquotesingle for straight quote. |
---|
1019 | % FIXME: convert this to package options ? |
---|
1020 | \newcommand*\sphinxbreaksbeforelist {% |
---|
1021 | \do\PYGZob\{\do\PYGZlt\<\do\PYGZsh\#\do\PYGZpc\%% {, <, #, %, |
---|
1022 | \do\PYGZdl\$\do\PYGZdq\"% $, " |
---|
1023 | \def\PYGZsq |
---|
1024 | {\discretionary{}{\sphinxafterbreak\textquotesingle}{\textquotesingle}}% ' |
---|
1025 | } |
---|
1026 | \newcommand*\sphinxbreaksafterlist {% |
---|
1027 | \do\PYGZus\_\do\PYGZcb\}\do\PYGZca\^\do\PYGZam\&% _, }, ^, &, |
---|
1028 | \do\PYGZgt\>\do\PYGZhy\-\do\PYGZti\~% >, -, ~ |
---|
1029 | } |
---|
1030 | \newcommand*\sphinxbreaksatspecials {% |
---|
1031 | \def\do##1##2% |
---|
1032 | {\def##1{\discretionary{}{\sphinxafterbreak\char`##2}{\char`##2}}}% |
---|
1033 | \sphinxbreaksbeforelist |
---|
1034 | \def\do##1##2% |
---|
1035 | {\def##1{\discretionary{\char`##2}{\sphinxafterbreak}{\char`##2}}}% |
---|
1036 | \sphinxbreaksafterlist |
---|
1037 | } |
---|
1038 | |
---|
1039 | \def\sphinx@verbatim@nolig@list {\do \`}% |
---|
1040 | % Some characters . , ; ? ! / are not pygmentized. |
---|
1041 | % This macro makes them "active" and they will insert potential linebreaks. |
---|
1042 | % Not compatible with math mode (cf \sphinxunactivateextras). |
---|
1043 | \newcommand*\sphinxbreaksbeforeactivelist {}% none |
---|
1044 | \newcommand*\sphinxbreaksafteractivelist {\do\.\do\,\do\;\do\?\do\!\do\/} |
---|
1045 | \newcommand*\sphinxbreaksviaactive {% |
---|
1046 | \def\do##1{\lccode`\~`##1% |
---|
1047 | \lowercase{\def~}{\discretionary{}{\sphinxafterbreak\char`##1}{\char`##1}}% |
---|
1048 | \catcode`##1\active}% |
---|
1049 | \sphinxbreaksbeforeactivelist |
---|
1050 | \def\do##1{\lccode`\~`##1% |
---|
1051 | \lowercase{\def~}{\discretionary{\char`##1}{\sphinxafterbreak}{\char`##1}}% |
---|
1052 | \catcode`##1\active}% |
---|
1053 | \sphinxbreaksafteractivelist |
---|
1054 | \lccode`\~`\~ |
---|
1055 | } |
---|
1056 | |
---|
1057 | % If the linebreak is at a space, the latter will be displayed as visible |
---|
1058 | % space at end of first line, and a continuation symbol starts next line. |
---|
1059 | \def\spx@verbatim@space {% |
---|
1060 | \nobreak\hskip\z@skip |
---|
1061 | \discretionary{\copy\sphinxvisiblespacebox}{\sphinxafterbreak} |
---|
1062 | {\kern\fontdimen2\font}% |
---|
1063 | }% |
---|
1064 | |
---|
1065 | % if the available space on page is less than \literalblockneedspace, insert pagebreak |
---|
1066 | \newcommand{\sphinxliteralblockneedspace}{5\baselineskip} |
---|
1067 | \newcommand{\sphinxliteralblockwithoutcaptionneedspace}{1.5\baselineskip} |
---|
1068 | % The title (caption) is specified from outside as macro \sphinxVerbatimTitle. |
---|
1069 | % \sphinxVerbatimTitle is reset to empty after each use of Verbatim. |
---|
1070 | \newcommand*\sphinxVerbatimTitle {} |
---|
1071 | % This box to typeset the caption before framed.sty multiple passes for framing. |
---|
1072 | \newbox\sphinxVerbatim@TitleBox |
---|
1073 | % This is a workaround to a "feature" of French lists, when literal block |
---|
1074 | % follows immediately; usable generally (does only \par then), a priori... |
---|
1075 | \newcommand*\sphinxvspacefixafterfrenchlists{% |
---|
1076 | \ifvmode\ifdim\lastskip<\z@ \vskip\parskip\fi\else\par\fi |
---|
1077 | } |
---|
1078 | % Holder macro for labels of literal blocks. Set-up by LaTeX writer. |
---|
1079 | \newcommand*\sphinxLiteralBlockLabel {} |
---|
1080 | \newcommand*\sphinxSetupCaptionForVerbatim [1] |
---|
1081 | {% |
---|
1082 | \sphinxvspacefixafterfrenchlists |
---|
1083 | \needspace{\sphinxliteralblockneedspace}% |
---|
1084 | % insert a \label via \sphinxLiteralBlockLabel |
---|
1085 | % reset to normal the color for the literal block caption |
---|
1086 | \def\sphinxVerbatimTitle |
---|
1087 | {\py@NormalColor\sphinxcaption{\sphinxLiteralBlockLabel #1}}% |
---|
1088 | } |
---|
1089 | \newcommand*\sphinxSetupCodeBlockInFootnote {% |
---|
1090 | \fvset{fontsize=\footnotesize}\let\caption\sphinxfigcaption |
---|
1091 | \sphinxverbatimwithminipagetrue % reduces vertical spaces |
---|
1092 | % we counteract (this is in a group) the \@normalsize from \caption |
---|
1093 | \let\normalsize\footnotesize\let\@parboxrestore\relax |
---|
1094 | \def\spx@abovecaptionskip{\sphinxverbatimsmallskipamount}% |
---|
1095 | } |
---|
1096 | % needed to create wrapper environments of fancyvrb's Verbatim |
---|
1097 | \newcommand*{\sphinxVerbatimEnvironment}{\gdef\FV@EnvironName{sphinxVerbatim}} |
---|
1098 | \newcommand*{\sphinxverbatimsmallskipamount}{\smallskipamount} |
---|
1099 | % serves to implement line highlighting and line wrapping |
---|
1100 | \newcommand\sphinxFancyVerbFormatLine[1]{% |
---|
1101 | \expandafter\sphinx@verbatim@checkifhl\expandafter{\the\FV@CodeLineNo}% |
---|
1102 | \ifin@ |
---|
1103 | \sphinxVerbatimHighlightLine{#1}% |
---|
1104 | \else |
---|
1105 | \sphinxVerbatimFormatLine{#1}% |
---|
1106 | \fi |
---|
1107 | }% |
---|
1108 | \newcommand\sphinxVerbatimHighlightLine[1]{% |
---|
1109 | \edef\sphinxrestorefboxsep{\fboxsep\the\fboxsep\relax}% |
---|
1110 | \fboxsep0pt\relax % cf LaTeX bug graphics/4524 |
---|
1111 | \colorbox{sphinxVerbatimHighlightColor}% |
---|
1112 | {\sphinxrestorefboxsep\sphinxVerbatimFormatLine{#1}}% |
---|
1113 | % no need to restore \fboxsep here, as this ends up in a \hbox from fancyvrb |
---|
1114 | }% |
---|
1115 | % \sphinxVerbatimFormatLine will be set locally to one of those two: |
---|
1116 | \newcommand\sphinxVerbatimFormatLineWrap[1]{% |
---|
1117 | \hsize\linewidth |
---|
1118 | \vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@ |
---|
1119 | \doublehyphendemerits\z@\finalhyphendemerits\z@ |
---|
1120 | \strut #1\strut}% |
---|
1121 | }% |
---|
1122 | \newcommand\sphinxVerbatimFormatLineNoWrap[1]{\hb@xt@\linewidth{\strut #1\hss}}% |
---|
1123 | \g@addto@macro\FV@SetupFont{% |
---|
1124 | \sbox\sphinxcontinuationbox {\spx@opt@verbatimcontinued}% |
---|
1125 | \sbox\sphinxvisiblespacebox {\spx@opt@verbatimvisiblespace}% |
---|
1126 | }% |
---|
1127 | \newenvironment{sphinxVerbatim}{% |
---|
1128 | % first, let's check if there is a caption |
---|
1129 | \ifx\sphinxVerbatimTitle\empty |
---|
1130 | \sphinxvspacefixafterfrenchlists |
---|
1131 | \parskip\z@skip |
---|
1132 | \vskip\sphinxverbatimsmallskipamount |
---|
1133 | % there was no caption. Check if nevertheless a label was set. |
---|
1134 | \ifx\sphinxLiteralBlockLabel\empty\else |
---|
1135 | % we require some space to be sure hyperlink target from \phantomsection |
---|
1136 | % will not be separated from upcoming verbatim by a page break |
---|
1137 | \needspace{\sphinxliteralblockwithoutcaptionneedspace}% |
---|
1138 | \phantomsection\sphinxLiteralBlockLabel |
---|
1139 | \fi |
---|
1140 | \else |
---|
1141 | \parskip\z@skip |
---|
1142 | \if t\spx@opt@literalblockcappos |
---|
1143 | \vskip\spx@abovecaptionskip |
---|
1144 | \def\sphinxVerbatim@Before |
---|
1145 | {\sphinxVerbatim@Title\nointerlineskip |
---|
1146 | \kern\dimexpr-\dp\strutbox+\sphinxbelowcaptionspace |
---|
1147 | % if no frame (code-blocks inside table cells), remove |
---|
1148 | % the "verbatimsep" whitespace from the top (better visually) |
---|
1149 | \ifspx@opt@verbatimwithframe\else-\sphinxverbatimsep\fi |
---|
1150 | % caption package adds \abovecaptionskip vspace, remove it |
---|
1151 | \spx@ifcaptionpackage{-\abovecaptionskip}{}\relax}% |
---|
1152 | \else |
---|
1153 | \vskip\sphinxverbatimsmallskipamount |
---|
1154 | \def\sphinxVerbatim@After |
---|
1155 | {\nointerlineskip\kern\dimexpr\dp\strutbox |
---|
1156 | \ifspx@opt@verbatimwithframe\else-\sphinxverbatimsep\fi |
---|
1157 | \spx@ifcaptionpackage{-\abovecaptionskip}{}\relax |
---|
1158 | \sphinxVerbatim@Title}% |
---|
1159 | \fi |
---|
1160 | \def\@captype{literalblock}% |
---|
1161 | \capstart |
---|
1162 | % \sphinxVerbatimTitle must reset color |
---|
1163 | \setbox\sphinxVerbatim@TitleBox |
---|
1164 | \hbox{\begin{minipage}{\linewidth}% |
---|
1165 | % caption package may detect wrongly if top or bottom, so we help it |
---|
1166 | \spx@ifcaptionpackage |
---|
1167 | {\caption@setposition{\spx@opt@literalblockcappos}}{}% |
---|
1168 | \sphinxVerbatimTitle |
---|
1169 | \end{minipage}}% |
---|
1170 | \fi |
---|
1171 | \global\let\sphinxLiteralBlockLabel\empty |
---|
1172 | \global\let\sphinxVerbatimTitle\empty |
---|
1173 | \fboxsep\sphinxverbatimsep \fboxrule\sphinxverbatimborder |
---|
1174 | \ifspx@opt@verbatimwithframe\else\fboxrule\z@\fi |
---|
1175 | \let\FrameCommand \sphinxVerbatim@FrameCommand |
---|
1176 | \let\FirstFrameCommand\sphinxVerbatim@FirstFrameCommand |
---|
1177 | \let\MidFrameCommand \sphinxVerbatim@MidFrameCommand |
---|
1178 | \let\LastFrameCommand \sphinxVerbatim@LastFrameCommand |
---|
1179 | \ifspx@opt@verbatimhintsturnover\else |
---|
1180 | \let\sphinxVerbatim@Continued\@empty |
---|
1181 | \let\sphinxVerbatim@Continues\@empty |
---|
1182 | \fi |
---|
1183 | \ifspx@opt@verbatimwrapslines |
---|
1184 | % fancyvrb's Verbatim puts each input line in (unbreakable) horizontal boxes. |
---|
1185 | % This customization wraps each line from the input in a \vtop, thus |
---|
1186 | % allowing it to wrap and display on two or more lines in the latex output. |
---|
1187 | % - The codeline counter will be increased only once. |
---|
1188 | % - The wrapped material will not break across pages, it is impossible |
---|
1189 | % to achieve this without extensive rewrite of fancyvrb. |
---|
1190 | % - The (not used in sphinx) obeytabs option to Verbatim is |
---|
1191 | % broken by this change (showtabs and tabspace work). |
---|
1192 | \let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineWrap |
---|
1193 | \let\FV@Space\spx@verbatim@space |
---|
1194 | % Allow breaks at special characters using \PYG... macros. |
---|
1195 | \sphinxbreaksatspecials |
---|
1196 | % Breaks at punctuation characters . , ; ? ! and / (needs catcode activation) |
---|
1197 | \fvset{codes*=\sphinxbreaksviaactive}% |
---|
1198 | \else % end of conditional code for wrapping long code lines |
---|
1199 | \let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineNoWrap |
---|
1200 | \fi |
---|
1201 | \let\FancyVerbFormatLine\sphinxFancyVerbFormatLine |
---|
1202 | % workaround to fancyvrb's check of \@currenvir |
---|
1203 | \let\VerbatimEnvironment\sphinxVerbatimEnvironment |
---|
1204 | % workaround to fancyvrb's check of current list depth |
---|
1205 | \def\@toodeep {\advance\@listdepth\@ne}% |
---|
1206 | % The list environment is needed to control perfectly the vertical space. |
---|
1207 | % Note: \OuterFrameSep used by framed.sty is later set to \topsep hence 0pt. |
---|
1208 | % - if caption: distance from last text baseline to caption baseline is |
---|
1209 | % A+(B-F)+\ht\strutbox, A = \abovecaptionskip (default 10pt), B = |
---|
1210 | % \baselineskip, F is the framed.sty \FrameHeightAdjust macro, default 6pt. |
---|
1211 | % Formula valid for F < 10pt. |
---|
1212 | % - distance of baseline of caption to top of frame is like for tables: |
---|
1213 | % \sphinxbelowcaptionspace (=0.5\baselineskip) |
---|
1214 | % - if no caption: distance of last text baseline to code frame is S+(B-F), |
---|
1215 | % with S = \sphinxverbatimtopskip (=\smallskip) |
---|
1216 | % - and distance from bottom of frame to next text baseline is |
---|
1217 | % \baselineskip+\parskip. |
---|
1218 | % The \trivlist is used to avoid possible "too deeply nested" error. |
---|
1219 | \itemsep \z@skip |
---|
1220 | \topsep \z@skip |
---|
1221 | \partopsep \z@skip |
---|
1222 | % trivlist will set \parsep to \parskip = zero |
---|
1223 | % \leftmargin will be set to zero by trivlist |
---|
1224 | \rightmargin\z@ |
---|
1225 | \parindent \z@% becomes \itemindent. Default zero, but perhaps overwritten. |
---|
1226 | \trivlist\item\relax |
---|
1227 | \ifsphinxverbatimwithminipage\spx@inframedtrue\fi |
---|
1228 | % use a minipage if we are already inside a framed environment |
---|
1229 | \ifspx@inframed\noindent\begin{minipage}{\linewidth}\fi |
---|
1230 | \MakeFramed {% adapted over from framed.sty's snugshade environment |
---|
1231 | \advance\hsize-\width\@totalleftmargin\z@\linewidth\hsize\@setminipage |
---|
1232 | }% |
---|
1233 | % For grid placement from \strut's in \FancyVerbFormatLine |
---|
1234 | \lineskip\z@skip |
---|
1235 | % active comma should not be overwritten by \@noligs |
---|
1236 | \ifspx@opt@verbatimwrapslines |
---|
1237 | \let\verbatim@nolig@list \sphinx@verbatim@nolig@list |
---|
1238 | \fi |
---|
1239 | % will fetch its optional arguments if any |
---|
1240 | \OriginalVerbatim |
---|
1241 | } |
---|
1242 | {% |
---|
1243 | \endOriginalVerbatim |
---|
1244 | \par\unskip\@minipagefalse\endMakeFramed % from framed.sty snugshade |
---|
1245 | \ifspx@inframed\end{minipage}\fi |
---|
1246 | \endtrivlist |
---|
1247 | } |
---|
1248 | \newenvironment {sphinxVerbatimNoFrame} |
---|
1249 | {\spx@opt@verbatimwithframefalse |
---|
1250 | % needed for fancyvrb as literal code will end in \end{sphinxVerbatimNoFrame} |
---|
1251 | \def\sphinxVerbatimEnvironment{\gdef\FV@EnvironName{sphinxVerbatimNoFrame}}% |
---|
1252 | \begin{sphinxVerbatim}} |
---|
1253 | {\end{sphinxVerbatim}} |
---|
1254 | \newenvironment {sphinxVerbatimintable} |
---|
1255 | {% don't use a frame if in a table cell |
---|
1256 | \spx@opt@verbatimwithframefalse |
---|
1257 | \sphinxverbatimwithminipagetrue |
---|
1258 | % the literal block caption uses \sphinxcaption which is wrapper of \caption, |
---|
1259 | % but \caption must be modified because longtable redefines it to work only |
---|
1260 | % for the own table caption, and tabulary has multiple passes |
---|
1261 | \let\caption\sphinxfigcaption |
---|
1262 | % reduce above caption skip |
---|
1263 | \def\spx@abovecaptionskip{\sphinxverbatimsmallskipamount}% |
---|
1264 | \def\sphinxVerbatimEnvironment{\gdef\FV@EnvironName{sphinxVerbatimintable}}% |
---|
1265 | \begin{sphinxVerbatim}} |
---|
1266 | {\end{sphinxVerbatim}} |
---|
1267 | |
---|
1268 | |
---|
1269 | %% PARSED LITERALS |
---|
1270 | % allow long lines to wrap like they do in code-blocks |
---|
1271 | |
---|
1272 | % this should be kept in sync with definitions in sphinx.util.texescape |
---|
1273 | \newcommand*\sphinxbreaksattexescapedchars{% |
---|
1274 | \def\do##1##2% put potential break point before character |
---|
1275 | {\def##1{\discretionary{}{\sphinxafterbreak\char`##2}{\char`##2}}}% |
---|
1276 | \do\{\{\do\textless\<\do\#\#\do\%\%\do\$\$% {, <, #, %, $ |
---|
1277 | \def\do##1##2% put potential break point after character |
---|
1278 | {\def##1{\discretionary{\char`##2}{\sphinxafterbreak}{\char`##2}}}% |
---|
1279 | \do\_\_\do\}\}\do\textasciicircum\^\do\&\&% _, }, ^, &, |
---|
1280 | \do\textgreater\>\do\textasciitilde\~% >, ~ |
---|
1281 | } |
---|
1282 | \newcommand*\sphinxbreaksviaactiveinparsedliteral{% |
---|
1283 | \sphinxbreaksviaactive % by default handles . , ; ? ! / |
---|
1284 | \do\-% we need also the hyphen character (ends up "as is" in parsed-literal) |
---|
1285 | \lccode`\~`\~ % |
---|
1286 | % update \dospecials as it is used by \url |
---|
1287 | % but deactivation will already have been done hence this is unneeded: |
---|
1288 | % \expandafter\def\expandafter\dospecials\expandafter{\dospecials |
---|
1289 | % \sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist\do\-}% |
---|
1290 | } |
---|
1291 | \newcommand*\sphinxbreaksatspaceinparsedliteral{% |
---|
1292 | \lccode`~32 \lowercase{\let~}\spx@verbatim@space\lccode`\~`\~ |
---|
1293 | } |
---|
1294 | \newcommand*{\sphinxunactivateextras}{\let\do\@makeother |
---|
1295 | \sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist\do\-}% |
---|
1296 | % the \catcode13=5\relax (deactivate end of input lines) is left to callers |
---|
1297 | \newcommand*{\sphinxunactivateextrasandspace}{\catcode32=10\relax |
---|
1298 | \sphinxunactivateextras}% |
---|
1299 | % now for the modified alltt environment |
---|
1300 | \newenvironment{sphinxalltt} |
---|
1301 | {% at start of next line to workaround Emacs/AUCTeX issue with this file |
---|
1302 | \begin{alltt}% |
---|
1303 | \ifspx@opt@parsedliteralwraps |
---|
1304 | \sbox\sphinxcontinuationbox {\spx@opt@verbatimcontinued}% |
---|
1305 | \sbox\sphinxvisiblespacebox {\spx@opt@verbatimvisiblespace}% |
---|
1306 | \sphinxbreaksattexescapedchars |
---|
1307 | \sphinxbreaksviaactiveinparsedliteral |
---|
1308 | \sphinxbreaksatspaceinparsedliteral |
---|
1309 | % alltt takes care of the ' as derivative ("prime") in math mode |
---|
1310 | \everymath\expandafter{\the\everymath\sphinxunactivateextrasandspace |
---|
1311 | \catcode`\<=12\catcode`\>=12\catcode`\^=7\catcode`\_=8 }% |
---|
1312 | % not sure if displayed math (align,...) can end up in parsed-literal, anyway |
---|
1313 | \everydisplay\expandafter{\the\everydisplay |
---|
1314 | \catcode13=5 \sphinxunactivateextrasandspace |
---|
1315 | \catcode`\<=12\catcode`\>=12\catcode`\^=7\catcode`\_=8 }% |
---|
1316 | \fi } |
---|
1317 | {\end{alltt}} |
---|
1318 | |
---|
1319 | % Protect \href's first argument in contexts such as sphinxalltt (or |
---|
1320 | % \sphinxcode). Sphinx uses \#, \%, \& ... always inside \sphinxhref. |
---|
1321 | \protected\def\sphinxhref#1#2{{% |
---|
1322 | \sphinxunactivateextrasandspace % never do \scantokens with active space! |
---|
1323 | \endlinechar\m@ne\everyeof{{#2}}% keep catcode regime for #2 |
---|
1324 | \scantokens{\href{#1}}% normalise it for #1 during \href expansion |
---|
1325 | }} |
---|
1326 | % Same for \url. And also \nolinkurl for coherence. |
---|
1327 | \protected\def\sphinxurl#1{{% |
---|
1328 | \sphinxunactivateextrasandspace\everyeof{}% (<- precaution for \scantokens) |
---|
1329 | \endlinechar\m@ne\scantokens{\url{#1}}% |
---|
1330 | }} |
---|
1331 | \protected\def\sphinxnolinkurl#1{{% |
---|
1332 | \sphinxunactivateextrasandspace\everyeof{}% |
---|
1333 | \endlinechar\m@ne\scantokens{\nolinkurl{#1}}% |
---|
1334 | }} |
---|
1335 | |
---|
1336 | |
---|
1337 | %% TOPIC AND CONTENTS BOXES |
---|
1338 | % |
---|
1339 | % Again based on use of "framed.sty", this allows breakable framed boxes. |
---|
1340 | \long\def\spx@ShadowFBox#1{% |
---|
1341 | \leavevmode\begingroup |
---|
1342 | % first we frame the box #1 |
---|
1343 | \setbox\@tempboxa |
---|
1344 | \hbox{\vrule\@width\sphinxshadowrule |
---|
1345 | \vbox{\hrule\@height\sphinxshadowrule |
---|
1346 | \kern\sphinxshadowsep |
---|
1347 | \hbox{\kern\sphinxshadowsep #1\kern\sphinxshadowsep}% |
---|
1348 | \kern\sphinxshadowsep |
---|
1349 | \hrule\@height\sphinxshadowrule}% |
---|
1350 | \vrule\@width\sphinxshadowrule}% |
---|
1351 | % Now we add the shadow, like \shadowbox from fancybox.sty would do |
---|
1352 | \dimen@\dimexpr.5\sphinxshadowrule+\sphinxshadowsize\relax |
---|
1353 | \hbox{\vbox{\offinterlineskip |
---|
1354 | \hbox{\copy\@tempboxa\kern-.5\sphinxshadowrule |
---|
1355 | % add shadow on right side |
---|
1356 | \lower\sphinxshadowsize |
---|
1357 | \hbox{\vrule\@height\ht\@tempboxa \@width\dimen@}% |
---|
1358 | }% |
---|
1359 | \kern-\dimen@ % shift back vertically to bottom of frame |
---|
1360 | % and add shadow at bottom |
---|
1361 | \moveright\sphinxshadowsize |
---|
1362 | \vbox{\hrule\@width\wd\@tempboxa \@height\dimen@}% |
---|
1363 | }% |
---|
1364 | % move left by the size of right shadow so shadow adds no width |
---|
1365 | \kern-\sphinxshadowsize |
---|
1366 | }% |
---|
1367 | \endgroup |
---|
1368 | } |
---|
1369 | |
---|
1370 | % use framed.sty to allow page breaks in frame+shadow |
---|
1371 | % works well inside Lists and Quote-like environments |
---|
1372 | % produced by ``topic'' directive (or local contents) |
---|
1373 | % could nest if LaTeX writer authorized it |
---|
1374 | \newenvironment{sphinxShadowBox} |
---|
1375 | {\def\FrameCommand {\spx@ShadowFBox }% |
---|
1376 | \advance\spx@image@maxheight |
---|
1377 | -\dimexpr2\sphinxshadowrule |
---|
1378 | +2\sphinxshadowsep |
---|
1379 | +\sphinxshadowsize |
---|
1380 | +\baselineskip\relax |
---|
1381 | \let\sphinxincludegraphics\sphinxsafeincludegraphics |
---|
1382 | % configure framed.sty not to add extra vertical spacing |
---|
1383 | \ltx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}% |
---|
1384 | % the \trivlist will add the vertical spacing on top and bottom which is |
---|
1385 | % typical of center environment as used in Sphinx <= 1.4.1 |
---|
1386 | % the \noindent has the effet of an extra blank line on top, to |
---|
1387 | % imitate closely the layout from Sphinx <= 1.4.1; the \FrameHeightAdjust |
---|
1388 | % will put top part of frame on this baseline. |
---|
1389 | \def\FrameHeightAdjust {\baselineskip}% |
---|
1390 | % use package footnote to handle footnotes |
---|
1391 | \savenotes |
---|
1392 | \trivlist\item\noindent |
---|
1393 | % use a minipage if we are already inside a framed environment |
---|
1394 | \ifspx@inframed\begin{minipage}{\linewidth}\fi |
---|
1395 | \MakeFramed {\spx@inframedtrue |
---|
1396 | % framed.sty puts into "\width" the added width (=2shadowsep+2shadowrule) |
---|
1397 | % adjust \hsize to what the contents must use |
---|
1398 | \advance\hsize-\width |
---|
1399 | % adjust LaTeX parameters to behave properly in indented/quoted contexts |
---|
1400 | \FrameRestore |
---|
1401 | % typeset the contents as in a minipage (Sphinx <= 1.4.1 used a minipage and |
---|
1402 | % itemize/enumerate are therein typeset more tightly, we want to keep |
---|
1403 | % that). We copy-paste from LaTeX source code but don't do a real minipage. |
---|
1404 | \@pboxswfalse |
---|
1405 | \let\@listdepth\@mplistdepth \@mplistdepth\z@ |
---|
1406 | \@minipagerestore |
---|
1407 | \@setminipage |
---|
1408 | }% |
---|
1409 | }% |
---|
1410 | {% insert the "endminipage" code |
---|
1411 | \par\unskip |
---|
1412 | \@minipagefalse |
---|
1413 | \endMakeFramed |
---|
1414 | \ifspx@inframed\end{minipage}\fi |
---|
1415 | \endtrivlist |
---|
1416 | % output the stored footnotes |
---|
1417 | \spewnotes |
---|
1418 | } |
---|
1419 | |
---|
1420 | |
---|
1421 | %% NOTICES AND ADMONITIONS |
---|
1422 | % |
---|
1423 | % Some are quite plain |
---|
1424 | % the spx@notice@bordercolor etc are set in the sphinxadmonition environment |
---|
1425 | \newenvironment{sphinxlightbox}{% |
---|
1426 | \par\allowbreak |
---|
1427 | \noindent{\color{spx@notice@bordercolor}% |
---|
1428 | \rule{\linewidth}{\spx@notice@border}}\par\nobreak |
---|
1429 | {\parskip\z@skip\noindent}% |
---|
1430 | } |
---|
1431 | {% |
---|
1432 | % counteract previous possible negative skip (French lists!): |
---|
1433 | % (we can't cancel that any earlier \vskip introduced a potential pagebreak) |
---|
1434 | \sphinxvspacefixafterfrenchlists |
---|
1435 | \nobreak\vbox{\noindent\kern\@totalleftmargin |
---|
1436 | {\color{spx@notice@bordercolor}% |
---|
1437 | \rule[\dimexpr.4\baselineskip-\spx@notice@border\relax] |
---|
1438 | {\linewidth}{\spx@notice@border}}\hss}\allowbreak |
---|
1439 | }% end of sphinxlightbox environment definition |
---|
1440 | % may be renewenvironment'd by user for complete customization |
---|
1441 | \newenvironment{sphinxnote}[1] |
---|
1442 | {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} |
---|
1443 | \newenvironment{sphinxhint}[1] |
---|
1444 | {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} |
---|
1445 | \newenvironment{sphinximportant}[1] |
---|
1446 | {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} |
---|
1447 | \newenvironment{sphinxtip}[1] |
---|
1448 | {\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}} |
---|
1449 | % or just use the package options |
---|
1450 | % these are needed for common handling by notice environment of lightbox |
---|
1451 | % and heavybox but they are currently not used by lightbox environment |
---|
1452 | % and there is consequently no corresponding package option |
---|
1453 | \definecolor{sphinxnoteBgColor}{rgb}{1,1,1} |
---|
1454 | \definecolor{sphinxhintBgColor}{rgb}{1,1,1} |
---|
1455 | \definecolor{sphinximportantBgColor}{rgb}{1,1,1} |
---|
1456 | \definecolor{sphinxtipBgColor}{rgb}{1,1,1} |
---|
1457 | |
---|
1458 | % Others get more distinction |
---|
1459 | % Code adapted from framed.sty's "snugshade" environment. |
---|
1460 | % Nesting works (inner frames do not allow page breaks). |
---|
1461 | \newenvironment{sphinxheavybox}{\par |
---|
1462 | \setlength{\FrameRule}{\spx@notice@border}% |
---|
1463 | \setlength{\FrameSep}{\dimexpr.6\baselineskip-\FrameRule\relax} |
---|
1464 | \advance\spx@image@maxheight |
---|
1465 | -\dimexpr2\FrameRule |
---|
1466 | +2\FrameSep |
---|
1467 | +\baselineskip\relax % will happen again if nested, needed indeed! |
---|
1468 | \let\sphinxincludegraphics\sphinxsafeincludegraphics |
---|
1469 | % configure framed.sty's parameters to obtain same vertical spacing |
---|
1470 | % as for "light" boxes. We need for this to manually insert parskip glue and |
---|
1471 | % revert a skip done by framed before the frame. |
---|
1472 | \ltx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}% |
---|
1473 | \vspace{\FrameHeightAdjust} |
---|
1474 | % copied/adapted from framed.sty's snugshade |
---|
1475 | \def\FrameCommand##1{\hskip\@totalleftmargin |
---|
1476 | \fboxsep\FrameSep \fboxrule\FrameRule |
---|
1477 | \fcolorbox{spx@notice@bordercolor}{spx@notice@bgcolor}{##1}% |
---|
1478 | \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}% |
---|
1479 | \savenotes |
---|
1480 | % use a minipage if we are already inside a framed environment |
---|
1481 | \ifspx@inframed |
---|
1482 | \noindent\begin{minipage}{\linewidth} |
---|
1483 | \else |
---|
1484 | % handle case where notice is first thing in a list item (or is quoted) |
---|
1485 | \if@inlabel |
---|
1486 | \noindent\par\vspace{-\baselineskip} |
---|
1487 | \else |
---|
1488 | \vspace{\parskip} |
---|
1489 | \fi |
---|
1490 | \fi |
---|
1491 | \MakeFramed {\spx@inframedtrue |
---|
1492 | \advance\hsize-\width \@totalleftmargin\z@ \linewidth\hsize |
---|
1493 | % minipage initialization copied from LaTeX source code. |
---|
1494 | \@pboxswfalse |
---|
1495 | \let\@listdepth\@mplistdepth \@mplistdepth\z@ |
---|
1496 | \@minipagerestore |
---|
1497 | \@setminipage }% |
---|
1498 | } |
---|
1499 | {% |
---|
1500 | \par\unskip |
---|
1501 | \@minipagefalse |
---|
1502 | \endMakeFramed |
---|
1503 | \ifspx@inframed\end{minipage}\fi |
---|
1504 | % set footnotes at bottom of page |
---|
1505 | \spewnotes |
---|
1506 | % arrange for similar spacing below frame as for "light" boxes. |
---|
1507 | \vskip .4\baselineskip |
---|
1508 | }% end of sphinxheavybox environment definition |
---|
1509 | % may be renewenvironment'd by user for complete customization |
---|
1510 | \newenvironment{sphinxwarning}[1] |
---|
1511 | {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} |
---|
1512 | \newenvironment{sphinxcaution}[1] |
---|
1513 | {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} |
---|
1514 | \newenvironment{sphinxattention}[1] |
---|
1515 | {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} |
---|
1516 | \newenvironment{sphinxdanger}[1] |
---|
1517 | {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} |
---|
1518 | \newenvironment{sphinxerror}[1] |
---|
1519 | {\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}} |
---|
1520 | % or just use package options |
---|
1521 | |
---|
1522 | % the \colorlet of xcolor (if at all loaded) is overkill for our use case |
---|
1523 | \newcommand{\sphinxcolorlet}[2] |
---|
1524 | {\expandafter\let\csname\@backslashchar color@#1\expandafter\endcsname |
---|
1525 | \csname\@backslashchar color@#2\endcsname } |
---|
1526 | |
---|
1527 | % the main dispatch for all types of notices |
---|
1528 | \newenvironment{sphinxadmonition}[2]{% #1=type, #2=heading |
---|
1529 | % can't use #1 directly in definition of end part |
---|
1530 | \def\spx@noticetype {#1}% |
---|
1531 | % set parameters of heavybox/lightbox |
---|
1532 | \sphinxcolorlet{spx@notice@bordercolor}{sphinx#1BorderColor}% |
---|
1533 | \sphinxcolorlet{spx@notice@bgcolor}{sphinx#1BgColor}% |
---|
1534 | \spx@notice@border \dimexpr\csname spx@opt@#1border\endcsname\relax |
---|
1535 | % start specific environment, passing the heading as argument |
---|
1536 | \begin{sphinx#1}{#2}} |
---|
1537 | % workaround some LaTeX "feature" of \end command |
---|
1538 | {\edef\spx@temp{\noexpand\end{sphinx\spx@noticetype}}\spx@temp} |
---|
1539 | |
---|
1540 | |
---|
1541 | %% PYTHON DOCS MACROS AND ENVIRONMENTS |
---|
1542 | % (some macros here used by \maketitle in sphinxmanual.cls and sphinxhowto.cls) |
---|
1543 | |
---|
1544 | % \moduleauthor{name}{email} |
---|
1545 | \newcommand{\moduleauthor}[2]{} |
---|
1546 | |
---|
1547 | % \sectionauthor{name}{email} |
---|
1548 | \newcommand{\sectionauthor}[2]{} |
---|
1549 | |
---|
1550 | % Allow the release number to be specified independently of the |
---|
1551 | % \date{}. This allows the date to reflect the document's date and |
---|
1552 | % release to specify the release that is documented. |
---|
1553 | % |
---|
1554 | \newcommand{\py@release}{\releasename\space\version} |
---|
1555 | \newcommand{\version}{}% part of \py@release, used by title page and headers |
---|
1556 | % \releaseinfo is used on titlepage (sphinxmanual.cls, sphinxhowto.cls) |
---|
1557 | \newcommand{\releaseinfo}{} |
---|
1558 | \newcommand{\setreleaseinfo}[1]{\renewcommand{\releaseinfo}{#1}} |
---|
1559 | % this is inserted via template and #1=release config variable |
---|
1560 | \newcommand{\release}[1]{\renewcommand{\version}{#1}} |
---|
1561 | % this is defined by template to 'releasename' latex_elements key |
---|
1562 | \newcommand{\releasename}{} |
---|
1563 | % Fix issue in case release and releasename deliberately left blank |
---|
1564 | \newcommand{\sphinxheadercomma}{, }% used in fancyhdr header definition |
---|
1565 | \newcommand{\sphinxifemptyorblank}[1]{% |
---|
1566 | % test after one expansion of macro #1 if contents is empty or spaces |
---|
1567 | \if&\expandafter\@firstofone\detokenize\expandafter{#1}&% |
---|
1568 | \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}% |
---|
1569 | \AtBeginDocument {% |
---|
1570 | \sphinxifemptyorblank{\releasename} |
---|
1571 | {\sphinxifemptyorblank{\version}{\let\sphinxheadercomma\empty}{}} |
---|
1572 | {}% |
---|
1573 | }% |
---|
1574 | |
---|
1575 | % Allow specification of the author's address separately from the |
---|
1576 | % author's name. This can be used to format them differently, which |
---|
1577 | % is a good thing. |
---|
1578 | % |
---|
1579 | \newcommand{\py@authoraddress}{} |
---|
1580 | \newcommand{\authoraddress}[1]{\renewcommand{\py@authoraddress}{#1}} |
---|
1581 | |
---|
1582 | % {fulllineitems} is the main environment for object descriptions. |
---|
1583 | % |
---|
1584 | \newcommand{\py@itemnewline}[1]{% |
---|
1585 | \kern\labelsep |
---|
1586 | \@tempdima\linewidth |
---|
1587 | \advance\@tempdima \labelwidth\makebox[\@tempdima][l]{#1}% |
---|
1588 | \kern-\labelsep |
---|
1589 | } |
---|
1590 | |
---|
1591 | \newenvironment{fulllineitems}{% |
---|
1592 | \begin{list}{}{\labelwidth \leftmargin |
---|
1593 | \rightmargin \z@ \topsep -\parskip \partopsep \parskip |
---|
1594 | \itemsep -\parsep |
---|
1595 | \let\makelabel=\py@itemnewline}% |
---|
1596 | }{\end{list}} |
---|
1597 | |
---|
1598 | % Signatures, possibly multi-line |
---|
1599 | % |
---|
1600 | \newlength{\py@argswidth} |
---|
1601 | \newcommand{\py@sigparams}[2]{% |
---|
1602 | \parbox[t]{\py@argswidth}{#1\sphinxcode{)}#2}} |
---|
1603 | \newcommand{\pysigline}[1]{\item[{#1}]} |
---|
1604 | \newcommand{\pysiglinewithargsret}[3]{% |
---|
1605 | \settowidth{\py@argswidth}{#1\sphinxcode{(}}% |
---|
1606 | \addtolength{\py@argswidth}{-2\py@argswidth}% |
---|
1607 | \addtolength{\py@argswidth}{\linewidth}% |
---|
1608 | \item[{#1\sphinxcode{(}\py@sigparams{#2}{#3}}]} |
---|
1609 | \newcommand{\pysigstartmultiline}{% |
---|
1610 | \def\pysigstartmultiline{\vskip\smallskipamount\parskip\z@skip\itemsep\z@skip}% |
---|
1611 | \edef\pysigstopmultiline |
---|
1612 | {\noexpand\leavevmode\parskip\the\parskip\relax\itemsep\the\itemsep\relax}% |
---|
1613 | \parskip\z@skip\itemsep\z@skip |
---|
1614 | } |
---|
1615 | |
---|
1616 | % Production lists |
---|
1617 | % |
---|
1618 | \newenvironment{productionlist}{% |
---|
1619 | % \def\sphinxoptional##1{{\Large[}##1{\Large]}} |
---|
1620 | \def\production##1##2{\\\sphinxcode{\sphinxupquote{##1}}&::=&\sphinxcode{\sphinxupquote{##2}}}% |
---|
1621 | \def\productioncont##1{\\& &\sphinxcode{\sphinxupquote{##1}}}% |
---|
1622 | \parindent=2em |
---|
1623 | \indent |
---|
1624 | \setlength{\LTpre}{0pt}% |
---|
1625 | \setlength{\LTpost}{0pt}% |
---|
1626 | \begin{longtable}[l]{lcl} |
---|
1627 | }{% |
---|
1628 | \end{longtable} |
---|
1629 | } |
---|
1630 | |
---|
1631 | % Definition lists; requested by AMK for HOWTO documents. Probably useful |
---|
1632 | % elsewhere as well, so keep in in the general style support. |
---|
1633 | % |
---|
1634 | \newenvironment{definitions}{% |
---|
1635 | \begin{description}% |
---|
1636 | \def\term##1{\item[{##1}]\mbox{}\\*[0mm]}% |
---|
1637 | }{% |
---|
1638 | \end{description}% |
---|
1639 | } |
---|
1640 | |
---|
1641 | %% FROM DOCTUTILS LATEX WRITER |
---|
1642 | % |
---|
1643 | % The following is stuff copied from docutils' latex writer. |
---|
1644 | % |
---|
1645 | \newcommand{\optionlistlabel}[1]{\normalfont\bfseries #1 \hfill}% \bf deprecated |
---|
1646 | \newenvironment{optionlist}[1] |
---|
1647 | {\begin{list}{} |
---|
1648 | {\setlength{\labelwidth}{#1} |
---|
1649 | \setlength{\rightmargin}{1cm} |
---|
1650 | \setlength{\leftmargin}{\rightmargin} |
---|
1651 | \addtolength{\leftmargin}{\labelwidth} |
---|
1652 | \addtolength{\leftmargin}{\labelsep} |
---|
1653 | \renewcommand{\makelabel}{\optionlistlabel}} |
---|
1654 | }{\end{list}} |
---|
1655 | |
---|
1656 | \newlength{\lineblockindentation} |
---|
1657 | \setlength{\lineblockindentation}{2.5em} |
---|
1658 | \newenvironment{lineblock}[1] |
---|
1659 | {\begin{list}{} |
---|
1660 | {\setlength{\partopsep}{\parskip} |
---|
1661 | \addtolength{\partopsep}{\baselineskip} |
---|
1662 | \topsep0pt\itemsep0.15\baselineskip\parsep0pt |
---|
1663 | \leftmargin#1\relax} |
---|
1664 | \raggedright} |
---|
1665 | {\end{list}} |
---|
1666 | |
---|
1667 | % From docutils.writers.latex2e |
---|
1668 | % inline markup (custom roles) |
---|
1669 | % \DUrole{#1}{#2} tries \DUrole#1{#2} |
---|
1670 | \providecommand*{\DUrole}[2]{% |
---|
1671 | \ifcsname DUrole\detokenize{#1}\endcsname |
---|
1672 | \csname DUrole\detokenize{#1}\endcsname{#2}% |
---|
1673 | \else% backwards compatibility: try \docutilsrole#1{#2} |
---|
1674 | \ifcsname docutilsrole\detokenize{#1}\endcsname |
---|
1675 | \csname docutilsrole\detokenize{#1}\endcsname{#2}% |
---|
1676 | \else |
---|
1677 | #2% |
---|
1678 | \fi |
---|
1679 | \fi |
---|
1680 | } |
---|
1681 | |
---|
1682 | \providecommand*{\DUprovidelength}[2]{% |
---|
1683 | \ifdefined#1\else\newlength{#1}\setlength{#1}{#2}\fi |
---|
1684 | } |
---|
1685 | |
---|
1686 | \DUprovidelength{\DUlineblockindent}{2.5em} |
---|
1687 | \ifdefined\DUlineblock\else |
---|
1688 | \newenvironment{DUlineblock}[1]{% |
---|
1689 | \list{}{\setlength{\partopsep}{\parskip} |
---|
1690 | \addtolength{\partopsep}{\baselineskip} |
---|
1691 | \setlength{\topsep}{0pt} |
---|
1692 | \setlength{\itemsep}{0.15\baselineskip} |
---|
1693 | \setlength{\parsep}{0pt} |
---|
1694 | \setlength{\leftmargin}{#1}} |
---|
1695 | \raggedright |
---|
1696 | } |
---|
1697 | {\endlist} |
---|
1698 | \fi |
---|
1699 | |
---|
1700 | %% TEXT STYLING |
---|
1701 | % |
---|
1702 | % to obtain straight quotes we execute \@noligs as patched by upquote, and |
---|
1703 | % \scantokens is needed in cases where it would be too late for the macro to |
---|
1704 | % first set catcodes and then fetch its argument. We also make the contents |
---|
1705 | % breakable at non-escaped . , ; ? ! / using \sphinxbreaksviaactive. |
---|
1706 | % the macro must be protected if it ends up used in moving arguments, |
---|
1707 | % in 'alltt' \@noligs is done already, and the \scantokens must be avoided. |
---|
1708 | \protected\def\sphinxupquote#1{{\def\@tempa{alltt}% |
---|
1709 | \ifx\@tempa\@currenvir\else |
---|
1710 | \ifspx@opt@inlineliteralwraps |
---|
1711 | \sphinxbreaksviaactive\let\sphinxafterbreak\empty |
---|
1712 | % do not overwrite the comma set-up |
---|
1713 | \let\verbatim@nolig@list\sphinx@literal@nolig@list |
---|
1714 | \fi |
---|
1715 | % fix a space-gobbling issue due to LaTeX's original \do@noligs |
---|
1716 | \let\do@noligs\sphinx@do@noligs |
---|
1717 | \@noligs\endlinechar\m@ne\everyeof{}% (<- in case inside \sphinxhref) |
---|
1718 | \expandafter\scantokens |
---|
1719 | \fi {{#1}}}}% extra brace pair to fix end-space gobbling issue... |
---|
1720 | \def\sphinx@do@noligs #1{\catcode`#1\active\begingroup\lccode`\~`#1\relax |
---|
1721 | \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1 }}} |
---|
1722 | \def\sphinx@literal@nolig@list {\do\`\do\<\do\>\do\'\do\-}% |
---|
1723 | |
---|
1724 | % Some custom font markup commands. |
---|
1725 | \protected\def\sphinxstrong#1{\textbf{#1}} |
---|
1726 | \protected\def\sphinxcode#1{\texttt{#1}} |
---|
1727 | \protected\def\sphinxbfcode#1{\textbf{\sphinxcode{#1}}} |
---|
1728 | \protected\def\sphinxemail#1{\textsf{#1}} |
---|
1729 | \protected\def\sphinxtablecontinued#1{\textsf{#1}} |
---|
1730 | \protected\def\sphinxtitleref#1{\emph{#1}} |
---|
1731 | \protected\def\sphinxmenuselection#1{\emph{#1}} |
---|
1732 | \protected\def\sphinxguilabel#1{\emph{#1}} |
---|
1733 | \protected\def\sphinxaccelerator#1{\underline{#1}} |
---|
1734 | \protected\def\sphinxcrossref#1{\emph{#1}} |
---|
1735 | \protected\def\sphinxtermref#1{\emph{#1}} |
---|
1736 | % \optional is used for ``[, arg]``, i.e. desc_optional nodes. |
---|
1737 | \long\protected\def\sphinxoptional#1{% |
---|
1738 | {\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}} |
---|
1739 | |
---|
1740 | % additional customizable styling |
---|
1741 | \def\sphinxstyleindexentry #1{\texttt{#1}} |
---|
1742 | \def\sphinxstyleindexextra #1{ (\emph{#1})} |
---|
1743 | \def\sphinxstyleindexpageref #1{, \pageref{#1}} |
---|
1744 | \def\sphinxstyleindexpagemain#1{\textbf{#1}} |
---|
1745 | \protected\def\spxentry#1{#1}% will get \let to \sphinxstyleindexentry in index |
---|
1746 | \protected\def\spxextra#1{#1}% will get \let to \sphinxstyleindexextra in index |
---|
1747 | \def\sphinxstyleindexlettergroup #1% |
---|
1748 | {{\Large\sffamily#1}\nopagebreak\vspace{1mm}} |
---|
1749 | \def\sphinxstyleindexlettergroupDefault #1% |
---|
1750 | {{\Large\sffamily\sphinxnonalphabeticalgroupname}\nopagebreak\vspace{1mm}} |
---|
1751 | \protected\def\sphinxstyletopictitle #1{\textbf{#1}\par\medskip} |
---|
1752 | \let\sphinxstylesidebartitle\sphinxstyletopictitle |
---|
1753 | \protected\def\sphinxstyleothertitle #1{\textbf{#1}} |
---|
1754 | \protected\def\sphinxstylesidebarsubtitle #1{~\\\textbf{#1} \smallskip} |
---|
1755 | % \text.. commands do not allow multiple paragraphs |
---|
1756 | \protected\def\sphinxstyletheadfamily {\sffamily} |
---|
1757 | \protected\def\sphinxstyleemphasis #1{\emph{#1}} |
---|
1758 | \protected\def\sphinxstyleliteralemphasis#1{\emph{\sphinxcode{#1}}} |
---|
1759 | \protected\def\sphinxstylestrong #1{\textbf{#1}} |
---|
1760 | \protected\def\sphinxstyleliteralstrong#1{\sphinxbfcode{#1}} |
---|
1761 | \protected\def\sphinxstyleabbreviation #1{\textsc{#1}} |
---|
1762 | \protected\def\sphinxstyleliteralintitle#1{\sphinxcode{#1}} |
---|
1763 | \newcommand*\sphinxstylecodecontinued[1]{\footnotesize(#1)}% |
---|
1764 | \newcommand*\sphinxstylecodecontinues[1]{\footnotesize(#1)}% |
---|
1765 | % figure legend comes after caption and may contain arbitrary body elements |
---|
1766 | \newenvironment{sphinxlegend}{\par\small}{\par} |
---|
1767 | % reduce hyperref "Token not allowed in a PDF string" warnings on PDF builds |
---|
1768 | \AtBeginDocument{\pdfstringdefDisableCommands{% |
---|
1769 | % all "protected" macros possibly ending up in section titles should be here |
---|
1770 | \let\sphinxstyleemphasis \@firstofone |
---|
1771 | \let\sphinxstyleliteralemphasis \@firstofone |
---|
1772 | \let\sphinxstylestrong \@firstofone |
---|
1773 | \let\sphinxstyleliteralstrong \@firstofone |
---|
1774 | \let\sphinxstyleabbreviation \@firstofone |
---|
1775 | \let\sphinxstyleliteralintitle \@firstofone |
---|
1776 | \let\sphinxupquote \@firstofone |
---|
1777 | \let\sphinxstrong \@firstofone |
---|
1778 | \let\sphinxcode \@firstofone |
---|
1779 | \let\sphinxbfcode \@firstofone |
---|
1780 | \let\sphinxemail \@firstofone |
---|
1781 | \let\sphinxcrossref \@firstofone |
---|
1782 | \let\sphinxtermref \@firstofone |
---|
1783 | }} |
---|
1784 | |
---|
1785 | % For curly braces inside \index macro |
---|
1786 | \def\sphinxleftcurlybrace{\{} |
---|
1787 | \def\sphinxrightcurlybrace{\}} |
---|
1788 | |
---|
1789 | % Declare Unicode characters used by linux tree command to pdflatex utf8/utf8x |
---|
1790 | \def\spx@bd#1#2{% |
---|
1791 | \leavevmode |
---|
1792 | \begingroup |
---|
1793 | \ifx\spx@bd@height \@undefined\def\spx@bd@height{\baselineskip}\fi |
---|
1794 | \ifx\spx@bd@width \@undefined\setbox0\hbox{0}\def\spx@bd@width{\wd0 }\fi |
---|
1795 | \ifx\spx@bd@thickness\@undefined\def\spx@bd@thickness{.6\p@}\fi |
---|
1796 | \ifx\spx@bd@lower \@undefined\def\spx@bd@lower{\dp\strutbox}\fi |
---|
1797 | \lower\spx@bd@lower#1{#2}% |
---|
1798 | \endgroup |
---|
1799 | }% |
---|
1800 | \@namedef{sphinx@u2500}% BOX DRAWINGS LIGHT HORIZONTAL |
---|
1801 | {\spx@bd{\vbox to\spx@bd@height} |
---|
1802 | {\vss\hrule\@height\spx@bd@thickness |
---|
1803 | \@width\spx@bd@width\vss}}% |
---|
1804 | \@namedef{sphinx@u2502}% BOX DRAWINGS LIGHT VERTICAL |
---|
1805 | {\spx@bd{\hb@xt@\spx@bd@width} |
---|
1806 | {\hss\vrule\@height\spx@bd@height |
---|
1807 | \@width \spx@bd@thickness\hss}}% |
---|
1808 | \@namedef{sphinx@u2514}% BOX DRAWINGS LIGHT UP AND RIGHT |
---|
1809 | {\spx@bd{\hb@xt@\spx@bd@width} |
---|
1810 | {\hss\raise.5\spx@bd@height |
---|
1811 | \hb@xt@\z@{\hss\vrule\@height.5\spx@bd@height |
---|
1812 | \@width \spx@bd@thickness\hss}% |
---|
1813 | \vbox to\spx@bd@height{\vss\hrule\@height\spx@bd@thickness |
---|
1814 | \@width.5\spx@bd@width\vss}}}% |
---|
1815 | \@namedef{sphinx@u251C}% BOX DRAWINGS LIGHT VERTICAL AND RIGHT |
---|
1816 | {\spx@bd{\hb@xt@\spx@bd@width} |
---|
1817 | {\hss |
---|
1818 | \hb@xt@\z@{\hss\vrule\@height\spx@bd@height |
---|
1819 | \@width \spx@bd@thickness\hss}% |
---|
1820 | \vbox to\spx@bd@height{\vss\hrule\@height\spx@bd@thickness |
---|
1821 | \@width.5\spx@bd@width\vss}}}% |
---|
1822 | \protected\def\sphinxunichar#1{\@nameuse{sphinx@u#1}}% |
---|
1823 | |
---|
1824 | % Tell TeX about pathological hyphenation cases: |
---|
1825 | \hyphenation{Base-HTTP-Re-quest-Hand-ler} |
---|
1826 | \endinput |
---|