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