This commit is contained in:
stsh 2022-02-17 11:38:42 +01:00
parent 3f35f887ec
commit f86c03e000
58 changed files with 12591 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

101
LICRcyr2utf8.xdy Normal file
View File

@ -0,0 +1,101 @@
;; -*- coding: utf-8; mode: Lisp; -*-
;; style file for xindy
;; filename: LICRcyr2utf8.xdy
;; description: style file for xindy which maps back LaTeX Internal
;; Character Representation of Cyrillic to utf-8
;; usage: for use with pdflatex produced .idx files.
;; Contributed by the Sphinx team, July 2018.
(merge-rule "\IeC {\'\CYRG }" "Ѓ" :string)
(merge-rule "\IeC {\'\CYRK }" "Ќ" :string)
(merge-rule "\IeC {\'\cyrg }" "ѓ" :string)
(merge-rule "\IeC {\'\cyrk }" "ќ" :string)
(merge-rule "\IeC {\CYRA }" "А" :string)
(merge-rule "\IeC {\CYRB }" "Б" :string)
(merge-rule "\IeC {\CYRC }" "Ц" :string)
(merge-rule "\IeC {\CYRCH }" "Ч" :string)
(merge-rule "\IeC {\CYRD }" "Д" :string)
(merge-rule "\IeC {\CYRDJE }" "Ђ" :string)
(merge-rule "\IeC {\CYRDZE }" "Ѕ" :string)
(merge-rule "\IeC {\CYRDZHE }" "Џ" :string)
(merge-rule "\IeC {\CYRE }" "Е" :string)
(merge-rule "\IeC {\CYREREV }" "Э" :string)
(merge-rule "\IeC {\CYRERY }" "Ы" :string)
(merge-rule "\IeC {\CYRF }" "Ф" :string)
(merge-rule "\IeC {\CYRG }" "Г" :string)
(merge-rule "\IeC {\CYRGUP }" "Ґ" :string)
(merge-rule "\IeC {\CYRH }" "Х" :string)
(merge-rule "\IeC {\CYRHRDSN }" "Ъ" :string)
(merge-rule "\IeC {\CYRI }" "И" :string)
(merge-rule "\IeC {\CYRIE }" "Є" :string)
(merge-rule "\IeC {\CYRII }" "І" :string)
(merge-rule "\IeC {\CYRISHRT }" "Й" :string)
(merge-rule "\IeC {\CYRJE }" "Ј" :string)
(merge-rule "\IeC {\CYRK }" "К" :string)
(merge-rule "\IeC {\CYRL }" "Л" :string)
(merge-rule "\IeC {\CYRLJE }" "Љ" :string)
(merge-rule "\IeC {\CYRM }" "М" :string)
(merge-rule "\IeC {\CYRN }" "Н" :string)
(merge-rule "\IeC {\CYRNJE }" "Њ" :string)
(merge-rule "\IeC {\CYRO }" "О" :string)
(merge-rule "\IeC {\CYRP }" "П" :string)
(merge-rule "\IeC {\CYRR }" "Р" :string)
(merge-rule "\IeC {\CYRS }" "С" :string)
(merge-rule "\IeC {\CYRSFTSN }" "Ь" :string)
(merge-rule "\IeC {\CYRSH }" "Ш" :string)
(merge-rule "\IeC {\CYRSHCH }" "Щ" :string)
(merge-rule "\IeC {\CYRT }" "Т" :string)
(merge-rule "\IeC {\CYRTSHE }" "Ћ" :string)
(merge-rule "\IeC {\CYRU }" "У" :string)
(merge-rule "\IeC {\CYRUSHRT }" "Ў" :string)
(merge-rule "\IeC {\CYRV }" "В" :string)
(merge-rule "\IeC {\CYRYA }" "Я" :string)
(merge-rule "\IeC {\CYRYI }" "Ї" :string)
(merge-rule "\IeC {\CYRYO }" "Ё" :string)
(merge-rule "\IeC {\CYRYU }" "Ю" :string)
(merge-rule "\IeC {\CYRZ }" "З" :string)
(merge-rule "\IeC {\CYRZH }" "Ж" :string)
(merge-rule "\IeC {\cyra }" "а" :string)
(merge-rule "\IeC {\cyrb }" "б" :string)
(merge-rule "\IeC {\cyrc }" "ц" :string)
(merge-rule "\IeC {\cyrch }" "ч" :string)
(merge-rule "\IeC {\cyrd }" "д" :string)
(merge-rule "\IeC {\cyrdje }" "ђ" :string)
(merge-rule "\IeC {\cyrdze }" "ѕ" :string)
(merge-rule "\IeC {\cyrdzhe }" "џ" :string)
(merge-rule "\IeC {\cyre }" "е" :string)
(merge-rule "\IeC {\cyrerev }" "э" :string)
(merge-rule "\IeC {\cyrery }" "ы" :string)
(merge-rule "\IeC {\cyrf }" "ф" :string)
(merge-rule "\IeC {\cyrg }" "г" :string)
(merge-rule "\IeC {\cyrgup }" "ґ" :string)
(merge-rule "\IeC {\cyrh }" "х" :string)
(merge-rule "\IeC {\cyrhrdsn }" "ъ" :string)
(merge-rule "\IeC {\cyri }" "и" :string)
(merge-rule "\IeC {\cyrie }" "є" :string)
(merge-rule "\IeC {\cyrii }" "і" :string)
(merge-rule "\IeC {\cyrishrt }" "й" :string)
(merge-rule "\IeC {\cyrje }" "ј" :string)
(merge-rule "\IeC {\cyrk }" "к" :string)
(merge-rule "\IeC {\cyrl }" "л" :string)
(merge-rule "\IeC {\cyrlje }" "љ" :string)
(merge-rule "\IeC {\cyrm }" "м" :string)
(merge-rule "\IeC {\cyrn }" "н" :string)
(merge-rule "\IeC {\cyrnje }" "њ" :string)
(merge-rule "\IeC {\cyro }" "о" :string)
(merge-rule "\IeC {\cyrp }" "п" :string)
(merge-rule "\IeC {\cyrr }" "р" :string)
(merge-rule "\IeC {\cyrs }" "с" :string)
(merge-rule "\IeC {\cyrsftsn }" "ь" :string)
(merge-rule "\IeC {\cyrsh }" "ш" :string)
(merge-rule "\IeC {\cyrshch }" "щ" :string)
(merge-rule "\IeC {\cyrt }" "т" :string)
(merge-rule "\IeC {\cyrtshe }" "ћ" :string)
(merge-rule "\IeC {\cyru }" "у" :string)
(merge-rule "\IeC {\cyrushrt }" "ў" :string)
(merge-rule "\IeC {\cyrv }" "в" :string)
(merge-rule "\IeC {\cyrya }" "я" :string)
(merge-rule "\IeC {\cyryi }" "ї" :string)
(merge-rule "\IeC {\cyryo }" "ё" :string)
(merge-rule "\IeC {\cyryu }" "ю" :string)
(merge-rule "\IeC {\cyrz }" "з" :string)
(merge-rule "\IeC {\cyrzh }" "ж" :string)

239
LICRlatin2utf8.xdy Normal file
View File

@ -0,0 +1,239 @@
;; style file for xindy
;; filename: LICRlatin2utf8.xdy
;; description: style file for xindy which maps back LaTeX Internal
;; Character Representation of letters (as arising in .idx index
;; file) to UTF-8 encoding for correct sorting by xindy.
;; usage: for use with the pdflatex engine,
;; *not* for use with xelatex or lualatex.
;;
;; This is based upon xindy's distributed file tex/inputenc/utf8.xdy.
;; The modifications include:
;;
;; - Updates for compatibility with current LaTeX macro encoding.
;;
;; - Systematic usage of the \IeC {...} mark-up, because mark-up in
;; tex/inputenc/utf8.xdy was using it on seemingly random basis, and
;; Sphinx coercing of xindy usability for both Latin and Cyrillic scripts
;; with pdflatex requires its systematic presence here.
;;
;; - Support for some extra letters: Ÿ, Ŋ, ŋ, Œ, œ, IJ, ij, ȷ and ẞ.
;;
;; Indeed Sphinx needs to support for pdflatex engine all Unicode letters
;; available in TeX T1 font encoding. The above letters are found in
;; that encoding but not in the Latin1, 2, 3 charsets which are those
;; covered by original tex/inputenc/utf8.xdy.
;;
;; - There is a problem that ȷ is not supported out-of-the box by LaTeX
;; with inputenc, one must add explicitly
;; \DeclareUnicodeCharacter{0237}{\j}
;; to preamble of LaTeX document. However this character is not supported
;; by the TeX "times" font used by default by Sphinx for pdflatex engine.
;;
;; **Update**: since LaTeX 2018/12/01, the \j as well as \SS, \k{} and
;; \.{} need no extra user declaration anymore.
;;
;; - ẞ needs \DeclareUnicodeCharacter{1E9E}{\SS} (but ß needs no extra set-up).
;;
;; - U+02DB (˛) and U+02D9 (˙) are also not supported by inputenc
;; out of the box and require
;; \DeclareUnicodeCharacter{02DB}{\k{}}
;; \DeclareUnicodeCharacter{02D9}{\.{}}
;; to be added to preamble.
;;
;; - U+0127 ħ and U+0126 Ħ are absent from TeX T1+TS1 font encodings.
;;
;; - Characters Ŋ and ŋ are not supported by TeX font "times" used by
;; default by Sphinx for pdflatex engine but they are supported by
;; some TeX fonts, in particular by the default LaTeX font for T1
;; encoding.
;;
;; - " and ~ must be escaped as ~" and resp. ~~ in xindy merge rules.
;;
;; Contributed by the Sphinx team, July 2018.
;;
;; See sphinx.xdy for superior figures, as they are escaped by LaTeX writer.
(merge-rule "\IeC {\textonesuperior }" "¹" :string)
(merge-rule "\IeC {\texttwosuperior }" "²" :string)
(merge-rule "\IeC {\textthreesuperior }" "³" :string)
(merge-rule "\IeC {\'a}" "á" :string)
(merge-rule "\IeC {\'A}" "Á" :string)
(merge-rule "\IeC {\`a}" "à" :string)
(merge-rule "\IeC {\`A}" "À" :string)
(merge-rule "\IeC {\^a}" "â" :string)
(merge-rule "\IeC {\^A}" "Â" :string)
(merge-rule "\IeC {\~"a}" "ä" :string)
(merge-rule "\IeC {\~"A}" "Ä" :string)
(merge-rule "\IeC {\~~a}" "ã" :string)
(merge-rule "\IeC {\~~A}" "Ã" :string)
(merge-rule "\IeC {\c c}" "ç" :string)
(merge-rule "\IeC {\c C}" "Ç" :string)
(merge-rule "\IeC {\'c}" "ć" :string)
(merge-rule "\IeC {\'C}" "Ć" :string)
(merge-rule "\IeC {\^c}" "ĉ" :string)
(merge-rule "\IeC {\^C}" "Ĉ" :string)
(merge-rule "\IeC {\.c}" "ċ" :string)
(merge-rule "\IeC {\.C}" "Ċ" :string)
(merge-rule "\IeC {\c s}" "ş" :string)
(merge-rule "\IeC {\c S}" "Ş" :string)
(merge-rule "\IeC {\c t}" "ţ" :string)
(merge-rule "\IeC {\c T}" "Ţ" :string)
(merge-rule "\IeC {\-}" "­" :string); soft hyphen
(merge-rule "\IeC {\textdiv }" "÷" :string)
(merge-rule "\IeC {\'e}" "é" :string)
(merge-rule "\IeC {\'E}" "É" :string)
(merge-rule "\IeC {\`e}" "è" :string)
(merge-rule "\IeC {\`E}" "È" :string)
(merge-rule "\IeC {\^e}" "ê" :string)
(merge-rule "\IeC {\^E}" "Ê" :string)
(merge-rule "\IeC {\~"e}" "ë" :string)
(merge-rule "\IeC {\~"E}" "Ë" :string)
(merge-rule "\IeC {\^g}" "ĝ" :string)
(merge-rule "\IeC {\^G}" "Ĝ" :string)
(merge-rule "\IeC {\.g}" "ġ" :string)
(merge-rule "\IeC {\.G}" "Ġ" :string)
(merge-rule "\IeC {\^h}" "ĥ" :string)
(merge-rule "\IeC {\^H}" "Ĥ" :string)
(merge-rule "\IeC {\H o}" "ő" :string)
(merge-rule "\IeC {\H O}" "Ő" :string)
(merge-rule "\IeC {\textacutedbl }" "˝" :string)
(merge-rule "\IeC {\H u}" "ű" :string)
(merge-rule "\IeC {\H U}" "Ű" :string)
(merge-rule "\IeC {\ae }" "æ" :string)
(merge-rule "\IeC {\AE }" "Æ" :string)
(merge-rule "\IeC {\textcopyright }" "©" :string)
(merge-rule "\IeC {\c \ }" "¸" :string)
(merge-rule "\IeC {\dh }" "ð" :string)
(merge-rule "\IeC {\DH }" "Ð" :string)
(merge-rule "\IeC {\dj }" "đ" :string)
(merge-rule "\IeC {\DJ }" "Đ" :string)
(merge-rule "\IeC {\guillemotleft }" "«" :string)
(merge-rule "\IeC {\guillemotright }" "»" :string)
(merge-rule "\IeC {\'\i }" "í" :string)
(merge-rule "\IeC {\`\i }" "ì" :string)
(merge-rule "\IeC {\^\i }" "î" :string)
(merge-rule "\IeC {\~"\i }" "ï" :string)
(merge-rule "\IeC {\i }" "ı" :string)
(merge-rule "\IeC {\^\j }" "ĵ" :string)
(merge-rule "\IeC {\k {}}" "˛" :string)
(merge-rule "\IeC {\l }" "ł" :string)
(merge-rule "\IeC {\L }" "Ł" :string)
(merge-rule "\IeC {\nobreakspace }" " " :string)
(merge-rule "\IeC {\o }" "ø" :string)
(merge-rule "\IeC {\O }" "Ø" :string)
(merge-rule "\IeC {\textsterling }" "£" :string)
(merge-rule "\IeC {\textparagraph }" "¶" :string)
(merge-rule "\IeC {\ss }" "ß" :string)
(merge-rule "\IeC {\textsection }" "§" :string)
(merge-rule "\IeC {\textbrokenbar }" "¦" :string)
(merge-rule "\IeC {\textcent }" "¢" :string)
(merge-rule "\IeC {\textcurrency }" "¤" :string)
(merge-rule "\IeC {\textdegree }" "°" :string)
(merge-rule "\IeC {\textexclamdown }" "¡" :string)
(merge-rule "\IeC {\texthbar }" "ħ" :string)
(merge-rule "\IeC {\textHbar }" "Ħ" :string)
(merge-rule "\IeC {\textonehalf }" "½" :string)
(merge-rule "\IeC {\textonequarter }" "¼" :string)
(merge-rule "\IeC {\textordfeminine }" "ª" :string)
(merge-rule "\IeC {\textordmasculine }" "º" :string)
(merge-rule "\IeC {\textperiodcentered }" "·" :string)
(merge-rule "\IeC {\textquestiondown }" "¿" :string)
(merge-rule "\IeC {\textregistered }" "®" :string)
(merge-rule "\IeC {\textthreequarters }" "¾" :string)
(merge-rule "\IeC {\textyen }" "¥" :string)
(merge-rule "\IeC {\th }" "þ" :string)
(merge-rule "\IeC {\TH }" "Þ" :string)
(merge-rule "\IeC {\'I}" "Í" :string)
(merge-rule "\IeC {\`I}" "Ì" :string)
(merge-rule "\IeC {\^I}" "Î" :string)
(merge-rule "\IeC {\~"I}" "Ï" :string)
(merge-rule "\IeC {\.I}" "İ" :string)
(merge-rule "\IeC {\^J}" "Ĵ" :string)
(merge-rule "\IeC {\k a}" "ą" :string)
(merge-rule "\IeC {\k A}" "Ą" :string)
(merge-rule "\IeC {\k e}" "ę" :string)
(merge-rule "\IeC {\k E}" "Ę" :string)
(merge-rule "\IeC {\'l}" "ĺ" :string)
(merge-rule "\IeC {\'L}" "Ĺ" :string)
(merge-rule "\IeC {\textlnot }" "¬" :string)
(merge-rule "\IeC {\textmu }" "µ" :string)
(merge-rule "\IeC {\'n}" "ń" :string)
(merge-rule "\IeC {\'N}" "Ń" :string)
(merge-rule "\IeC {\~~n}" "ñ" :string)
(merge-rule "\IeC {\~~N}" "Ñ" :string)
(merge-rule "\IeC {\'o}" "ó" :string)
(merge-rule "\IeC {\'O}" "Ó" :string)
(merge-rule "\IeC {\`o}" "ò" :string)
(merge-rule "\IeC {\`O}" "Ò" :string)
(merge-rule "\IeC {\^o}" "ô" :string)
(merge-rule "\IeC {\^O}" "Ô" :string)
(merge-rule "\IeC {\~"o}" "ö" :string)
(merge-rule "\IeC {\~"O}" "Ö" :string)
(merge-rule "\IeC {\~~o}" "õ" :string)
(merge-rule "\IeC {\~~O}" "Õ" :string)
(merge-rule "\IeC {\textpm }" "±" :string)
(merge-rule "\IeC {\r a}" "å" :string)
(merge-rule "\IeC {\r A}" "Å" :string)
(merge-rule "\IeC {\'r}" "ŕ" :string)
(merge-rule "\IeC {\'R}" "Ŕ" :string)
(merge-rule "\IeC {\r u}" "ů" :string)
(merge-rule "\IeC {\r U}" "Ů" :string)
(merge-rule "\IeC {\'s}" "ś" :string)
(merge-rule "\IeC {\'S}" "Ś" :string)
(merge-rule "\IeC {\^s}" "ŝ" :string)
(merge-rule "\IeC {\^S}" "Ŝ" :string)
(merge-rule "\IeC {\textasciidieresis }" "¨" :string)
(merge-rule "\IeC {\textasciimacron }" "¯" :string)
(merge-rule "\IeC {\.{}}" "˙" :string)
(merge-rule "\IeC {\textasciiacute }" "´" :string)
(merge-rule "\IeC {\texttimes }" "×" :string)
(merge-rule "\IeC {\u a}" "ă" :string)
(merge-rule "\IeC {\u A}" "Ă" :string)
(merge-rule "\IeC {\u g}" "ğ" :string)
(merge-rule "\IeC {\u G}" "Ğ" :string)
(merge-rule "\IeC {\textasciibreve }" "˘" :string)
(merge-rule "\IeC {\'u}" "ú" :string)
(merge-rule "\IeC {\'U}" "Ú" :string)
(merge-rule "\IeC {\`u}" "ù" :string)
(merge-rule "\IeC {\`U}" "Ù" :string)
(merge-rule "\IeC {\^u}" "û" :string)
(merge-rule "\IeC {\^U}" "Û" :string)
(merge-rule "\IeC {\~"u}" "ü" :string)
(merge-rule "\IeC {\~"U}" "Ü" :string)
(merge-rule "\IeC {\u u}" "ŭ" :string)
(merge-rule "\IeC {\u U}" "Ŭ" :string)
(merge-rule "\IeC {\v c}" "č" :string)
(merge-rule "\IeC {\v C}" "Č" :string)
(merge-rule "\IeC {\v d}" "ď" :string)
(merge-rule "\IeC {\v D}" "Ď" :string)
(merge-rule "\IeC {\v e}" "ě" :string)
(merge-rule "\IeC {\v E}" "Ě" :string)
(merge-rule "\IeC {\v l}" "ľ" :string)
(merge-rule "\IeC {\v L}" "Ľ" :string)
(merge-rule "\IeC {\v n}" "ň" :string)
(merge-rule "\IeC {\v N}" "Ň" :string)
(merge-rule "\IeC {\v r}" "ř" :string)
(merge-rule "\IeC {\v R}" "Ř" :string)
(merge-rule "\IeC {\v s}" "š" :string)
(merge-rule "\IeC {\v S}" "Š" :string)
(merge-rule "\IeC {\textasciicaron }" "ˇ" :string)
(merge-rule "\IeC {\v t}" "ť" :string)
(merge-rule "\IeC {\v T}" "Ť" :string)
(merge-rule "\IeC {\v z}" "ž" :string)
(merge-rule "\IeC {\v Z}" "Ž" :string)
(merge-rule "\IeC {\'y}" "ý" :string)
(merge-rule "\IeC {\'Y}" "Ý" :string)
(merge-rule "\IeC {\~"y}" "ÿ" :string)
(merge-rule "\IeC {\'z}" "ź" :string)
(merge-rule "\IeC {\'Z}" "Ź" :string)
(merge-rule "\IeC {\.z}" "ż" :string)
(merge-rule "\IeC {\.Z}" "Ż" :string)
;; letters not in Latin1, 2, 3 but available in TeX T1 font encoding
(merge-rule "\IeC {\~"Y}" "Ÿ" :string)
(merge-rule "\IeC {\NG }" "Ŋ" :string)
(merge-rule "\IeC {\ng }" "ŋ" :string)
(merge-rule "\IeC {\OE }" "Œ" :string)
(merge-rule "\IeC {\oe }" "œ" :string)
(merge-rule "\IeC {\IJ }" "IJ" :string)
(merge-rule "\IeC {\ij }" "ij" :string)
(merge-rule "\IeC {\j }" "ȷ" :string)
(merge-rule "\IeC {\SS }" "ẞ" :string)

607
LatinRules.xdy Normal file
View File

@ -0,0 +1,607 @@
;; style file for xindy
;; filename: LatinRules.xdy
;;
;; It is based upon xindy's files lang/general/utf8.xdy and
;; lang/general/utf8-lang.xdy which implement
;; "a general sorting order for Western European languages"
;;
;; The aim for Sphinx is to be able to index in a Cyrillic document
;; also terms using the Latin alphabets, inclusive of letters
;; with diacritics. To this effect the xindy rules from lang/general
;; got manually re-coded to avoid collisions with the encoding
;; done by xindy for sorting words in Cyrillic languages, which was
;; observed not to use bytes with octal encoding 0o266 or higher.
;;
;; So here we use only 0o266 or higher bytes.
;; (Ŋ, ŋ, IJ, and ij are absent from
;; lang/general/utf8.xdy and not included here)
;; Contributed by the Sphinx team, 2018.
(define-letter-group "A" :prefixes ("¶"))
(define-letter-group "B" :after "A" :prefixes ("·"))
(define-letter-group "C" :after "B" :prefixes ("¸"))
(define-letter-group "D" :after "C" :prefixes ("¹"))
(define-letter-group "E" :after "D" :prefixes ("º"))
(define-letter-group "F" :after "E" :prefixes ("»"))
(define-letter-group "G" :after "F" :prefixes ("¼"))
(define-letter-group "H" :after "G" :prefixes ("½"))
(define-letter-group "I" :after "H" :prefixes ("¾"))
(define-letter-group "J" :after "I" :prefixes ("¿"))
(define-letter-group "K" :after "J" :prefixes ("À"))
(define-letter-group "L" :after "K" :prefixes ("Á"))
(define-letter-group "M" :after "L" :prefixes ("Â"))
(define-letter-group "N" :after "M" :prefixes ("Ã"))
(define-letter-group "O" :after "N" :prefixes ("Ä"))
(define-letter-group "P" :after "O" :prefixes ("È"))
(define-letter-group "Q" :after "P" :prefixes ("Ê"))
(define-letter-group "R" :after "Q" :prefixes ("Ë"))
(define-letter-group "S" :after "R" :prefixes ("Ð"))
(define-letter-group "T" :after "S" :prefixes ("Ú"))
(define-letter-group "U" :after "T" :prefixes ("à"))
(define-letter-group "V" :after "U" :prefixes ("å"))
(define-letter-group "W" :after "V" :prefixes ("æ"))
(define-letter-group "X" :after "W" :prefixes ("ë"))
(define-letter-group "Y" :after "X" :prefixes ("í"))
(define-letter-group "Z" :after "Y" :prefixes ("ð"))
(define-rule-set "sphinx-xy-alphabetize"
:rules (("À" "¶" :string)
("Ä‚" "¶" :string)
("â" "¶" :string)
("Ä" "¶" :string)
("à" "¶" :string)
("Ã…" "¶" :string)
("Ã" "¶" :string)
("Ã<>" "¶" :string)
("á" "¶" :string)
("ã" "¶" :string)
("Â" "¶" :string)
("ă" "¶" :string)
("Ã¥" "¶" :string)
("Ä…" "¶" :string)
("ä" "¶" :string)
("Ä„" "¶" :string)
("æ" "¶º" :string)
("Æ" "¶º" :string)
("ć" "¸" :string)
("ĉ" "¸" :string)
("ç" "¸" :string)
("ÄŒ" "¸" :string)
("Ä<>" "¸" :string)
("Ĉ" "¸" :string)
("Ç" "¸" :string)
("Ć" "¸" :string)
("Ä<>" "¹" :string)
("Ä<>" "¹" :string)
("ÄŽ" "¹" :string)
("Ä‘" "¹" :string)
("ê" "º" :string)
("Ę" "º" :string)
("Äš" "º" :string)
("ë" "º" :string)
("Ä›" "º" :string)
("é" "º" :string)
("È" "º" :string)
("Ë" "º" :string)
("É" "º" :string)
("è" "º" :string)
("Ê" "º" :string)
("Ä™" "º" :string)
("Ä<>" "¼" :string)
("ÄŸ" "¼" :string)
("Äž" "¼" :string)
("Äœ" "¼" :string)
("Ä¥" "½" :string)
("Ĥ" "½" :string)
("Ã<>" "¾" :string)
("Ã<>" "¾" :string)
("ï" "¾" :string)
("ÃŽ" "¾" :string)
("î" "¾" :string)
("ı" "¾" :string)
("Ä°" "¾" :string)
("í" "¾" :string)
("ÃŒ" "¾" :string)
("ì" "¾" :string)
("Ä´" "¿" :string)
("ĵ" "¿" :string)
("Å‚" "Á" :string)
("Å<>" "Á" :string)
("ľ" "Á" :string)
("Ľ" "Á" :string)
("Å„" "Ã" :string)
("Ń" "Ã" :string)
("ñ" "Ã" :string)
("ň" "Ã" :string)
("Ñ" "Ã" :string)
("Ň" "Ã" :string)
("Õ" "Ä" :string)
("Å<>" "Ä" :string)
("ó" "Ä" :string)
("ö" "Ä" :string)
("ô" "Ä" :string)
("Å‘" "Ä" :string)
("Ø" "Ä" :string)
("Ö" "Ä" :string)
("õ" "Ä" :string)
("Ô" "Ä" :string)
("ø" "Ä" :string)
("Ó" "Ä" :string)
("Ã’" "Ä" :string)
("ò" "Ä" :string)
("œ" "ĺ" :string)
("Œ" "ĺ" :string)
("Ř" "Ë" :string)
("Å™" "Ë" :string)
("Å”" "Ë" :string)
("Å•" "Ë" :string)
("Å<>" "Ð" :string)
("Åš" "Ð" :string)
("È™" "Ð" :string)
("ÅŸ" "Ð" :string)
("Åœ" "Ð" :string)
("Å›" "Ð" :string)
("Ș" "Ð" :string)
("Å¡" "Ð" :string)
("Åž" "Ð" :string)
("Å " "Ð" :string)
("ß" "ÐÐ" :string)
("Èš" "Ú" :string)
("Ť" "Ú" :string)
("È›" "Ú" :string)
("Å¥" "Ú" :string)
("û" "à" :string)
("Å­" "à" :string)
("ů" "à" :string)
("ű" "à" :string)
("ù" "à" :string)
("Ŭ" "à" :string)
("Ù" "à" :string)
("Å°" "à" :string)
("Ãœ" "à" :string)
("Å®" "à" :string)
("ú" "à" :string)
("Ú" "à" :string)
("Û" "à" :string)
("ü" "à" :string)
("ÿ" "í" :string)
("Ã<>" "í" :string)
("Ÿ" "í" :string)
("ý" "í" :string)
("Å»" "ð" :string)
("Ž" "ð" :string)
("Ź" "ð" :string)
("ž" "ð" :string)
("ż" "ð" :string)
("ź" "ð" :string)
("a" "¶" :string)
("A" "¶" :string)
("b" "·" :string)
("B" "·" :string)
("c" "¸" :string)
("C" "¸" :string)
("d" "¹" :string)
("D" "¹" :string)
("e" "º" :string)
("E" "º" :string)
("F" "»" :string)
("f" "»" :string)
("G" "¼" :string)
("g" "¼" :string)
("H" "½" :string)
("h" "½" :string)
("i" "¾" :string)
("I" "¾" :string)
("J" "¿" :string)
("j" "¿" :string)
("K" "À" :string)
("k" "À" :string)
("L" "Á" :string)
("l" "Á" :string)
("M" "Â" :string)
("m" "Â" :string)
("n" "Ã" :string)
("N" "Ã" :string)
("O" "Ä" :string)
("o" "Ä" :string)
("p" "È" :string)
("P" "È" :string)
("Q" "Ê" :string)
("q" "Ê" :string)
("r" "Ë" :string)
("R" "Ë" :string)
("S" "Ð" :string)
("s" "Ð" :string)
("t" "Ú" :string)
("T" "Ú" :string)
("u" "à" :string)
("U" "à" :string)
("v" "å" :string)
("V" "å" :string)
("W" "æ" :string)
("w" "æ" :string)
("x" "ë" :string)
("X" "ë" :string)
("Y" "í" :string)
("y" "í" :string)
("z" "ð" :string)
("Z" "ð" :string)
))
(define-rule-set "sphinx-xy-resolve-diacritics"
:rules (("Ĥ" "£" :string)
("ó" "£" :string)
("ľ" "£" :string)
("Ř" "£" :string)
("Ä<>" "£" :string)
("Ä<>" "£" :string)
("Äš" "£" :string)
("Ä¥" "£" :string)
("ÄŒ" "£" :string)
("Ä´" "£" :string)
("Ä›" "£" :string)
("ž" "£" :string)
("ÄŽ" "£" :string)
("Å™" "£" :string)
("Ž" "£" :string)
("ı" "£" :string)
("Ť" "£" :string)
("á" "£" :string)
("Ä<>" "£" :string)
("Ã<>" "£" :string)
("ň" "£" :string)
("Å " "£" :string)
("Ň" "£" :string)
("ĵ" "£" :string)
("Å¥" "£" :string)
("Ó" "£" :string)
("ý" "£" :string)
("Äœ" "£" :string)
("Ú" "£" :string)
("Ľ" "£" :string)
("Å¡" "£" :string)
("Ã<>" "£" :string)
("ú" "£" :string)
("Åš" "¤" :string)
("ć" "¤" :string)
("Å<>" "¤" :string)
("Å‚" "¤" :string)
("Å„" "¤" :string)
("À" "¤" :string)
("Ź" "¤" :string)
("à" "¤" :string)
("Ń" "¤" :string)
("Ä<>" "¤" :string)
("ÿ" "¤" :string)
("Å›" "¤" :string)
("Äž" "¤" :string)
("ÄŸ" "¤" :string)
("Ù" "¤" :string)
("Ä°" "¤" :string)
("Ä‘" "¤" :string)
("ù" "¤" :string)
("Èš" "¤" :string)
("é" "¤" :string)
("Å•" "¤" :string)
("Ć" "¤" :string)
("È›" "¤" :string)
("ò" "¤" :string)
("ź" "¤" :string)
("Ã’" "¤" :string)
("Ÿ" "¤" :string)
("Å”" "¤" :string)
("É" "¤" :string)
("ĉ" "¥" :string)
("ô" "¥" :string)
("Ã<>" "¥" :string)
("Å<>" "¥" :string)
("Å»" "¥" :string)
("Ä‚" "¥" :string)
("Åœ" "¥" :string)
("ñ" "¥" :string)
("Å­" "¥" :string)
("í" "¥" :string)
("È" "¥" :string)
("Ô" "¥" :string)
("Ŭ" "¥" :string)
("ż" "¥" :string)
("Ñ" "¥" :string)
("è" "¥" :string)
("Ĉ" "¥" :string)
("ă" "¥" :string)
("â" "¦" :string)
("û" "¦" :string)
("ê" "¦" :string)
("Õ" "¦" :string)
("õ" "¦" :string)
("È™" "¦" :string)
("ç" "¦" :string)
("Â" "¦" :string)
("Ê" "¦" :string)
("Û" "¦" :string)
("Ç" "¦" :string)
("ì" "¦" :string)
("ÃŒ" "¦" :string)
("Ș" "¦" :string)
("ö" "§" :string)
("Ö" "§" :string)
("ÅŸ" "§" :string)
("ů" "§" :string)
("ë" "§" :string)
("ã" "§" :string)
("î" "§" :string)
("ÃŽ" "§" :string)
("Ã" "§" :string)
("Åž" "§" :string)
("Å®" "§" :string)
("Ë" "§" :string)
("ï" "¨" :string)
("Å<>" "¨" :string)
("Ã<>" "¨" :string)
("Ę" "¨" :string)
("Å‘" "¨" :string)
("Ãœ" "¨" :string)
("Ã…" "¨" :string)
("ü" "¨" :string)
("Ä™" "¨" :string)
("Ã¥" "¨" :string)
("Ä" "©" :string)
("ű" "©" :string)
("Ø" "©" :string)
("ø" "©" :string)
("Å°" "©" :string)
("ä" "©" :string)
("Ä„" "ª" :string)
("Ä…" "ª" :string)
("Å“" "ÿ" :string)
("ß" "ÿ" :string)
("Æ" "ÿ" :string)
("Å’" "ÿ" :string)
("æ" "ÿ" :string)
("e" "¢" :string)
("t" "¢" :string)
("L" "¢" :string)
("Y" "¢" :string)
("J" "¢" :string)
("a" "¢" :string)
("p" "¢" :string)
("u" "¢" :string)
("j" "¢" :string)
("b" "¢" :string)
("G" "¢" :string)
("U" "¢" :string)
("F" "¢" :string)
("H" "¢" :string)
("i" "¢" :string)
("z" "¢" :string)
("c" "¢" :string)
("l" "¢" :string)
("A" "¢" :string)
("Q" "¢" :string)
("w" "¢" :string)
("D" "¢" :string)
("R" "¢" :string)
("d" "¢" :string)
("s" "¢" :string)
("r" "¢" :string)
("k" "¢" :string)
("v" "¢" :string)
("m" "¢" :string)
("P" "¢" :string)
("y" "¢" :string)
("K" "¢" :string)
("q" "¢" :string)
("S" "¢" :string)
("I" "¢" :string)
("C" "¢" :string)
("M" "¢" :string)
("Z" "¢" :string)
("T" "¢" :string)
("W" "¢" :string)
("B" "¢" :string)
("h" "¢" :string)
("x" "¢" :string)
("X" "¢" :string)
("f" "¢" :string)
("E" "¢" :string)
("V" "¢" :string)
("N" "¢" :string)
("O" "¢" :string)
("o" "¢" :string)
("g" "¢" :string)
("n" "¢" :string)
))
(define-rule-set "sphinx-xy-resolve-case"
:rules (("Ú" "8" :string)
("Ÿ" "8" :string)
("Ç" "8" :string)
("Ĉ" "8" :string)
("Å”" "8" :string)
("Ľ" "8" :string)
("Å®" "8" :string)
("Ã<>" "8" :string)
("É" "8" :string)
("Ë" "8" :string)
("Ș" "8" :string)
("Ì" "8" :string)
("Ê" "8" :string)
("Ň" "8" :string)
("Ä„" "8" :string)
("Å " "8" :string)
("Û" "8" :string)
("Åž" "8" :string)
("Ć" "8" :string)
("Ã’" "8" :string)
("Ĝ" "8" :string)
("Ñ" "8" :string)
("Ó" "8" :string)
("ÃŽ" "8" :string)
("Ã<>" "8" :string)
("Ã" "8" :string)
("Èš" "8" :string)
("Ã…" "8" :string)
("Äž" "8" :string)
("Ü" "8" :string)
("È" "8" :string)
("Ô" "8" :string)
("Ä°" "8" :string)
("Å°" "8" :string)
("Ù" "8" :string)
("Ŭ" "8" :string)
("Â" "8" :string)
("Ť" "8" :string)
("Ń" "8" :string)
("ÄŽ" "8" :string)
("Ź" "8" :string)
("Ž" "8" :string)
("Ä<>" "8" :string)
("Ŝ" "8" :string)
("Č" "8" :string)
("Ä´" "8" :string)
("Ö" "8" :string)
("Ø" "8" :string)
("Å»" "8" :string)
("Å<>" "8" :string)
("Ä‚" "8" :string)
("Äš" "8" :string)
("Å<>" "8" :string)
("Õ" "8" :string)
("Ę" "8" :string)
("Ã<>" "8" :string)
("À" "8" :string)
("Ĥ" "8" :string)
("Ä" "8" :string)
("Åš" "8" :string)
("Ř" "8" :string)
("Ã<>" "8" :string)
("Å’" "89" :string)
("Æ" "89" :string)
("ì" "9" :string)
("è" "9" :string)
("Ä…" "9" :string)
("Å¡" "9" :string)
("ú" "9" :string)
("Ã¥" "9" :string)
("ă" "9" :string)
("Ä™" "9" :string)
("ü" "9" :string)
("ź" "9" :string)
("ò" "9" :string)
("Å¥" "9" :string)
("È›" "9" :string)
("ĵ" "9" :string)
("Å•" "9" :string)
("ż" "9" :string)
("ä" "9" :string)
("ý" "9" :string)
("ù" "9" :string)
("á" "9" :string)
("é" "9" :string)
("Ä<>" "9" :string)
("ň" "9" :string)
("Å›" "9" :string)
("ø" "9" :string)
("í" "9" :string)
("Ä‘" "9" :string)
("ı" "9" :string)
("ÄŸ" "9" :string)
("î" "9" :string)
("ã" "9" :string)
("à" "9" :string)
("Å™" "9" :string)
("Å‘" "9" :string)
("ů" "9" :string)
("È™" "9" :string)
("ÿ" "9" :string)
("ë" "9" :string)
("Å­" "9" :string)
("ç" "9" :string)
("ű" "9" :string)
("ñ" "9" :string)
("õ" "9" :string)
("Ä›" "9" :string)
("ÅŸ" "9" :string)
("ž" "9" :string)
("Ä<>" "9" :string)
("Å<>" "9" :string)
("Å„" "9" :string)
("û" "9" :string)
("Å‚" "9" :string)
("Ä<>" "9" :string)
("Ä¥" "9" :string)
("ê" "9" :string)
("ô" "9" :string)
("ĉ" "9" :string)
("â" "9" :string)
("ć" "9" :string)
("ï" "9" :string)
("ö" "9" :string)
("ľ" "9" :string)
("ó" "9" :string)
("æ" "99" :string)
("ß" "99" :string)
("Å“" "99" :string)
("N" "8" :string)
("V" "8" :string)
("O" "8" :string)
("X" "8" :string)
("E" "8" :string)
("P" "8" :string)
("K" "8" :string)
("T" "8" :string)
("Z" "8" :string)
("M" "8" :string)
("C" "8" :string)
("I" "8" :string)
("S" "8" :string)
("B" "8" :string)
("W" "8" :string)
("D" "8" :string)
("R" "8" :string)
("H" "8" :string)
("F" "8" :string)
("Q" "8" :string)
("A" "8" :string)
("G" "8" :string)
("U" "8" :string)
("J" "8" :string)
("Y" "8" :string)
("L" "8" :string)
("o" "9" :string)
("n" "9" :string)
("g" "9" :string)
("x" "9" :string)
("f" "9" :string)
("y" "9" :string)
("q" "9" :string)
("h" "9" :string)
("w" "9" :string)
("s" "9" :string)
("d" "9" :string)
("v" "9" :string)
("k" "9" :string)
("r" "9" :string)
("m" "9" :string)
("z" "9" :string)
("c" "9" :string)
("i" "9" :string)
("l" "9" :string)
("b" "9" :string)
("j" "9" :string)
("a" "9" :string)
("p" "9" :string)
("u" "9" :string)
("t" "9" :string)
("e" "9" :string)
))
(use-rule-set :run 0
:rule-set ("sphinx-xy-alphabetize"))
(use-rule-set :run 1
:rule-set ("sphinx-xy-resolve-diacritics"))
(use-rule-set :run 2
:rule-set ("sphinx-xy-resolve-case"))

BIN
MVC_pattern.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

81
Makefile Normal file
View File

@ -0,0 +1,81 @@
# Makefile for Sphinx LaTeX output
ALLDOCS = $(basename $(wildcard *.tex))
ALLPDF = $(addsuffix .pdf,$(ALLDOCS))
ALLDVI = $(addsuffix .dvi,$(ALLDOCS))
ALLPS = $(addsuffix .ps,$(ALLDOCS))
# Prefix for archive names
ARCHIVEPREFIX =
# Additional LaTeX options
LATEXOPTS =
# format: pdf or dvi
FMT = pdf
LATEX = latex
PDFLATEX = pdflatex
MAKEINDEX = makeindex
all: $(ALLPDF)
all-pdf: $(ALLPDF)
all-dvi: $(ALLDVI)
all-ps: $(ALLPS)
all-pdf-ja:
for f in *.pdf *.png *.gif *.jpg *.jpeg; do extractbb $$f; done
for f in *.tex; do pdflatex -kanji=utf8 $(LATEXOPTS) $$f; done
for f in *.tex; do pdflatex -kanji=utf8 $(LATEXOPTS) $$f; done
for f in *.tex; do pdflatex -kanji=utf8 $(LATEXOPTS) $$f; done
-for f in *.idx; do mendex -U -f -d "`basename $$f .idx`.dic" -s python.ist $$f; done
for f in *.tex; do pdflatex -kanji=utf8 $(LATEXOPTS) $$f; done
for f in *.tex; do pdflatex -kanji=utf8 $(LATEXOPTS) $$f; done
for f in *.dvi; do dvipdfmx $$f; done
zip: all-$(FMT)
mkdir $(ARCHIVEPREFIX)docs-$(FMT)
cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT)
zip -q -r -9 $(ARCHIVEPREFIX)docs-$(FMT).zip $(ARCHIVEPREFIX)docs-$(FMT)
rm -r $(ARCHIVEPREFIX)docs-$(FMT)
tar: all-$(FMT)
mkdir $(ARCHIVEPREFIX)docs-$(FMT)
cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT)
tar cf $(ARCHIVEPREFIX)docs-$(FMT).tar $(ARCHIVEPREFIX)docs-$(FMT)
rm -r $(ARCHIVEPREFIX)docs-$(FMT)
gz: tar
gzip -9 < $(ARCHIVEPREFIX)docs-$(FMT).tar > $(ARCHIVEPREFIX)docs-$(FMT).tar.gz
bz2: tar
bzip2 -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar
xz: tar
xz -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar
# The number of LaTeX runs is quite conservative, but I don't expect it
# to get run often, so the little extra time won't hurt.
%.dvi: %.tex
$(LATEX) $(LATEXOPTS) '$<'
$(LATEX) $(LATEXOPTS) '$<'
$(LATEX) $(LATEXOPTS) '$<'
-$(MAKEINDEX) -s python.ist '$(basename $<).idx'
$(LATEX) $(LATEXOPTS) '$<'
$(LATEX) $(LATEXOPTS) '$<'
%.pdf: %.tex
$(PDFLATEX) $(LATEXOPTS) '$<'
$(PDFLATEX) $(LATEXOPTS) '$<'
$(PDFLATEX) $(LATEXOPTS) '$<'
-$(MAKEINDEX) -s python.ist '$(basename $<).idx'
$(PDFLATEX) $(LATEXOPTS) '$<'
$(PDFLATEX) $(LATEXOPTS) '$<'
%.ps: %.dvi
dvips '$<'
clean:
rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ps *.tar *.tar.gz *.tar.bz2 *.tar.xz $(ALLPDF) $(ALLDVI)
.PHONY: all all-pdf all-dvi all-ps clean zip tar gz bz2 xz
.PHONY: all-pdf-ja

BIN
P04_Aufgabenstellung.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
TicTacToe.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
Wochentagsberechnung.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
a.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B

BIN
b.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
c.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
coffee_customer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
d.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
ein_mann_orchester.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

22
latexmkjarc Normal file
View File

@ -0,0 +1,22 @@
$latex = 'pdflatex ' . $ENV{'LATEXOPTS'} . ' -kanji=utf8 %O %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'internal mendex %S %B %D';
sub mendex {
my ($source, $basename, $destination) = @_;
my $dictfile = $basename . ".dic";
unlink($destination);
system("mendex", "-U", "-f", "-d", $dictfile, "-s", "python.ist", $source);
if ($? > 0) {
print("mendex exited with error code $? (ignored)\n");
}
if (!-e $destination) {
# create an empty .ind file if nothing
open(FH, ">" . $destination);
close(FH);
}
return 0;
}
add_cus_dep( "glo", "gls", 0, "makeglo" );
sub makeglo {
return system( "mendex -J -f -s gglo.ist -o '$_[0].gls' '$_[0].glo'" );
}

9
latexmkrc Normal file
View File

@ -0,0 +1,9 @@
$latex = 'latex ' . $ENV{'LATEXOPTS'} . ' %O %S';
$pdflatex = 'pdflatex ' . $ENV{'LATEXOPTS'} . ' %O %S';
$lualatex = 'lualatex ' . $ENV{'LATEXOPTS'} . ' %O %S';
$xelatex = 'xelatex --no-pdf ' . $ENV{'LATEXOPTS'} . ' %O %S';
$makeindex = 'makeindex -s python.ist %O -o %D %S';
add_cus_dep( "glo", "gls", 0, "makeglo" );
sub makeglo {
return system( "makeindex -s gglo.ist -o '$_[0].gls' '$_[0].glo'" );
}

BIN
linked_list.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

295
main.aux Normal file
View File

@ -0,0 +1,295 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand{\transparent@use}[1]{}
\providecommand\babel@aux[2]{}
\@nameuse{bbl@beforestart}
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
\global\let\oldcontentsline\contentsline
\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
\global\let\oldnewlabel\newlabel
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
\AtEndDocument{\ifx\hyper@anchor\@undefined
\let\contentsline\oldcontentsline
\let\newlabel\oldnewlabel
\fi}
\fi}
\global\let\hyper@last\relax
\gdef\HyperFirstAtBeginDocument#1{#1}
\providecommand\HyField@AuxAddToFields[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{}
\babel@aux{english}{}
\@writefile{toc}{\contentsline {chapter}{Table of contents}{i}{chapter*.1}\protected@file@percent }
\newlabel{index::doc}{{}{1}{\contentsname }{section*.2}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {1}01 \sphinxhyphen {} Erste Schritte mit C}{1}{chapter.1}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{P01_Erste_Schritte_mit_C/README:erste-schritte-mit-c}{{1}{1}{01 \sphinxhyphen {} Erste Schritte mit C}{chapter.1}{}}
\newlabel{P01_Erste_Schritte_mit_C/README::doc}{{1}{1}{01 \sphinxhyphen {} Erste Schritte mit C}{chapter.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {1.1}1. Übersicht}{1}{section.1.1}\protected@file@percent }
\newlabel{P01_Erste_Schritte_mit_C/README:ubersicht}{{1.1}{1}{1. Übersicht}{section.1.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {1.2}2. Lernziele}{1}{section.1.2}\protected@file@percent }
\newlabel{P01_Erste_Schritte_mit_C/README:lernziele}{{1.2}{1}{2. Lernziele}{section.1.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {1.3}3. Aufgabe 1: virtuelle Maschine}{1}{section.1.3}\protected@file@percent }
\newlabel{P01_Erste_Schritte_mit_C/README:aufgabe-1-virtuelle-maschine}{{1.3}{1}{3. Aufgabe 1: virtuelle Maschine}{section.1.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {1.4}4. Aufgabe 2: Hello World}{2}{section.1.4}\protected@file@percent }
\newlabel{P01_Erste_Schritte_mit_C/README:aufgabe-2-hello-world}{{1.4}{2}{4. Aufgabe 2: Hello World}{section.1.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {1.5}5. Aufgabe 3: Tabellenausgabe}{2}{section.1.5}\protected@file@percent }
\newlabel{P01_Erste_Schritte_mit_C/README:aufgabe-3-tabellenausgabe}{{1.5}{2}{5. Aufgabe 3: Tabellenausgabe}{section.1.5}{}}
\@writefile{toc}{\contentsline {section}{\numberline {1.6}6. Aufgabe 4: Zeichen und Wörter zählen}{3}{section.1.6}\protected@file@percent }
\newlabel{P01_Erste_Schritte_mit_C/README:aufgabe-4-zeichen-und-worter-zahlen}{{1.6}{3}{6. Aufgabe 4: Zeichen und Wörter zählen}{section.1.6}{}}
\@writefile{toc}{\contentsline {section}{\numberline {1.7}7. Bewertung}{3}{section.1.7}\protected@file@percent }
\newlabel{P01_Erste_Schritte_mit_C/README:bewertung}{{1.7}{3}{7. Bewertung}{section.1.7}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {2}02: Funktionen, Datentyp “enum”}{4}{chapter.2}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{P02_Funktionen_Datentyp_enum/README:funktionen-datentyp-enum}{{2}{4}{02: Funktionen, Datentyp “enum”}{chapter.2}{}}
\newlabel{P02_Funktionen_Datentyp_enum/README::doc}{{2}{4}{02: Funktionen, Datentyp “enum”}{chapter.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.1}1. Übersicht}{4}{section.2.1}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:ubersicht}{{2.1}{4}{1. Übersicht}{section.2.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.2}2. Lernziele}{5}{section.2.2}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:lernziele}{{2.2}{5}{2. Lernziele}{section.2.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.3}3. Aufgaben}{5}{section.2.3}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:aufgaben}{{2.3}{5}{3. Aufgaben}{section.2.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.1}3.1 Aufgabe 1 Tage pro Monat}{6}{subsection.2.3.1}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:aufgabe-1-tage-pro-monat}{{2.3.1}{6}{3.1 Aufgabe 1 Tage pro Monat}{subsection.2.3.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3.2}3.2 Aufgabe 2 Bestimmen des Wochentags}{7}{subsection.2.3.2}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:aufgabe-2-bestimmen-des-wochentags}{{2.3.2}{7}{3.2 Aufgabe 2 Bestimmen des Wochentags}{subsection.2.3.2}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.2.1}3.2.1 Teilaufgabe Argumente Parsen und auf Korrektheit prüfen}{7}{subsubsection.2.3.2.1}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:teilaufgabe-argumente-parsen-und-auf-korrektheit-prufen}{{2.3.2.1}{7}{3.2.1 Teilaufgabe Argumente Parsen und auf Korrektheit prüfen}{subsubsection.2.3.2.1}{}}
\@writefile{toc}{\contentsline {paragraph}{3.2.1.1 Argument Format}{7}{paragraph*.3}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:argument-format}{{2.3.2.1}{7}{3.2.1.1 Argument Format}{paragraph*.3}{}}
\@writefile{toc}{\contentsline {paragraph}{3.2.1.2 Korrektes Datum}{7}{paragraph*.4}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:korrektes-datum}{{2.3.2.1}{7}{3.2.1.2 Korrektes Datum}{paragraph*.4}{}}
\@writefile{toc}{\contentsline {paragraph}{3.2.1.3 Vorgaben an die Umsetzung}{7}{paragraph*.5}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:vorgaben-an-die-umsetzung}{{2.3.2.1}{7}{3.2.1.3 Vorgaben an die Umsetzung}{paragraph*.5}{}}
\@writefile{toc}{\contentsline {paragraph}{3.2.1.4 Hinweise}{8}{paragraph*.6}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:hinweise}{{2.3.2.1}{8}{3.2.1.4 Hinweise}{paragraph*.6}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {2.3.2.2}3.2.2 Teilaufgabe Wochentag Berechnung}{8}{subsubsection.2.3.2.2}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:teilaufgabe-wochentag-berechnung}{{2.3.2.2}{8}{3.2.2 Teilaufgabe Wochentag Berechnung}{subsubsection.2.3.2.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.4}4. Bewertung}{8}{section.2.4}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:bewertung}{{2.4}{8}{4. Bewertung}{section.2.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {2.5}5. Anhang}{9}{section.2.5}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:anhang}{{2.5}{9}{5. Anhang}{section.2.5}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.1}5.1 Sprach Element}{9}{subsection.2.5.1}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:sprach-element}{{2.5.1}{9}{5.1 Sprach Element}{subsection.2.5.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5.2}5.2 Beschreibung}{9}{subsection.2.5.2}\protected@file@percent }
\newlabel{P02_Funktionen_Datentyp_enum/README:beschreibung}{{2.5.2}{9}{5.2 Beschreibung}{subsection.2.5.2}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {3}03 \sphinxhyphen {} Bit Operationen, Struct, Typedef}{10}{chapter.3}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{P03_Bit_Operation_struct_typedef/README:bit-operationen-struct-typedef}{{3}{10}{03 \sphinxhyphen {} Bit Operationen, Struct, Typedef}{chapter.3}{}}
\newlabel{P03_Bit_Operation_struct_typedef/README::doc}{{3}{10}{03 \sphinxhyphen {} Bit Operationen, Struct, Typedef}{chapter.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.1}1. Bit Operationen}{10}{section.3.1}\protected@file@percent }
\newlabel{P03_Bit_Operation_struct_typedef/README:bit-operationen}{{3.1}{10}{1. Bit Operationen}{section.3.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}1.1 Übungen}{11}{subsection.3.1.1}\protected@file@percent }
\newlabel{P03_Bit_Operation_struct_typedef/README:ubungen}{{3.1.1}{11}{1.1 Übungen}{subsection.3.1.1}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1.1}1. Basis Operationen}{11}{subsubsection.3.1.1.1}\protected@file@percent }
\newlabel{P03_Bit_Operation_struct_typedef/README:basis-operationen}{{3.1.1.1}{11}{1. Basis Operationen}{subsubsection.3.1.1.1}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1.2}2. Variablen tauschen (ohne Dritt\sphinxhyphen {}Variable)}{11}{subsubsection.3.1.1.2}\protected@file@percent }
\newlabel{P03_Bit_Operation_struct_typedef/README:variablen-tauschen-ohne-dritt-variable}{{3.1.1.2}{11}{2. Variablen tauschen (ohne Dritt\sphinxhyphen {}Variable)}{subsubsection.3.1.1.2}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1.3}3. Lower\sphinxhyphen {} / Uppercase}{12}{subsubsection.3.1.1.3}\protected@file@percent }
\newlabel{P03_Bit_Operation_struct_typedef/README:lower-uppercase}{{3.1.1.3}{12}{3. Lower\sphinxhyphen {} / Uppercase}{subsubsection.3.1.1.3}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1.4}4. Prüfen auf 2\sphinxhyphen {}er Potenz}{12}{subsubsection.3.1.1.4}\protected@file@percent }
\newlabel{P03_Bit_Operation_struct_typedef/README:prufen-auf-2-er-potenz}{{3.1.1.4}{12}{4. Prüfen auf 2\sphinxhyphen {}er Potenz}{subsubsection.3.1.1.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {3.2}2. Struct \& typedef}{13}{section.3.2}\protected@file@percent }
\newlabel{P03_Bit_Operation_struct_typedef/README:struct-typedef}{{3.2}{13}{2. Struct \& typedef}{section.3.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}2.1 Übungen}{13}{subsection.3.2.1}\protected@file@percent }
\newlabel{P03_Bit_Operation_struct_typedef/README:id1}{{3.2.1}{13}{2.1 Übungen}{subsection.3.2.1}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.1.1}1. Bit Operationen Rechner}{13}{subsubsection.3.2.1.1}\protected@file@percent }
\newlabel{P03_Bit_Operation_struct_typedef/README:bit-operationen-rechner}{{3.2.1.1}{13}{1. Bit Operationen Rechner}{subsubsection.3.2.1.1}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {4}04 \sphinxhyphen {} Modularisieren von C Code}{14}{chapter.4}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code:modularisieren-von-c-code}{{4}{14}{04 \sphinxhyphen {} Modularisieren von C Code}{chapter.4}{}}
\newlabel{P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code::doc}{{4}{14}{04 \sphinxhyphen {} Modularisieren von C Code}{chapter.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.1}1. Übersicht}{14}{section.4.1}\protected@file@percent }
\newlabel{P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code:ubersicht}{{4.1}{14}{1. Übersicht}{section.4.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.2}2. Lernziele}{14}{section.4.2}\protected@file@percent }
\newlabel{P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code:lernziele}{{4.2}{14}{2. Lernziele}{section.4.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.3}3. Aufgabe 1: Modularisieren}{15}{section.4.3}\protected@file@percent }
\newlabel{P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code:aufgabe-1-modularisieren}{{4.3}{15}{3. Aufgabe 1: Modularisieren}{section.4.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.1}3.1 Teilaufgabe Modules einbinden, Header Files schreiben}{15}{subsection.4.3.1}\protected@file@percent }
\newlabel{P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code:teilaufgabe-modules-einbinden-header-files-schreiben}{{4.3.1}{15}{3.1 Teilaufgabe Modules einbinden, Header Files schreiben}{subsection.4.3.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.4}4. Aufgabe 2: Makefile Regeln}{16}{section.4.4}\protected@file@percent }
\newlabel{P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code:aufgabe-2-makefile-regeln}{{4.4}{16}{4. Aufgabe 2: Makefile Regeln}{section.4.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.4.1}4.1 Neue Regeln hinzufügen}{16}{subsection.4.4.1}\protected@file@percent }
\newlabel{P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code:neue-regeln-hinzufugen}{{4.4.1}{16}{4.1 Neue Regeln hinzufügen}{subsection.4.4.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.5}5. Aufgabe 3}{16}{section.4.5}\protected@file@percent }
\newlabel{P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code:aufgabe-3}{{4.5}{16}{5. Aufgabe 3}{section.4.5}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.6}6. Bewertung}{16}{section.4.6}\protected@file@percent }
\newlabel{P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code:bewertung}{{4.6}{16}{6. Bewertung}{section.4.6}{}}
\@writefile{toc}{\contentsline {section}{\numberline {4.7}7. Erweiterung Doxyfile für Abhängigkeitsanalyse}{16}{section.4.7}\protected@file@percent }
\newlabel{P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code:erweiterung-doxyfile-fur-abhangigkeitsanalyse}{{4.7}{16}{7. Erweiterung Doxyfile für Abhängigkeitsanalyse}{section.4.7}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {5}05 \sphinxhyphen {} Arrays/Strings/TicTacToe}{18}{chapter.5}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{P05_TicTacToe/README:arrays-strings-tictactoe}{{5}{18}{05 \sphinxhyphen {} Arrays/Strings/TicTacToe}{chapter.5}{}}
\newlabel{P05_TicTacToe/README::doc}{{5}{18}{05 \sphinxhyphen {} Arrays/Strings/TicTacToe}{chapter.5}{}}
\@writefile{toc}{\contentsline {section}{\numberline {5.1}1. Übersicht}{18}{section.5.1}\protected@file@percent }
\newlabel{P05_TicTacToe/README:ubersicht}{{5.1}{18}{1. Übersicht}{section.5.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {5.2}2. Lernziele}{18}{section.5.2}\protected@file@percent }
\newlabel{P05_TicTacToe/README:lernziele}{{5.2}{18}{2. Lernziele}{section.5.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {5.3}3. Aufgabe 1: Sortieren von Strings}{18}{section.5.3}\protected@file@percent }
\newlabel{P05_TicTacToe/README:aufgabe-1-sortieren-von-strings}{{5.3}{18}{3. Aufgabe 1: Sortieren von Strings}{section.5.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {5.4}4. Aufgabe 2: TicTacToe}{19}{section.5.4}\protected@file@percent }
\newlabel{P05_TicTacToe/README:aufgabe-2-tictactoe}{{5.4}{19}{4. Aufgabe 2: TicTacToe}{section.5.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.1}4.1 Teilaufgabe test\_model\_init}{20}{subsection.5.4.1}\protected@file@percent }
\newlabel{P05_TicTacToe/README:teilaufgabe-test-model-init}{{5.4.1}{20}{4.1 Teilaufgabe test\_model\_init}{subsection.5.4.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.2}4.2 Teilaufgabe test\_model\_get\_state und test\_model\_get\_winner}{21}{subsection.5.4.2}\protected@file@percent }
\newlabel{P05_TicTacToe/README:teilaufgabe-test-model-get-state-und-test-model-get-winner}{{5.4.2}{21}{4.2 Teilaufgabe test\_model\_get\_state und test\_model\_get\_winner}{subsection.5.4.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.3}4.3 Teilaufgabe test\_model\_can\_move}{22}{subsection.5.4.3}\protected@file@percent }
\newlabel{P05_TicTacToe/README:teilaufgabe-test-model-can-move}{{5.4.3}{22}{4.3 Teilaufgabe test\_model\_can\_move}{subsection.5.4.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {5.4.4}4.4 Teilaufgabe test\_model\_move und test\_model\_get\_win\_line}{22}{subsection.5.4.4}\protected@file@percent }
\newlabel{P05_TicTacToe/README:teilaufgabe-test-model-move-und-test-model-get-win-line}{{5.4.4}{22}{4.4 Teilaufgabe test\_model\_move und test\_model\_get\_win\_line}{subsection.5.4.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {5.5}5. Bewertung}{23}{section.5.5}\protected@file@percent }
\newlabel{P05_TicTacToe/README:bewertung}{{5.5}{23}{5. Bewertung}{section.5.5}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {6}06 \sphinxhyphen {} Personen Verwaltung \textendash {} Linked List}{24}{chapter.6}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{P06_Personen_Verwaltung_Linked_List/README:personen-verwaltung-linked-list}{{6}{24}{06 \sphinxhyphen {} Personen Verwaltung \textendash {} Linked List}{chapter.6}{}}
\newlabel{P06_Personen_Verwaltung_Linked_List/README::doc}{{6}{24}{06 \sphinxhyphen {} Personen Verwaltung \textendash {} Linked List}{chapter.6}{}}
\@writefile{toc}{\contentsline {section}{\numberline {6.1}1. Übersicht}{24}{section.6.1}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:ubersicht}{{6.1}{24}{1. Übersicht}{section.6.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {6.2}2. Lernziele}{25}{section.6.2}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:lernziele}{{6.2}{25}{2. Lernziele}{section.6.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {6.3}3. Personenverwaltung}{25}{section.6.3}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:personenverwaltung}{{6.3}{25}{3. Personenverwaltung}{section.6.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.1}3.1 Programmfunktion}{25}{subsection.6.3.1}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:programmfunktion}{{6.3.1}{25}{3.1 Programmfunktion}{subsection.6.3.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.2}3.2 Designvorgaben}{25}{subsection.6.3.2}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:designvorgaben}{{6.3.2}{25}{3.2 Designvorgaben}{subsection.6.3.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {6.3.3}3.3 Bestehender Programmrahmen}{28}{subsection.6.3.3}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:bestehender-programmrahmen}{{6.3.3}{28}{3.3 Bestehender Programmrahmen}{subsection.6.3.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {6.4}4. Aufgabe 1: Modularisierung \textendash {} API und Implementation main.c}{28}{section.6.4}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:aufgabe-1-modularisierung-api-und-implementation-main-c}{{6.4}{28}{4. Aufgabe 1: Modularisierung \textendash {} API und Implementation main.c}{section.6.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {6.5}5. Aufgabe 2: Implementierung von person.c und list.c}{29}{section.6.5}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:aufgabe-2-implementierung-von-person-c-und-list-c}{{6.5}{29}{5. Aufgabe 2: Implementierung von person.c und list.c}{section.6.5}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.1}5.1 Teilaufgabe: Implementierung von person.c}{29}{subsection.6.5.1}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:teilaufgabe-implementierung-von-person-c}{{6.5.1}{29}{5.1 Teilaufgabe: Implementierung von person.c}{subsection.6.5.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {6.5.2}5.2 Teilaufgabe: Implementierung von list.c}{29}{subsection.6.5.2}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:teilaufgabe-implementierung-von-list-c}{{6.5.2}{29}{5.2 Teilaufgabe: Implementierung von list.c}{subsection.6.5.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {6.6}6. Aufgabe 3: Unit Tests}{29}{section.6.6}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:aufgabe-3-unit-tests}{{6.6}{29}{6. Aufgabe 3: Unit Tests}{section.6.6}{}}
\@writefile{toc}{\contentsline {section}{\numberline {6.7}7. Bewertung}{29}{section.6.7}\protected@file@percent }
\newlabel{P06_Personen_Verwaltung_Linked_List/README:bewertung}{{6.7}{29}{7. Bewertung}{section.6.7}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {7}07 \sphinxhyphen {} Prozesse und Threads}{31}{chapter.7}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{P07_Prozesse_und_Threads/README:prozesse-und-threads}{{7}{31}{07 \sphinxhyphen {} Prozesse und Threads}{chapter.7}{}}
\newlabel{P07_Prozesse_und_Threads/README::doc}{{7}{31}{07 \sphinxhyphen {} Prozesse und Threads}{chapter.7}{}}
\@writefile{toc}{\contentsline {section}{\numberline {7.1}1. Übersicht}{32}{section.7.1}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:ubersicht}{{7.1}{32}{1. Übersicht}{section.7.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {7.1.1}1.1 Nachweis}{32}{subsection.7.1.1}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:nachweis}{{7.1.1}{32}{1.1 Nachweis}{subsection.7.1.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {7.2}2. Lernziele}{32}{section.7.2}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:lernziele}{{7.2}{32}{2. Lernziele}{section.7.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {7.3}3. Aufgaben}{32}{section.7.3}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgaben}{{7.3}{32}{3. Aufgaben}{section.7.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.1}3.1 Aufgabe 1: Prozess mit fork() erzeugen}{33}{subsection.7.3.1}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgabe-1-prozess-mit-fork-erzeugen}{{7.3.1}{33}{3.1 Aufgabe 1: Prozess mit fork() erzeugen}{subsection.7.3.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.2}3.2 Aufgabe 2: Prozess mit fork() und exec(): Programm Image ersetzen}{33}{subsection.7.3.2}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgabe-2-prozess-mit-fork-und-exec-programm-image-ersetzen}{{7.3.2}{33}{3.2 Aufgabe 2: Prozess mit fork() und exec(): Programm Image ersetzen}{subsection.7.3.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.3}3.3 Aufgabe 3: Prozesshierarchie analysieren}{33}{subsection.7.3.3}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgabe-3-prozesshierarchie-analysieren}{{7.3.3}{33}{3.3 Aufgabe 3: Prozesshierarchie analysieren}{subsection.7.3.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.4}3.4 Aufgabe 4: Zeitlicher Ablauf von Prozessen}{34}{subsection.7.3.4}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgabe-4-zeitlicher-ablauf-von-prozessen}{{7.3.4}{34}{3.4 Aufgabe 4: Zeitlicher Ablauf von Prozessen}{subsection.7.3.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.5}3.5 Aufgabe 5: Waisenkinder (Orphan Processes)}{34}{subsection.7.3.5}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgabe-5-waisenkinder-orphan-processes}{{7.3.5}{34}{3.5 Aufgabe 5: Waisenkinder (Orphan Processes)}{subsection.7.3.5}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.6}3.6 Aufgabe 6: Terminierte, halbtote Prozesse (Zombies)}{34}{subsection.7.3.6}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgabe-6-terminierte-halbtote-prozesse-zombies}{{7.3.6}{34}{3.6 Aufgabe 6: Terminierte, halbtote Prozesse (Zombies)}{subsection.7.3.6}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.7}3.7 Aufgabe 7: Auf Terminieren von Kindprozessen warten}{35}{subsection.7.3.7}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgabe-7-auf-terminieren-von-kindprozessen-warten}{{7.3.7}{35}{3.7 Aufgabe 7: Auf Terminieren von Kindprozessen warten}{subsection.7.3.7}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.8}3.8 Aufgabe 8: Kindprozess als Kopie des Elternprozesses}{36}{subsection.7.3.8}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgabe-8-kindprozess-als-kopie-des-elternprozesses}{{7.3.8}{36}{3.8 Aufgabe 8: Kindprozess als Kopie des Elternprozesses}{subsection.7.3.8}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.9}3.9 Aufgabe 9: Unterschied von Threads gegenüber Prozessen}{36}{subsection.7.3.9}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgabe-9-unterschied-von-threads-gegenuber-prozessen}{{7.3.9}{36}{3.9 Aufgabe 9: Unterschied von Threads gegenüber Prozessen}{subsection.7.3.9}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {7.3.10}3.10 Aufgabe 10 (optional):}{37}{subsection.7.3.10}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgabe-10-optional}{{7.3.10}{37}{3.10 Aufgabe 10 (optional):}{subsection.7.3.10}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {7.3.10.1}3.10.1 Übersicht}{37}{subsubsection.7.3.10.1}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:id1}{{7.3.10.1}{37}{3.10.1 Übersicht}{subsubsection.7.3.10.1}{}}
\@writefile{toc}{\contentsline {paragraph}{3.10.1.1 Nachweis}{37}{paragraph*.7}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:id2}{{7.3.10.1}{37}{3.10.1.1 Nachweis}{paragraph*.7}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {7.3.10.2}3.10.2 Lernziele}{37}{subsubsection.7.3.10.2}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:id3}{{7.3.10.2}{37}{3.10.2 Lernziele}{subsubsection.7.3.10.2}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {7.3.10.3}3.10.3 Aufgabe: Dämon Prozesse}{37}{subsubsection.7.3.10.3}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:aufgabe-damon-prozesse}{{7.3.10.3}{37}{3.10.3 Aufgabe: Dämon Prozesse}{subsubsection.7.3.10.3}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {7.3.10.4}3.10.4 Zusatzinformationen}{38}{subsubsection.7.3.10.4}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:zusatzinformationen}{{7.3.10.4}{38}{3.10.4 Zusatzinformationen}{subsubsection.7.3.10.4}{}}
\@writefile{toc}{\contentsline {paragraph}{3.10.4.1 Diese Implementation}{38}{paragraph*.8}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:diese-implementation}{{7.3.10.4}{38}{3.10.4.1 Diese Implementation}{paragraph*.8}{}}
\@writefile{toc}{\contentsline {paragraph}{3.10.4.2 Zusatzinformation zu Dämon Prozessen}{39}{paragraph*.9}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:zusatzinformation-zu-damon-prozessen}{{7.3.10.4}{39}{3.10.4.2 Zusatzinformation zu Dämon Prozessen}{paragraph*.9}{}}
\@writefile{toc}{\contentsline {section}{\numberline {7.4}4. Bewertung}{39}{section.7.4}\protected@file@percent }
\newlabel{P07_Prozesse_und_Threads/README:bewertung}{{7.4}{39}{4. Bewertung}{section.7.4}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {8}08 \sphinxhyphen {} Synchronisationsprobleme}{41}{chapter.8}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{P08_Sync/README:synchronisationsprobleme}{{8}{41}{08 \sphinxhyphen {} Synchronisationsprobleme}{chapter.8}{}}
\newlabel{P08_Sync/README::doc}{{8}{41}{08 \sphinxhyphen {} Synchronisationsprobleme}{chapter.8}{}}
\@writefile{toc}{\contentsline {section}{\numberline {8.1}1. Übersicht}{41}{section.8.1}\protected@file@percent }
\newlabel{P08_Sync/README:ubersicht}{{8.1}{41}{1. Übersicht}{section.8.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {8.1.1}1.1 Nachweis}{42}{subsection.8.1.1}\protected@file@percent }
\newlabel{P08_Sync/README:nachweis}{{8.1.1}{42}{1.1 Nachweis}{subsection.8.1.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {8.2}2. Lernziele}{42}{section.8.2}\protected@file@percent }
\newlabel{P08_Sync/README:lernziele}{{8.2}{42}{2. Lernziele}{section.8.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {8.3}3. Einführung}{42}{section.8.3}\protected@file@percent }
\newlabel{P08_Sync/README:einfuhrung}{{8.3}{42}{3. Einführung}{section.8.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {8.3.1}3.1 Wie löst man Synchronisationsprobleme?}{42}{subsection.8.3.1}\protected@file@percent }
\newlabel{P08_Sync/README:wie-lost-man-synchronisationsprobleme}{{8.3.1}{42}{3.1 Wie löst man Synchronisationsprobleme?}{subsection.8.3.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {8.4}4. Der Kaffee\sphinxhyphen {}Automat}{43}{section.8.4}\protected@file@percent }
\newlabel{P08_Sync/README:der-kaffee-automat}{{8.4}{43}{4. Der Kaffee\sphinxhyphen {}Automat}{section.8.4}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {8.4.1}4.1 Aufgabe: Mutual Exclusion}{44}{subsection.8.4.1}\protected@file@percent }
\newlabel{P08_Sync/README:aufgabe-mutual-exclusion}{{8.4.1}{44}{4.1 Aufgabe: Mutual Exclusion}{subsection.8.4.1}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.1.1}Aufgaben}{44}{subsubsection.8.4.1.1}\protected@file@percent }
\newlabel{P08_Sync/README:aufgaben}{{8.4.1.1}{44}{Aufgaben}{subsubsection.8.4.1.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {8.4.2}4.2 Aufgabe: Einfache Reihenfolge}{44}{subsection.8.4.2}\protected@file@percent }
\newlabel{P08_Sync/README:aufgabe-einfache-reihenfolge}{{8.4.2}{44}{4.2 Aufgabe: Einfache Reihenfolge}{subsection.8.4.2}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.2.1}Aufgaben}{45}{subsubsection.8.4.2.1}\protected@file@percent }
\newlabel{P08_Sync/README:id1}{{8.4.2.1}{45}{Aufgaben}{subsubsection.8.4.2.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {8.4.3}4.3 Aufgabe: Erweiterte Reihenfolge}{45}{subsection.8.4.3}\protected@file@percent }
\newlabel{P08_Sync/README:aufgabe-erweiterte-reihenfolge}{{8.4.3}{45}{4.3 Aufgabe: Erweiterte Reihenfolge}{subsection.8.4.3}{}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {8.4.3.1}Aufgabe}{45}{subsubsection.8.4.3.1}\protected@file@percent }
\newlabel{P08_Sync/README:aufgabe}{{8.4.3.1}{45}{Aufgabe}{subsubsection.8.4.3.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {8.4.4}4.4 Zusammenfassung}{45}{subsection.8.4.4}\protected@file@percent }
\newlabel{P08_Sync/README:zusammenfassung}{{8.4.4}{45}{4.4 Zusammenfassung}{subsection.8.4.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {8.5}5. International Banking}{46}{section.8.5}\protected@file@percent }
\newlabel{P08_Sync/README:international-banking}{{8.5}{46}{5. International Banking}{section.8.5}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {8.5.1}5.1 Implementation}{46}{subsection.8.5.1}\protected@file@percent }
\newlabel{P08_Sync/README:implementation}{{8.5.1}{46}{5.1 Implementation}{subsection.8.5.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {8.5.2}5.2 Aufgabe: Konto Synchronisation}{46}{subsection.8.5.2}\protected@file@percent }
\newlabel{P08_Sync/README:aufgabe-konto-synchronisation}{{8.5.2}{46}{5.2 Aufgabe: Konto Synchronisation}{subsection.8.5.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {8.5.3}5.3 Aufgabe: Filialen Zugriff in Critical Section}{46}{subsection.8.5.3}\protected@file@percent }
\newlabel{P08_Sync/README:aufgabe-filialen-zugriff-in-critical-section}{{8.5.3}{46}{5.3 Aufgabe: Filialen Zugriff in Critical Section}{subsection.8.5.3}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {8.5.4}5.4 Aufgabe: Refactoring der Synchronisation}{46}{subsection.8.5.4}\protected@file@percent }
\newlabel{P08_Sync/README:aufgabe-refactoring-der-synchronisation}{{8.5.4}{46}{5.4 Aufgabe: Refactoring der Synchronisation}{subsection.8.5.4}{}}
\@writefile{toc}{\contentsline {section}{\numberline {8.6}6. Bewertung}{47}{section.8.6}\protected@file@percent }
\newlabel{P08_Sync/README:bewertung}{{8.6}{47}{6. Bewertung}{section.8.6}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {9}09 \sphinxhyphen {} File Operations}{48}{chapter.9}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{P09_File_Operations/README:file-operations}{{9}{48}{09 \sphinxhyphen {} File Operations}{chapter.9}{}}
\newlabel{P09_File_Operations/README::doc}{{9}{48}{09 \sphinxhyphen {} File Operations}{chapter.9}{}}
\@writefile{toc}{\contentsline {section}{\numberline {9.1}1. Übersicht}{48}{section.9.1}\protected@file@percent }
\newlabel{P09_File_Operations/README:ubersicht}{{9.1}{48}{1. Übersicht}{section.9.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {9.2}2. Lernziele}{48}{section.9.2}\protected@file@percent }
\newlabel{P09_File_Operations/README:lernziele}{{9.2}{48}{2. Lernziele}{section.9.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {9.3}3. Aufgabe 1:}{48}{section.9.3}\protected@file@percent }
\newlabel{P09_File_Operations/README:aufgabe-1}{{9.3}{48}{3. Aufgabe 1:}{section.9.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {9.4}4. Bewertung}{48}{section.9.4}\protected@file@percent }
\newlabel{P09_File_Operations/README:bewertung}{{9.4}{48}{4. Bewertung}{section.9.4}{}}
\@writefile{toc}{\contentsline {chapter}{\numberline {10}10 \sphinxhyphen {} IPC}{49}{chapter.10}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\newlabel{P10_IPC/README:ipc}{{10}{49}{10 \sphinxhyphen {} IPC}{chapter.10}{}}
\newlabel{P10_IPC/README::doc}{{10}{49}{10 \sphinxhyphen {} IPC}{chapter.10}{}}
\@writefile{toc}{\contentsline {section}{\numberline {10.1}1. Übersicht}{49}{section.10.1}\protected@file@percent }
\newlabel{P10_IPC/README:ubersicht}{{10.1}{49}{1. Übersicht}{section.10.1}{}}
\@writefile{toc}{\contentsline {section}{\numberline {10.2}2. Lernziele}{49}{section.10.2}\protected@file@percent }
\newlabel{P10_IPC/README:lernziele}{{10.2}{49}{2. Lernziele}{section.10.2}{}}
\@writefile{toc}{\contentsline {section}{\numberline {10.3}3. Aufgabe 1:}{49}{section.10.3}\protected@file@percent }
\newlabel{P10_IPC/README:aufgabe-1}{{10.3}{49}{3. Aufgabe 1:}{section.10.3}{}}
\@writefile{toc}{\contentsline {section}{\numberline {10.4}4. Bewertung}{49}{section.10.4}\protected@file@percent }
\newlabel{P10_IPC/README:bewertung}{{10.4}{49}{4. Bewertung}{section.10.4}{}}
\gdef \@abspage@last{53}

218
main.fdb_latexmk Normal file
View File

@ -0,0 +1,218 @@
# Fdb version 3
["makeindex main.idx"] 1645024877 "main.idx" "main.ind" "main" 1645084636
"main.idx" 1645084635 0 d41d8cd98f00b204e9800998ecf8427e "pdflatex"
(generated)
"main.ilg"
"main.ind"
["pdflatex"] 1645084634 "main.tex" "main.pdf" "main" 1645084636
"135oALYhkYyXB2aG0F-qrwA.jpeg" 1644933039 28796 f9cef91ae7a04013ca14640f35187599 ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/map/pdftex/pdftex.map" 1644474942 123072 4dfec00f36c42e8f2db702e61ef5862a ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecbx1000.pk" 1644474959 25420 b1b863c5175ccd2a9a60bbcd0e07aec7 ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecbx1200.pk" 1644474955 31952 a08b7c23b9d95a70bd956de9e30f758b ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecbx1440.pk" 1644474962 40136 86f2bd3c6b4564d84b54d6621ebe96c1 ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecbx2074.pk" 1644474957 59008 131236bef7192b1be43caa07e4981c9e ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecbx2488.pk" 1644474964 72288 41615f73245b77d5ff98e3014ff72ebc ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecit1000.pk" 1644474949 26728 f42cf8151a404c2d9bae3ab9e9c6023b ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecrm0800.pk" 1644474947 19080 2b1eea2e535e11d98a202141c1b0e935 ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecrm0900.pk" 1644474961 21356 b52f161ff6876516265c4e7f48c5165e ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecrm1000.pk" 1644474958 23808 7e7929695c466f92ed0c8f45f373c2b0 ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecss1000.pk" 1644474950 19932 a83ca62b8d19276d4dd16b36b7c613b2 ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecti0900.pk" 1644474960 28820 366a24d5ffd435b4b93b0566c01a73d7 ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ecti1000.pk" 1644474954 31892 54481007e6fbe225dfaa98331c87cd34 ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/ectt1000.pk" 1644474953 20028 07b9d27d05a3c1d587f5d3bf61d9e041 ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/tcrm1000.pk" 1644474952 11548 0b0d56ec4dada4d64b236d26d8259ea3 ""
"C:/Users/Thor/AppData/Local/MiKTeX/fonts/pk/ljfour/jknappen/ec/dpi600/tctt1000.pk" 1644474944 9492 b32fae978048c63bed8b8ea5b4c01e26 ""
"C:/Users/Thor/AppData/Local/MiKTeX/miktex/data/le/pdftex/pdflatex.fmt" 1641968746 9769493 e69ef452068a007dd8a62918dcf32fd8 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecbx1000.tfm" 993058356 3200 328792ff19833a39406f06fa0555a6dc ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecbx1200.tfm" 993058358 3200 b8d69bc738e5ef3e08cefeef3109ff56 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecbx1440.tfm" 993058360 3196 0b37fa3083e15c57cfa8c4ff52f2807a ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecbx2074.tfm" 993058364 3208 da5ec29ca7c2f5f55c296dd6713d4a74 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecbx2488.tfm" 993058366 3192 b0a07ba84fb3fb36d088c4f796e254b9 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecit1000.tfm" 993058448 1356 26b6ae61ed8e8f2b58dad9f0a3f033b4 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecrm0800.tfm" 993058518 3152 11ecf5aad6aacf00ff18f394ab23a8b5 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecrm0900.tfm" 993058520 3156 6d4f5755d77638125f6f89de4f3bb757 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecrm1000.tfm" 993058522 3148 7e594c8240c71e432203f65ab5f95a51 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecrm1200.tfm" 993058526 3152 4850ff0163852b7fab34bd55e1197f28 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecrm1440.tfm" 993058528 3168 3bd7b08ba4330af81521911744311212 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecrm2074.tfm" 993058530 3184 b2541675eba9fa86d240ec0ecc913558 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecrm2488.tfm" 993058532 3184 93c67f4c0884ba9e31b75d469978f63b ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecss1000.tfm" 993058634 3140 7eb06dfefee71119860002af13820d26 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecti0900.tfm" 993058718 2840 ee8ddc1ae849c174661b3a0424c5b864 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ecti1000.tfm" 993058720 2840 5606e1a681c23005308de9d61c09a8ff ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ectt0800.tfm" 993058738 1348 ad6a25e9916b0e5ddfcc7ffcb8d43448 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/ectt1000.tfm" 993058740 1348 d70ddf2d5d512b838e50a335e385e919 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/tcrm1000.tfm" 993058908 1436 c7f957a372ef2fbe93c0982f96625e12 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/jknappen/ec/tctt1000.tfm" 993058964 1284 ebe6f6da538d21a08b8f29b6479c4f22 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm" 1233951848 1004 54797486969f23fa377b128694d548df ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/public/amsfonts/symbols/msam10.tfm" 1233951854 916 f87d7c45f9c908e672703b83b72241a3 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/public/amsfonts/symbols/msam5.tfm" 1233951854 924 9904cf1d39e9767e7a3622f2a125a565 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/public/amsfonts/symbols/msam7.tfm" 1233951854 928 2dc8d444221b7a635bb58038579b861a ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/public/amsfonts/symbols/msbm10.tfm" 1233951854 908 2921f8a10601f252058503cc6570e581 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/public/amsfonts/symbols/msbm5.tfm" 1233951854 940 75ac932a52f80982a9f8ea75d03a34cf ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/tfm/public/amsfonts/symbols/msbm7.tfm" 1233951854 940 228d6584342e91276bf566bcf9716b83 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmmi5.pfb" 1247593067 37912 07513ec114ac737ab54cea0152f4424b ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmsy5.pfb" 1247593066 32915 7bf7720c61a5b3a7ff25b0964421c9b6 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/context/base/mkii/supp-pdf.mkii" 1580390158 71627 94eb9990bed73c364d7f53f960cc8c5b ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/atbegshi/atbegshi.sty" 1575571100 24708 5584a51a7101caf7e6bbf1fc27d8f7b1 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/babel/babel.sty" 1640863413 147419 612046eb31f6ee1a29c1e163d25a9bdd ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/babel/txtbabel.def" 1640863413 5233 a89961f969f72563cb59411e9dc4ae8e ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/bigintcalc/bigintcalc.sty" 1576433602 40635 c40361e206be584d448876bba8a64a3b ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/bitset/bitset.sty" 1575926576 33961 6b5c75130e435b2bfdb9f480a09a39f9 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/etexcmds/etexcmds.sty" 1576433638 7734 b98cbb34c81f667027c1e3ebdbfce34b ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/gettitlestring/gettitlestring.sty" 1576433666 8371 9d55b8bd010bc717624922fb3477d92e ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/iftex/iftex.sty" 1583523400 6501 4011d89d9621e0b0901138815ba5ff29 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/iftex/ifvtex.sty" 1583523400 1057 525c2192b5febbd8c1f662c9468335bb ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/infwarerr/infwarerr.sty" 1575399508 8356 7bbb2c2373aa810be568c29e333da8ed ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/intcalc/intcalc.sty" 1576433764 31769 002a487f55041f8e805cfbf6385ffd97 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/kvdefinekeys/kvdefinekeys.sty" 1576763304 5412 d5a2436094cd7be85769db90f29250a6 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/kvsetkeys/kvsetkeys.sty" 1576433820 13807 952b0226d4efca026f0e19dd266dcc22 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/ltxcmds/ltxcmds.sty" 1601732009 18568 4409f8f50cd365c68e684407e5350b1b ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/pdfescape/pdfescape.sty" 1575926700 19007 15924f7228aca6c6d184b115f4baa231 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/pdftexcmds/pdftexcmds.sty" 1623001677 20089 80423eac55aa175305d35b49e04fe23b ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/uniquecounter/uniquecounter.sty" 1576434012 7008 f92eaa0a3872ed622bbf538217cd2ab7 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/xkeyval/xkeyval.tex" 1623002090 19231 3cbf682090baecad8e17a66b7a271ed1 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/generic/xkeyval/xkvutils.tex" 1623002090 7677 cf3e6aa6a8d444f55327f61df80bfa0c ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/00miktex/epstopdf-sys.cfg" 1616067285 584 2a1075dd71571459f59146da9f7502ad ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/amscls/amsthm.sty" 1591020009 12594 0d51ac3a545aaaa555021326ff22a6cc ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/amsfonts/amsfonts.sty" 1358197772 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/amsfonts/amssymb.sty" 1358197772 13829 94730e64147574077f8ecfea9bb69af4 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/amsfonts/umsa.fd" 1358197772 961 6518c6525a34feb5e8250ffa91731cff ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/amsfonts/umsb.fd" 1358197772 961 d02606146ba5601b5645f987c92e6193 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/amsmath/amsbsy.sty" 1636824341 2222 da905dc1db75412efd2d8f67739f0596 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/amsmath/amsgen.sty" 1636824342 4173 bc0410bcccdff806d6132d3c1ef35481 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/amsmath/amsmath.sty" 1636824342 87648 07fbb6e9169e00cb2a2f40b31b2dbf3c ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/amsmath/amsopn.sty" 1636824343 4128 8eea906621b6639f7ba476a472036bbe ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/amsmath/amstext.sty" 1636824343 2444 926f379cc60fcf0c6e3fee2223b4370d ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/arabi/bblopts.cfg" 1139961600 902 c30e5c373bc58bde21f8f63a3091626f ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/atveryend/atveryend.sty" 1576101110 19336 ce7ae9438967282886b3b036cfad1e4d ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/auxhook/auxhook.sty" 1576538732 3935 57aa3c3e203a5c2effb4d2bd2efbc323 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/babel-english/english.ldf" 1622998066 7008 9ff5fdcc865b01beca2b0fe4a46231d4 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/alltt.sty" 1638775084 3137 2366459cfce784001c7405ed16a872fb ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/atbegshi-ltx.sty" 1638775084 3034 3bfb87122e6fa8758225c0dd3cbaceba ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/atveryend-ltx.sty" 1638775084 2462 754d6b31b2ab5a09bb72c348ace2ec75 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/fontenc.sty" 1638775084 4946 461cc78f6f26901410d9f1d725079cc6 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/ifthen.sty" 1638775084 5157 f308c7c04889e16c588e78aa42599fae ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/inputenc.sty" 1638775084 5049 969aec05d5f39c43f8005910498fcf90 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/makeidx.sty" 1638775082 1939 e44505a18ba4edebb8b70993e32c6350 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/report.cls" 1638775084 23203 8fbc410e29d3fd675970d5f9698c9c11 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/size10.clo" 1638775084 8448 96f18c76bf608a36ee6fbf021ac1dd32 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/t1cmss.fd" 1638775084 2621 95d97d14f2ca40d81472d6fd62553199 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/t1cmtt.fd" 1638775084 2443 6dd9a5deeddddfcceb01d1932590ebad ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/textcomp.sty" 1638775084 2894 55431114fc0e491ecee275edafd6c881 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/base/ts1cmtt.fd" 1638775082 2287 321c9b3e7f8038f483d2c21d3393e4fe ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/capt-of/capt-of.sty" 1264504665 1344 063f8536a047a2d9cb1803321f793f37 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/cmap/cmap.sty" 1612609498 3574 ddc11a0ae1c579d351ed20d2319ad422 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/cmap/ot1.cmap" 1612609498 1207 4e0d96772f0d338847cbfb4eca683c81 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/cmap/t1.cmap" 1612609498 1938 beaa4a8467aa0074076e0e19f2992e29 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/datetime/datetime-defaults.sty" 1429533782 4215 4c80eaed8cd4f9a80cc6244c0adeb81f ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/datetime/datetime.sty" 1429533782 28417 b023ffe1328fa89e7f133201d87029de ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/enumitem/enumitem.sty" 1561036220 51697 f8f08183cd2080d9d18a41432d651dfb ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/epigraph/epigraph.sty" 1578053510 4738 e947be1727d6ac747322008f8359ee17 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/epstopdf-pkg/epstopdf-base.sty" 1622999586 13886 d1306dcf79a944f6988e688c1785f9ce ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/eso-pic/eso-pic.sty" 1607182970 11772 8d0db0794e6aeb45348f60bbe3a3e093 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/etoolbox/etoolbox.sty" 1601894156 46845 3b58f70c6e861a13d927bff09d35ecbc ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/fancyhdr/fancyhdr.sty" 1612001844 17086 7ed8cbc4d361ec87392817e0dd4f65ec ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/fancyvrb/fancyvrb.sty" 1640113799 44023 c6f2f55a2bb9630fba10bfd488a5addd ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/float/float.sty" 1469020353 6916 16d2656a1984957e674b149555f1ea1d ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/fmtcount/fc-english.def" 1582571040 14870 f66b7dd28616119c2519cd5cc4dcae14 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/fmtcount/fcnumparser.sty" 1582571040 12791 43a81443714469abac77ce09f44ad2e2 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/fmtcount/fcprefix.sty" 1582571040 12519 5c732241af77b5f0e56e640b7d538395 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/fmtcount/fmtcount.sty" 1582571040 32021 ed70d543c537f19c96fc753321f1c3cc ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/fncychap/fncychap.sty" 1291943048 19488 fdd52eb173b3197d748e1ec25acb042f ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/footnotebackref/footnotebackref.sty" 1341124290 2729 a95b43c08b818612edc645e42967b2a2 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/framed/framed.sty" 1338538572 22449 7ec15c16d0d66790f28e90343c5434a3 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/geometry/geometry.cfg" 1578053545 1104 7ac475a4e3466b0b43e138e9356bda83 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/geometry/geometry.sty" 1578053545 42759 9cf6c5257b1bc7af01a58859749dd37a ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/graphics-cfg/color.cfg" 1465890692 1213 620bba36b25224fa9b7e1ccb4ecb76fd ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/graphics-cfg/graphics.cfg" 1465890692 1224 978390e9c2234eab29404bc21b268d1e ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/graphics-def/pdftex.def" 1637518328 19103 48d29b6e2a64cb717117ef65f107b404 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/graphics/color.sty" 1639593010 7197 eb6c1ebf41667a05cb50c23c19d5e8bc ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/graphics/graphics.sty" 1639593010 18399 7e40f80366dffb22c0e7b70517db5cb4 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/graphics/graphicx.sty" 1639593010 7996 a8fb260d598dcaf305a7ae7b9c3e3229 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/graphics/keyval.sty" 1639593011 2671 4de6781a30211fe0ea4c672e4a2a8166 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/graphics/trig.sty" 1639593011 4009 187ea2dc3194cd5a76cd99a8d7a6c4d0 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/hycolor/hycolor.sty" 1580380792 18571 4c28a13fc3d975e6e81c9bea1d697276 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/hyperref/hpdftex.def" 1623054242 49890 0bb76a5b745d92e86aed6f3f93e334f0 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/hyperref/hyperref-langpatches.def" 1623054242 1777 940b1aa83773bc035eb882e8d6842769 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/hyperref/hyperref.sty" 1623054242 230915 97a8817f13de4e61bbc3592cb2caa995 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/hyperref/nameref.sty" 1623054242 13242 133e617c5eebffdd05e421624022b267 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/hyperref/pd1enc.def" 1623054242 14132 c9404e8e78123ef0d1007c34d1d6da51 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/hyperref/puenc.def" 1623054242 117004 86586f287ddfad919a0a4bd68934277a ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/kvoptions/kvoptions.sty" 1602224496 22521 d2fceb764a442a2001d257ef11db7618 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/l3backend/l3backend-pdftex.def" 1639465870 29971 0fb19a39718d289d512ef2f074f16cc2 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/l3kernel/expl3.sty" 1637595832 6208 8e07b49f15e79668e492fab98378014d ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/l3packages/l3keys2e/l3keys2e.sty" 1636720796 4674 175cd58a3276550cf236fd19e68aba45 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/letltxmacro/letltxmacro.sty" 1575399536 5766 13a9e8766c47f30327caf893ece86ac8 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/lipsum/lipsum.ltd.tex" 1633250122 95525 6fd0552101a6b1f9b7a84b402ec435ba ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/lipsum/lipsum.sty" 1633250122 14690 c2c754218a7108db7823a4839c1bc3cd ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/mmap/oml.cmap" 1215048213 1866 c1c12138091b4a8edd4a24a940e6f792 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/mmap/oms.cmap" 1215048213 2370 3b1f71b14b974f07cef532db09ae9ee0 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/mmap/omx.cmap" 1215048260 3001 252c8ca42b06a22cb1a11c0e47790c6e ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/needspace/needspace.sty" 1364792977 852 0e34dbb72efc69fa07602405ad95585e ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/nextpage/nextpage.sty" 1251937171 1745 04b0f50af5d59a9cf3c17f3f4452ed12 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/oberdiek/hypcap.sty" 1637060716 3822 b53c749cd81352b4679a35b0dafefb95 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/parskip/parskip-2001-04-09.sty" 1615716820 2757 ea00cb4f4e9abc702916f74d3812ef67 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/parskip/parskip.sty" 1615976160 4288 94714aa7f535440f33181fec52a31963 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/refcount/refcount.sty" 1576433952 9878 9e94e8fa600d95f9c7731bb21dfb67a4 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/rerunfilecheck/rerunfilecheck.sty" 1575571282 9715 b051d5b493d9fe5f4bc251462d039e5f ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/setspace/setspace.sty" 1324294077 22913 a27d7908fc6f0385466454a966a316eb ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/tabulary/tabulary.sty" 1403515508 14242 8c83287d79183c3bf58fd70871e8a70b ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/titlesec/titlesec.sty" 1625494067 48833 3b7b4cfab1a3d15596bfd3772a77ab65 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/tocbibind/tocbibind.sty" 1286954396 8927 46f54e33fc9cef24f78ab3bc811cb63f ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/tools/array.sty" 1636710260 12694 6c23725d50ab9d1e2d3ce482c58ffcf3 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/tools/longtable.sty" 1636710260 12892 3ffe092fc7f5d1cb9866f1bcb071d0d6 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/tools/multicol.sty" 1636710260 32262 2bb622a0aa56c4a7a5cbdfe9d122c15a ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/transparent/transparent.sty" 1575059884 4155 541de118e0abc42fce3317addc90afb0 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/upquote/upquote.sty" 1335531156 1088 517e01cde97c1c0baf72e69d43aa5a2e ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/url/url.sty" 1388490452 12796 8edb7d69a20b857904dd0ea757c14ec9 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/varwidth/varwidth.sty" 1238465940 10894 d359a13923460b2a73d4312d613554c8 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/wrapfig/wrapfig.sty" 1044403200 26220 3701aebf80ccdef248c0c20dd062fea9 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/xcolor/xcolor.sty" 1636284872 56029 3f7889dab51d620aa43177c391b7b190 ""
"C:/Users/Thor/AppData/Local/Programs/MiKTeX/tex/latex/xkeyval/xkeyval.sty" 1623002090 4902 efb3d66683a2da2a232f71e3a571a899 ""
"MVC_pattern.png" 1644997428 7876 646a6038633703275a2727875edba16a ""
"P04_Aufgabenstellung.png" 1644917366 7263 f32bb04e523e9546f9777cbc5463d130 ""
"TicTacToe.png" 1644997430 53954 f7d3405a232123a1f8de81ab1faa4a4e ""
"Wochentagsberechnung.jpg" 1644919224 15553 3526ef927a880fdd8c095aca9e544b6f ""
"a.png" 1644998095 829 93c48111959d27f1bcf856368e58cd64 ""
"b.png" 1644998096 1905 d9e5fe1fe0597e8f695a2ec364daa617 ""
"c.png" 1644998096 4196 6b6acc128946e5abfc76e28dcc73fc67 ""
"coffee_customer.png" 1644999828 5049 852e8343298a5c53ff3083a875ecfbe8 ""
"d.png" 1644998097 3353 87a7ad2316a416303812466ce26b70f9 ""
"ein_mann_orchester.png" 1644999665 217305 a89e417b00d1e7adc5e17158cd8d8b3e ""
"en-zhaw-ines-rgb.png" 1641300576 57463 4d3e5434fd873ef81796cea85238b56c ""
"kalender-108_v-ARDFotogalerie.jpg" 1644918852 69510 cc3b70126d66f5bcbb1045c6918a4543 ""
"linked_list.png" 1644998098 2921 a44bc849a6f2f25f9fd11f0303aab513 ""
"main.aux" 1645084636 34148 2f58faf03b2558dddc3c8b5f56cb14ee "pdflatex"
"main.ind" 1645024878 0 d41d8cd98f00b204e9800998ecf8427e "makeindex main.idx"
"main.out" 1645084636 23968 6ef42dbae541b613d10db90e85f6476e "pdflatex"
"main.tex" 1645084633 153762 c3d44457c25b91e885993afef0ebbf1d ""
"main.toc" 1645084636 11305 19480f5dbeb28029e3680675fa29a9a5 "pdflatex"
"random_number.png" 1644918675 7457 9ce36e5f5d9ac102987863cba398bdb6 ""
"sequence_graph.png" 1644999830 3045 d7f77b908aed90608f903e5b41624b5a ""
"sphinx.sty" 1644224256 13262 0226aaccc1147ed884a3946fce78a6d2 ""
"sphinxhighlight.sty" 1645084632 6777 8ee39fca897f152770a05a0325c8e603 ""
"sphinxlatexadmonitions.sty" 1644224256 6238 2d867d769abf3f72abc17ef52adff78b ""
"sphinxlatexcontainers.sty" 1644224256 901 d3a3a1b7b2547f47ade2499350b5c420 ""
"sphinxlatexgraphics.sty" 1644224256 4840 a9578332b6f3b35e198751fb632c9b79 ""
"sphinxlatexindbibtoc.sty" 1644224256 2066 b93f8504d02f6337fde3074b179de55e ""
"sphinxlatexlists.sty" 1644224256 3540 28bde24363589dd8238e1c3089e5b1b5 ""
"sphinxlatexliterals.sty" 1644224256 35719 daaa4295be807130a5df36ead18b83fa ""
"sphinxlatexnumfig.sty" 1644224256 4532 3633caf84afa1a98e1a060b7868202bb ""
"sphinxlatexobjects.sty" 1644224256 7539 5bd439fe3b377102e234413cf4aac14a ""
"sphinxlatexshadowbox.sty" 1644224256 3885 01355157c5580b34ec18031ea7a5e0e0 ""
"sphinxlatexstyleheadings.sty" 1644224256 3253 144b82f37e9d225d888cce45c19b8ed4 ""
"sphinxlatexstylepage.sty" 1644224256 3064 abce6c3018a84afee0afb08a431944ea ""
"sphinxlatexstyletext.sty" 1644224256 6177 c18841ce3fafc366cd3b145f8faa4c37 ""
"sphinxlatextables.sty" 1644224256 21848 2827eb0b11b99b185a8b77317d3e131c ""
"sphinxmessages.sty" 1645084633 765 3f5fcd6cdd7964ed608767954a8ced6f ""
"sphinxoptionsgeometry.sty" 1644224256 2061 47bb34b8ed8a78823eb0c886abfb9f4d ""
"sphinxoptionshyperref.sty" 1644224256 1094 79beb8b8a3f10784f8cce804e0f9d3aa ""
"sphinxpackagefootnote.sty" 1644224256 13248 e2c77871396275ccf592403f8130f6f2 ""
"synchronisationsprobleme.png" 1644999832 259198 c789607c889a43f0353fee8b2d3dc4dd ""
(generated)
"main.aux"
"main.idx"
"main.log"
"main.out"
"main.pdf"
"main.toc"

1503
main.fls Normal file

File diff suppressed because it is too large Load Diff

0
main.idx Normal file
View File

5
main.ilg Normal file
View File

@ -0,0 +1,5 @@
This is makeindex, version 2.16 [MiKTeX 21.12.10].
Scanning style file ./python.ist.......done (7 attributes redefined, 0 ignored).
Scanning input file main.idx...done (0 entries accepted, 0 rejected).
Nothing written in main.ind.
Transcript written in main.ilg.

0
main.ind Normal file
View File

1183
main.log Normal file

File diff suppressed because it is too large Load Diff

121
main.out Normal file
View File

@ -0,0 +1,121 @@
\BOOKMARK [0][-]{chapter*.1}{\376\377\000T\000a\000b\000l\000e\000\040\000o\000f\000\040\000c\000o\000n\000t\000e\000n\000t\000s}{}% 1
\BOOKMARK [0][-]{chapter.1}{\376\377\0000\0001\000\040\000-\000\040\000E\000r\000s\000t\000e\000\040\000S\000c\000h\000r\000i\000t\000t\000e\000\040\000m\000i\000t\000\040\000C}{}% 2
\BOOKMARK [1][-]{section.1.1}{\376\377\0001\000.\000\040\000\334\000b\000e\000r\000s\000i\000c\000h\000t}{chapter.1}% 3
\BOOKMARK [1][-]{section.1.2}{\376\377\0002\000.\000\040\000L\000e\000r\000n\000z\000i\000e\000l\000e}{chapter.1}% 4
\BOOKMARK [1][-]{section.1.3}{\376\377\0003\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0001\000:\000\040\000v\000i\000r\000t\000u\000e\000l\000l\000e\000\040\000M\000a\000s\000c\000h\000i\000n\000e}{chapter.1}% 5
\BOOKMARK [1][-]{section.1.4}{\376\377\0004\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0002\000:\000\040\000H\000e\000l\000l\000o\000\040\000W\000o\000r\000l\000d}{chapter.1}% 6
\BOOKMARK [1][-]{section.1.5}{\376\377\0005\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0003\000:\000\040\000T\000a\000b\000e\000l\000l\000e\000n\000a\000u\000s\000g\000a\000b\000e}{chapter.1}% 7
\BOOKMARK [1][-]{section.1.6}{\376\377\0006\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0004\000:\000\040\000Z\000e\000i\000c\000h\000e\000n\000\040\000u\000n\000d\000\040\000W\000\366\000r\000t\000e\000r\000\040\000z\000\344\000h\000l\000e\000n}{chapter.1}% 8
\BOOKMARK [1][-]{section.1.7}{\376\377\0007\000.\000\040\000B\000e\000w\000e\000r\000t\000u\000n\000g}{chapter.1}% 9
\BOOKMARK [0][-]{chapter.2}{\376\377\0000\0002\000:\000\040\000F\000u\000n\000k\000t\000i\000o\000n\000e\000n\000,\000\040\000D\000a\000t\000e\000n\000t\000y\000p\000\040\040\034\000e\000n\000u\000m\040\035}{}% 10
\BOOKMARK [1][-]{section.2.1}{\376\377\0001\000.\000\040\000\334\000b\000e\000r\000s\000i\000c\000h\000t}{chapter.2}% 11
\BOOKMARK [1][-]{section.2.2}{\376\377\0002\000.\000\040\000L\000e\000r\000n\000z\000i\000e\000l\000e}{chapter.2}% 12
\BOOKMARK [1][-]{section.2.3}{\376\377\0003\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000n}{chapter.2}% 13
\BOOKMARK [2][-]{subsection.2.3.1}{\376\377\0003\000.\0001\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0001\000\040\000T\000a\000g\000e\000\040\000p\000r\000o\000\040\000M\000o\000n\000a\000t}{section.2.3}% 14
\BOOKMARK [2][-]{subsection.2.3.2}{\376\377\0003\000.\0002\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0002\000\040\000B\000e\000s\000t\000i\000m\000m\000e\000n\000\040\000d\000e\000s\000\040\000W\000o\000c\000h\000e\000n\000t\000a\000g\000s}{section.2.3}% 15
\BOOKMARK [3][-]{subsubsection.2.3.2.1}{\376\377\0003\000.\0002\000.\0001\000\040\000T\000e\000i\000l\000a\000u\000f\000g\000a\000b\000e\000\040\000A\000r\000g\000u\000m\000e\000n\000t\000e\000\040\000P\000a\000r\000s\000e\000n\000\040\000u\000n\000d\000\040\000a\000u\000f\000\040\000K\000o\000r\000r\000e\000k\000t\000h\000e\000i\000t\000\040\000p\000r\000\374\000f\000e\000n}{subsection.2.3.2}% 16
\BOOKMARK [4][-]{paragraph*.3}{\376\377\0003\000.\0002\000.\0001\000.\0001\000\040\000A\000r\000g\000u\000m\000e\000n\000t\000\040\000F\000o\000r\000m\000a\000t}{subsubsection.2.3.2.1}% 17
\BOOKMARK [4][-]{paragraph*.4}{\376\377\0003\000.\0002\000.\0001\000.\0002\000\040\000K\000o\000r\000r\000e\000k\000t\000e\000s\000\040\000D\000a\000t\000u\000m}{subsubsection.2.3.2.1}% 18
\BOOKMARK [4][-]{paragraph*.5}{\376\377\0003\000.\0002\000.\0001\000.\0003\000\040\000V\000o\000r\000g\000a\000b\000e\000n\000\040\000a\000n\000\040\000d\000i\000e\000\040\000U\000m\000s\000e\000t\000z\000u\000n\000g}{subsubsection.2.3.2.1}% 19
\BOOKMARK [4][-]{paragraph*.6}{\376\377\0003\000.\0002\000.\0001\000.\0004\000\040\000H\000i\000n\000w\000e\000i\000s\000e}{subsubsection.2.3.2.1}% 20
\BOOKMARK [3][-]{subsubsection.2.3.2.2}{\376\377\0003\000.\0002\000.\0002\000\040\000T\000e\000i\000l\000a\000u\000f\000g\000a\000b\000e\000\040\000W\000o\000c\000h\000e\000n\000t\000a\000g\000\040\000B\000e\000r\000e\000c\000h\000n\000u\000n\000g}{subsection.2.3.2}% 21
\BOOKMARK [1][-]{section.2.4}{\376\377\0004\000.\000\040\000B\000e\000w\000e\000r\000t\000u\000n\000g}{chapter.2}% 22
\BOOKMARK [1][-]{section.2.5}{\376\377\0005\000.\000\040\000A\000n\000h\000a\000n\000g}{chapter.2}% 23
\BOOKMARK [2][-]{subsection.2.5.1}{\376\377\0005\000.\0001\000\040\000S\000p\000r\000a\000c\000h\000\040\000E\000l\000e\000m\000e\000n\000t}{section.2.5}% 24
\BOOKMARK [2][-]{subsection.2.5.2}{\376\377\0005\000.\0002\000\040\000B\000e\000s\000c\000h\000r\000e\000i\000b\000u\000n\000g}{section.2.5}% 25
\BOOKMARK [0][-]{chapter.3}{\376\377\0000\0003\000\040\000-\000\040\000B\000i\000t\000\040\000O\000p\000e\000r\000a\000t\000i\000o\000n\000e\000n\000,\000\040\000S\000t\000r\000u\000c\000t\000,\000\040\000T\000y\000p\000e\000d\000e\000f}{}% 26
\BOOKMARK [1][-]{section.3.1}{\376\377\0001\000.\000\040\000B\000i\000t\000\040\000O\000p\000e\000r\000a\000t\000i\000o\000n\000e\000n}{chapter.3}% 27
\BOOKMARK [2][-]{subsection.3.1.1}{\376\377\0001\000.\0001\000\040\000\334\000b\000u\000n\000g\000e\000n}{section.3.1}% 28
\BOOKMARK [3][-]{subsubsection.3.1.1.1}{\376\377\0001\000.\000\040\000B\000a\000s\000i\000s\000\040\000O\000p\000e\000r\000a\000t\000i\000o\000n\000e\000n}{subsection.3.1.1}% 29
\BOOKMARK [3][-]{subsubsection.3.1.1.2}{\376\377\0002\000.\000\040\000V\000a\000r\000i\000a\000b\000l\000e\000n\000\040\000t\000a\000u\000s\000c\000h\000e\000n\000\040\000\050\000o\000h\000n\000e\000\040\000D\000r\000i\000t\000t\000-\000V\000a\000r\000i\000a\000b\000l\000e\000\051}{subsection.3.1.1}% 30
\BOOKMARK [3][-]{subsubsection.3.1.1.3}{\376\377\0003\000.\000\040\000L\000o\000w\000e\000r\000-\000\040\000/\000\040\000U\000p\000p\000e\000r\000c\000a\000s\000e}{subsection.3.1.1}% 31
\BOOKMARK [3][-]{subsubsection.3.1.1.4}{\376\377\0004\000.\000\040\000P\000r\000\374\000f\000e\000n\000\040\000a\000u\000f\000\040\0002\000-\000e\000r\000\040\000P\000o\000t\000e\000n\000z}{subsection.3.1.1}% 32
\BOOKMARK [1][-]{section.3.2}{\376\377\0002\000.\000\040\000S\000t\000r\000u\000c\000t\000\040\000\046\000\040\000t\000y\000p\000e\000d\000e\000f}{chapter.3}% 33
\BOOKMARK [2][-]{subsection.3.2.1}{\376\377\0002\000.\0001\000\040\000\334\000b\000u\000n\000g\000e\000n}{section.3.2}% 34
\BOOKMARK [3][-]{subsubsection.3.2.1.1}{\376\377\0001\000.\000\040\000B\000i\000t\000\040\000O\000p\000e\000r\000a\000t\000i\000o\000n\000e\000n\000\040\000R\000e\000c\000h\000n\000e\000r}{subsection.3.2.1}% 35
\BOOKMARK [0][-]{chapter.4}{\376\377\0000\0004\000\040\000-\000\040\000M\000o\000d\000u\000l\000a\000r\000i\000s\000i\000e\000r\000e\000n\000\040\000v\000o\000n\000\040\000C\000\040\000C\000o\000d\000e}{}% 36
\BOOKMARK [1][-]{section.4.1}{\376\377\0001\000.\000\040\000\334\000b\000e\000r\000s\000i\000c\000h\000t}{chapter.4}% 37
\BOOKMARK [1][-]{section.4.2}{\376\377\0002\000.\000\040\000L\000e\000r\000n\000z\000i\000e\000l\000e}{chapter.4}% 38
\BOOKMARK [1][-]{section.4.3}{\376\377\0003\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0001\000:\000\040\000M\000o\000d\000u\000l\000a\000r\000i\000s\000i\000e\000r\000e\000n}{chapter.4}% 39
\BOOKMARK [2][-]{subsection.4.3.1}{\376\377\0003\000.\0001\000\040\000T\000e\000i\000l\000a\000u\000f\000g\000a\000b\000e\000\040\000M\000o\000d\000u\000l\000e\000s\000\040\000e\000i\000n\000b\000i\000n\000d\000e\000n\000,\000\040\000H\000e\000a\000d\000e\000r\000\040\000F\000i\000l\000e\000s\000\040\000s\000c\000h\000r\000e\000i\000b\000e\000n}{section.4.3}% 40
\BOOKMARK [1][-]{section.4.4}{\376\377\0004\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0002\000:\000\040\000M\000a\000k\000e\000f\000i\000l\000e\000\040\000R\000e\000g\000e\000l\000n}{chapter.4}% 41
\BOOKMARK [2][-]{subsection.4.4.1}{\376\377\0004\000.\0001\000\040\000N\000e\000u\000e\000\040\000R\000e\000g\000e\000l\000n\000\040\000h\000i\000n\000z\000u\000f\000\374\000g\000e\000n}{section.4.4}% 42
\BOOKMARK [1][-]{section.4.5}{\376\377\0005\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0003}{chapter.4}% 43
\BOOKMARK [1][-]{section.4.6}{\376\377\0006\000.\000\040\000B\000e\000w\000e\000r\000t\000u\000n\000g}{chapter.4}% 44
\BOOKMARK [1][-]{section.4.7}{\376\377\0007\000.\000\040\000E\000r\000w\000e\000i\000t\000e\000r\000u\000n\000g\000\040\000D\000o\000x\000y\000f\000i\000l\000e\000\040\000f\000\374\000r\000\040\000A\000b\000h\000\344\000n\000g\000i\000g\000k\000e\000i\000t\000s\000a\000n\000a\000l\000y\000s\000e}{chapter.4}% 45
\BOOKMARK [0][-]{chapter.5}{\376\377\0000\0005\000\040\000-\000\040\000A\000r\000r\000a\000y\000s\000/\000S\000t\000r\000i\000n\000g\000s\000/\000T\000i\000c\000T\000a\000c\000T\000o\000e}{}% 46
\BOOKMARK [1][-]{section.5.1}{\376\377\0001\000.\000\040\000\334\000b\000e\000r\000s\000i\000c\000h\000t}{chapter.5}% 47
\BOOKMARK [1][-]{section.5.2}{\376\377\0002\000.\000\040\000L\000e\000r\000n\000z\000i\000e\000l\000e}{chapter.5}% 48
\BOOKMARK [1][-]{section.5.3}{\376\377\0003\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0001\000:\000\040\000S\000o\000r\000t\000i\000e\000r\000e\000n\000\040\000v\000o\000n\000\040\000S\000t\000r\000i\000n\000g\000s}{chapter.5}% 49
\BOOKMARK [1][-]{section.5.4}{\376\377\0004\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0002\000:\000\040\000T\000i\000c\000T\000a\000c\000T\000o\000e}{chapter.5}% 50
\BOOKMARK [2][-]{subsection.5.4.1}{\376\377\0004\000.\0001\000\040\000T\000e\000i\000l\000a\000u\000f\000g\000a\000b\000e\000\040\000t\000e\000s\000t\000\137\000m\000o\000d\000e\000l\000\137\000i\000n\000i\000t}{section.5.4}% 51
\BOOKMARK [2][-]{subsection.5.4.2}{\376\377\0004\000.\0002\000\040\000T\000e\000i\000l\000a\000u\000f\000g\000a\000b\000e\000\040\000t\000e\000s\000t\000\137\000m\000o\000d\000e\000l\000\137\000g\000e\000t\000\137\000s\000t\000a\000t\000e\000\040\000u\000n\000d\000\040\000t\000e\000s\000t\000\137\000m\000o\000d\000e\000l\000\137\000g\000e\000t\000\137\000w\000i\000n\000n\000e\000r}{section.5.4}% 52
\BOOKMARK [2][-]{subsection.5.4.3}{\376\377\0004\000.\0003\000\040\000T\000e\000i\000l\000a\000u\000f\000g\000a\000b\000e\000\040\000t\000e\000s\000t\000\137\000m\000o\000d\000e\000l\000\137\000c\000a\000n\000\137\000m\000o\000v\000e}{section.5.4}% 53
\BOOKMARK [2][-]{subsection.5.4.4}{\376\377\0004\000.\0004\000\040\000T\000e\000i\000l\000a\000u\000f\000g\000a\000b\000e\000\040\000t\000e\000s\000t\000\137\000m\000o\000d\000e\000l\000\137\000m\000o\000v\000e\000\040\000u\000n\000d\000\040\000t\000e\000s\000t\000\137\000m\000o\000d\000e\000l\000\137\000g\000e\000t\000\137\000w\000i\000n\000\137\000l\000i\000n\000e}{section.5.4}% 54
\BOOKMARK [1][-]{section.5.5}{\376\377\0005\000.\000\040\000B\000e\000w\000e\000r\000t\000u\000n\000g}{chapter.5}% 55
\BOOKMARK [0][-]{chapter.6}{\376\377\0000\0006\000\040\000-\000\040\000P\000e\000r\000s\000o\000n\000e\000n\000\040\000V\000e\000r\000w\000a\000l\000t\000u\000n\000g\000\040\040\023\000\040\000L\000i\000n\000k\000e\000d\000\040\000L\000i\000s\000t}{}% 56
\BOOKMARK [1][-]{section.6.1}{\376\377\0001\000.\000\040\000\334\000b\000e\000r\000s\000i\000c\000h\000t}{chapter.6}% 57
\BOOKMARK [1][-]{section.6.2}{\376\377\0002\000.\000\040\000L\000e\000r\000n\000z\000i\000e\000l\000e}{chapter.6}% 58
\BOOKMARK [1][-]{section.6.3}{\376\377\0003\000.\000\040\000P\000e\000r\000s\000o\000n\000e\000n\000v\000e\000r\000w\000a\000l\000t\000u\000n\000g}{chapter.6}% 59
\BOOKMARK [2][-]{subsection.6.3.1}{\376\377\0003\000.\0001\000\040\000P\000r\000o\000g\000r\000a\000m\000m\000f\000u\000n\000k\000t\000i\000o\000n}{section.6.3}% 60
\BOOKMARK [2][-]{subsection.6.3.2}{\376\377\0003\000.\0002\000\040\000D\000e\000s\000i\000g\000n\000v\000o\000r\000g\000a\000b\000e\000n}{section.6.3}% 61
\BOOKMARK [2][-]{subsection.6.3.3}{\376\377\0003\000.\0003\000\040\000B\000e\000s\000t\000e\000h\000e\000n\000d\000e\000r\000\040\000P\000r\000o\000g\000r\000a\000m\000m\000r\000a\000h\000m\000e\000n}{section.6.3}% 62
\BOOKMARK [1][-]{section.6.4}{\376\377\0004\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0001\000:\000\040\000M\000o\000d\000u\000l\000a\000r\000i\000s\000i\000e\000r\000u\000n\000g\000\040\040\023\000\040\000A\000P\000I\000\040\000u\000n\000d\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n\000\040\000m\000a\000i\000n\000.\000c}{chapter.6}% 63
\BOOKMARK [1][-]{section.6.5}{\376\377\0005\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0002\000:\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000v\000o\000n\000\040\000p\000e\000r\000s\000o\000n\000.\000c\000\040\000u\000n\000d\000\040\000l\000i\000s\000t\000.\000c}{chapter.6}% 64
\BOOKMARK [2][-]{subsection.6.5.1}{\376\377\0005\000.\0001\000\040\000T\000e\000i\000l\000a\000u\000f\000g\000a\000b\000e\000:\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000v\000o\000n\000\040\000p\000e\000r\000s\000o\000n\000.\000c}{section.6.5}% 65
\BOOKMARK [2][-]{subsection.6.5.2}{\376\377\0005\000.\0002\000\040\000T\000e\000i\000l\000a\000u\000f\000g\000a\000b\000e\000:\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000i\000e\000r\000u\000n\000g\000\040\000v\000o\000n\000\040\000l\000i\000s\000t\000.\000c}{section.6.5}% 66
\BOOKMARK [1][-]{section.6.6}{\376\377\0006\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0003\000:\000\040\000U\000n\000i\000t\000\040\000T\000e\000s\000t\000s}{chapter.6}% 67
\BOOKMARK [1][-]{section.6.7}{\376\377\0007\000.\000\040\000B\000e\000w\000e\000r\000t\000u\000n\000g}{chapter.6}% 68
\BOOKMARK [0][-]{chapter.7}{\376\377\0000\0007\000\040\000-\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000\040\000u\000n\000d\000\040\000T\000h\000r\000e\000a\000d\000s}{}% 69
\BOOKMARK [1][-]{section.7.1}{\376\377\0001\000.\000\040\000\334\000b\000e\000r\000s\000i\000c\000h\000t}{chapter.7}% 70
\BOOKMARK [2][-]{subsection.7.1.1}{\376\377\0001\000.\0001\000\040\000N\000a\000c\000h\000w\000e\000i\000s}{section.7.1}% 71
\BOOKMARK [1][-]{section.7.2}{\376\377\0002\000.\000\040\000L\000e\000r\000n\000z\000i\000e\000l\000e}{chapter.7}% 72
\BOOKMARK [1][-]{section.7.3}{\376\377\0003\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000n}{chapter.7}% 73
\BOOKMARK [2][-]{subsection.7.3.1}{\376\377\0003\000.\0001\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0001\000:\000\040\000P\000r\000o\000z\000e\000s\000s\000\040\000m\000i\000t\000\040\000f\000o\000r\000k\000\050\000\051\000\040\000e\000r\000z\000e\000u\000g\000e\000n}{section.7.3}% 74
\BOOKMARK [2][-]{subsection.7.3.2}{\376\377\0003\000.\0002\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0002\000:\000\040\000P\000r\000o\000z\000e\000s\000s\000\040\000m\000i\000t\000\040\000f\000o\000r\000k\000\050\000\051\000\040\000u\000n\000d\000\040\000e\000x\000e\000c\000\050\000\051\000:\000\040\000P\000r\000o\000g\000r\000a\000m\000m\000\040\000I\000m\000a\000g\000e\000\040\000e\000r\000s\000e\000t\000z\000e\000n}{section.7.3}% 75
\BOOKMARK [2][-]{subsection.7.3.3}{\376\377\0003\000.\0003\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0003\000:\000\040\000P\000r\000o\000z\000e\000s\000s\000h\000i\000e\000r\000a\000r\000c\000h\000i\000e\000\040\000a\000n\000a\000l\000y\000s\000i\000e\000r\000e\000n}{section.7.3}% 76
\BOOKMARK [2][-]{subsection.7.3.4}{\376\377\0003\000.\0004\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0004\000:\000\040\000Z\000e\000i\000t\000l\000i\000c\000h\000e\000r\000\040\000A\000b\000l\000a\000u\000f\000\040\000v\000o\000n\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000n}{section.7.3}% 77
\BOOKMARK [2][-]{subsection.7.3.5}{\376\377\0003\000.\0005\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0005\000:\000\040\000W\000a\000i\000s\000e\000n\000k\000i\000n\000d\000e\000r\000\040\000\050\000O\000r\000p\000h\000a\000n\000\040\000P\000r\000o\000c\000e\000s\000s\000e\000s\000\051}{section.7.3}% 78
\BOOKMARK [2][-]{subsection.7.3.6}{\376\377\0003\000.\0006\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0006\000:\000\040\000T\000e\000r\000m\000i\000n\000i\000e\000r\000t\000e\000,\000\040\000h\000a\000l\000b\000t\000o\000t\000e\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000\040\000\050\000Z\000o\000m\000b\000i\000e\000s\000\051}{section.7.3}% 79
\BOOKMARK [2][-]{subsection.7.3.7}{\376\377\0003\000.\0007\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0007\000:\000\040\000A\000u\000f\000\040\000T\000e\000r\000m\000i\000n\000i\000e\000r\000e\000n\000\040\000v\000o\000n\000\040\000K\000i\000n\000d\000p\000r\000o\000z\000e\000s\000s\000e\000n\000\040\000w\000a\000r\000t\000e\000n}{section.7.3}% 80
\BOOKMARK [2][-]{subsection.7.3.8}{\376\377\0003\000.\0008\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0008\000:\000\040\000K\000i\000n\000d\000p\000r\000o\000z\000e\000s\000s\000\040\000a\000l\000s\000\040\000K\000o\000p\000i\000e\000\040\000d\000e\000s\000\040\000E\000l\000t\000e\000r\000n\000p\000r\000o\000z\000e\000s\000s\000e\000s}{section.7.3}% 81
\BOOKMARK [2][-]{subsection.7.3.9}{\376\377\0003\000.\0009\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0009\000:\000\040\000U\000n\000t\000e\000r\000s\000c\000h\000i\000e\000d\000\040\000v\000o\000n\000\040\000T\000h\000r\000e\000a\000d\000s\000\040\000g\000e\000g\000e\000n\000\374\000b\000e\000r\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000n}{section.7.3}% 82
\BOOKMARK [2][-]{subsection.7.3.10}{\376\377\0003\000.\0001\0000\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0001\0000\000\040\000\050\000o\000p\000t\000i\000o\000n\000a\000l\000\051\000:}{section.7.3}% 83
\BOOKMARK [3][-]{subsubsection.7.3.10.1}{\376\377\0003\000.\0001\0000\000.\0001\000\040\000\334\000b\000e\000r\000s\000i\000c\000h\000t}{subsection.7.3.10}% 84
\BOOKMARK [4][-]{paragraph*.7}{\376\377\0003\000.\0001\0000\000.\0001\000.\0001\000\040\000N\000a\000c\000h\000w\000e\000i\000s}{subsubsection.7.3.10.1}% 85
\BOOKMARK [3][-]{subsubsection.7.3.10.2}{\376\377\0003\000.\0001\0000\000.\0002\000\040\000L\000e\000r\000n\000z\000i\000e\000l\000e}{subsection.7.3.10}% 86
\BOOKMARK [3][-]{subsubsection.7.3.10.3}{\376\377\0003\000.\0001\0000\000.\0003\000\040\000A\000u\000f\000g\000a\000b\000e\000:\000\040\000D\000\344\000m\000o\000n\000\040\000P\000r\000o\000z\000e\000s\000s\000e}{subsection.7.3.10}% 87
\BOOKMARK [3][-]{subsubsection.7.3.10.4}{\376\377\0003\000.\0001\0000\000.\0004\000\040\000Z\000u\000s\000a\000t\000z\000i\000n\000f\000o\000r\000m\000a\000t\000i\000o\000n\000e\000n}{subsection.7.3.10}% 88
\BOOKMARK [4][-]{paragraph*.8}{\376\377\0003\000.\0001\0000\000.\0004\000.\0001\000\040\000D\000i\000e\000s\000e\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n}{subsubsection.7.3.10.4}% 89
\BOOKMARK [4][-]{paragraph*.9}{\376\377\0003\000.\0001\0000\000.\0004\000.\0002\000\040\000Z\000u\000s\000a\000t\000z\000i\000n\000f\000o\000r\000m\000a\000t\000i\000o\000n\000\040\000z\000u\000\040\000D\000\344\000m\000o\000n\000\040\000P\000r\000o\000z\000e\000s\000s\000e\000n}{subsubsection.7.3.10.4}% 90
\BOOKMARK [1][-]{section.7.4}{\376\377\0004\000.\000\040\000B\000e\000w\000e\000r\000t\000u\000n\000g}{chapter.7}% 91
\BOOKMARK [0][-]{chapter.8}{\376\377\0000\0008\000\040\000-\000\040\000S\000y\000n\000c\000h\000r\000o\000n\000i\000s\000a\000t\000i\000o\000n\000s\000p\000r\000o\000b\000l\000e\000m\000e}{}% 92
\BOOKMARK [1][-]{section.8.1}{\376\377\0001\000.\000\040\000\334\000b\000e\000r\000s\000i\000c\000h\000t}{chapter.8}% 93
\BOOKMARK [2][-]{subsection.8.1.1}{\376\377\0001\000.\0001\000\040\000N\000a\000c\000h\000w\000e\000i\000s}{section.8.1}% 94
\BOOKMARK [1][-]{section.8.2}{\376\377\0002\000.\000\040\000L\000e\000r\000n\000z\000i\000e\000l\000e}{chapter.8}% 95
\BOOKMARK [1][-]{section.8.3}{\376\377\0003\000.\000\040\000E\000i\000n\000f\000\374\000h\000r\000u\000n\000g}{chapter.8}% 96
\BOOKMARK [2][-]{subsection.8.3.1}{\376\377\0003\000.\0001\000\040\000W\000i\000e\000\040\000l\000\366\000s\000t\000\040\000m\000a\000n\000\040\000S\000y\000n\000c\000h\000r\000o\000n\000i\000s\000a\000t\000i\000o\000n\000s\000p\000r\000o\000b\000l\000e\000m\000e\000?}{section.8.3}% 97
\BOOKMARK [1][-]{section.8.4}{\376\377\0004\000.\000\040\000D\000e\000r\000\040\000K\000a\000f\000f\000e\000e\000-\000A\000u\000t\000o\000m\000a\000t}{chapter.8}% 98
\BOOKMARK [2][-]{subsection.8.4.1}{\376\377\0004\000.\0001\000\040\000A\000u\000f\000g\000a\000b\000e\000:\000\040\000M\000u\000t\000u\000a\000l\000\040\000E\000x\000c\000l\000u\000s\000i\000o\000n}{section.8.4}% 99
\BOOKMARK [3][-]{subsubsection.8.4.1.1}{\376\377\000A\000u\000f\000g\000a\000b\000e\000n}{subsection.8.4.1}% 100
\BOOKMARK [2][-]{subsection.8.4.2}{\376\377\0004\000.\0002\000\040\000A\000u\000f\000g\000a\000b\000e\000:\000\040\000E\000i\000n\000f\000a\000c\000h\000e\000\040\000R\000e\000i\000h\000e\000n\000f\000o\000l\000g\000e}{section.8.4}% 101
\BOOKMARK [3][-]{subsubsection.8.4.2.1}{\376\377\000A\000u\000f\000g\000a\000b\000e\000n}{subsection.8.4.2}% 102
\BOOKMARK [2][-]{subsection.8.4.3}{\376\377\0004\000.\0003\000\040\000A\000u\000f\000g\000a\000b\000e\000:\000\040\000E\000r\000w\000e\000i\000t\000e\000r\000t\000e\000\040\000R\000e\000i\000h\000e\000n\000f\000o\000l\000g\000e}{section.8.4}% 103
\BOOKMARK [3][-]{subsubsection.8.4.3.1}{\376\377\000A\000u\000f\000g\000a\000b\000e}{subsection.8.4.3}% 104
\BOOKMARK [2][-]{subsection.8.4.4}{\376\377\0004\000.\0004\000\040\000Z\000u\000s\000a\000m\000m\000e\000n\000f\000a\000s\000s\000u\000n\000g}{section.8.4}% 105
\BOOKMARK [1][-]{section.8.5}{\376\377\0005\000.\000\040\000I\000n\000t\000e\000r\000n\000a\000t\000i\000o\000n\000a\000l\000\040\000B\000a\000n\000k\000i\000n\000g}{chapter.8}% 106
\BOOKMARK [2][-]{subsection.8.5.1}{\376\377\0005\000.\0001\000\040\000I\000m\000p\000l\000e\000m\000e\000n\000t\000a\000t\000i\000o\000n}{section.8.5}% 107
\BOOKMARK [2][-]{subsection.8.5.2}{\376\377\0005\000.\0002\000\040\000A\000u\000f\000g\000a\000b\000e\000:\000\040\000K\000o\000n\000t\000o\000\040\000S\000y\000n\000c\000h\000r\000o\000n\000i\000s\000a\000t\000i\000o\000n}{section.8.5}% 108
\BOOKMARK [2][-]{subsection.8.5.3}{\376\377\0005\000.\0003\000\040\000A\000u\000f\000g\000a\000b\000e\000:\000\040\000F\000i\000l\000i\000a\000l\000e\000n\000\040\000Z\000u\000g\000r\000i\000f\000f\000\040\000i\000n\000\040\000C\000r\000i\000t\000i\000c\000a\000l\000\040\000S\000e\000c\000t\000i\000o\000n}{section.8.5}% 109
\BOOKMARK [2][-]{subsection.8.5.4}{\376\377\0005\000.\0004\000\040\000A\000u\000f\000g\000a\000b\000e\000:\000\040\000R\000e\000f\000a\000c\000t\000o\000r\000i\000n\000g\000\040\000d\000e\000r\000\040\000S\000y\000n\000c\000h\000r\000o\000n\000i\000s\000a\000t\000i\000o\000n}{section.8.5}% 110
\BOOKMARK [1][-]{section.8.6}{\376\377\0006\000.\000\040\000B\000e\000w\000e\000r\000t\000u\000n\000g}{chapter.8}% 111
\BOOKMARK [0][-]{chapter.9}{\376\377\0000\0009\000\040\000-\000\040\000F\000i\000l\000e\000\040\000O\000p\000e\000r\000a\000t\000i\000o\000n\000s}{}% 112
\BOOKMARK [1][-]{section.9.1}{\376\377\0001\000.\000\040\000\334\000b\000e\000r\000s\000i\000c\000h\000t}{chapter.9}% 113
\BOOKMARK [1][-]{section.9.2}{\376\377\0002\000.\000\040\000L\000e\000r\000n\000z\000i\000e\000l\000e}{chapter.9}% 114
\BOOKMARK [1][-]{section.9.3}{\376\377\0003\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0001\000:}{chapter.9}% 115
\BOOKMARK [1][-]{section.9.4}{\376\377\0004\000.\000\040\000B\000e\000w\000e\000r\000t\000u\000n\000g}{chapter.9}% 116
\BOOKMARK [0][-]{chapter.10}{\376\377\0001\0000\000\040\000-\000\040\000I\000P\000C}{}% 117
\BOOKMARK [1][-]{section.10.1}{\376\377\0001\000.\000\040\000\334\000b\000e\000r\000s\000i\000c\000h\000t}{chapter.10}% 118
\BOOKMARK [1][-]{section.10.2}{\376\377\0002\000.\000\040\000L\000e\000r\000n\000z\000i\000e\000l\000e}{chapter.10}% 119
\BOOKMARK [1][-]{section.10.3}{\376\377\0003\000.\000\040\000A\000u\000f\000g\000a\000b\000e\000\040\0001\000:}{chapter.10}% 120
\BOOKMARK [1][-]{section.10.4}{\376\377\0004\000.\000\040\000B\000e\000w\000e\000r\000t\000u\000n\000g}{chapter.10}% 121

BIN
main.pdf Normal file

Binary file not shown.

4084
main.tex Normal file

File diff suppressed because it is too large Load Diff

122
main.toc Normal file
View File

@ -0,0 +1,122 @@
\babel@toc {english}{}\relax
\contentsline {chapter}{Table of contents}{i}{chapter*.1}%
\contentsline {chapter}{\numberline {1}01 \sphinxhyphen {} Erste Schritte mit C}{1}{chapter.1}%
\contentsline {section}{\numberline {1.1}1. Übersicht}{1}{section.1.1}%
\contentsline {section}{\numberline {1.2}2. Lernziele}{1}{section.1.2}%
\contentsline {section}{\numberline {1.3}3. Aufgabe 1: virtuelle Maschine}{1}{section.1.3}%
\contentsline {section}{\numberline {1.4}4. Aufgabe 2: Hello World}{2}{section.1.4}%
\contentsline {section}{\numberline {1.5}5. Aufgabe 3: Tabellenausgabe}{2}{section.1.5}%
\contentsline {section}{\numberline {1.6}6. Aufgabe 4: Zeichen und Wörter zählen}{3}{section.1.6}%
\contentsline {section}{\numberline {1.7}7. Bewertung}{3}{section.1.7}%
\contentsline {chapter}{\numberline {2}02: Funktionen, Datentyp “enum”}{4}{chapter.2}%
\contentsline {section}{\numberline {2.1}1. Übersicht}{4}{section.2.1}%
\contentsline {section}{\numberline {2.2}2. Lernziele}{5}{section.2.2}%
\contentsline {section}{\numberline {2.3}3. Aufgaben}{5}{section.2.3}%
\contentsline {subsection}{\numberline {2.3.1}3.1 Aufgabe 1 Tage pro Monat}{6}{subsection.2.3.1}%
\contentsline {subsection}{\numberline {2.3.2}3.2 Aufgabe 2 Bestimmen des Wochentags}{7}{subsection.2.3.2}%
\contentsline {subsubsection}{\numberline {2.3.2.1}3.2.1 Teilaufgabe Argumente Parsen und auf Korrektheit prüfen}{7}{subsubsection.2.3.2.1}%
\contentsline {paragraph}{3.2.1.1 Argument Format}{7}{paragraph*.3}%
\contentsline {paragraph}{3.2.1.2 Korrektes Datum}{7}{paragraph*.4}%
\contentsline {paragraph}{3.2.1.3 Vorgaben an die Umsetzung}{7}{paragraph*.5}%
\contentsline {paragraph}{3.2.1.4 Hinweise}{8}{paragraph*.6}%
\contentsline {subsubsection}{\numberline {2.3.2.2}3.2.2 Teilaufgabe Wochentag Berechnung}{8}{subsubsection.2.3.2.2}%
\contentsline {section}{\numberline {2.4}4. Bewertung}{8}{section.2.4}%
\contentsline {section}{\numberline {2.5}5. Anhang}{9}{section.2.5}%
\contentsline {subsection}{\numberline {2.5.1}5.1 Sprach Element}{9}{subsection.2.5.1}%
\contentsline {subsection}{\numberline {2.5.2}5.2 Beschreibung}{9}{subsection.2.5.2}%
\contentsline {chapter}{\numberline {3}03 \sphinxhyphen {} Bit Operationen, Struct, Typedef}{10}{chapter.3}%
\contentsline {section}{\numberline {3.1}1. Bit Operationen}{10}{section.3.1}%
\contentsline {subsection}{\numberline {3.1.1}1.1 Übungen}{11}{subsection.3.1.1}%
\contentsline {subsubsection}{\numberline {3.1.1.1}1. Basis Operationen}{11}{subsubsection.3.1.1.1}%
\contentsline {subsubsection}{\numberline {3.1.1.2}2. Variablen tauschen (ohne Dritt\sphinxhyphen {}Variable)}{11}{subsubsection.3.1.1.2}%
\contentsline {subsubsection}{\numberline {3.1.1.3}3. Lower\sphinxhyphen {} / Uppercase}{12}{subsubsection.3.1.1.3}%
\contentsline {subsubsection}{\numberline {3.1.1.4}4. Prüfen auf 2\sphinxhyphen {}er Potenz}{12}{subsubsection.3.1.1.4}%
\contentsline {section}{\numberline {3.2}2. Struct \& typedef}{13}{section.3.2}%
\contentsline {subsection}{\numberline {3.2.1}2.1 Übungen}{13}{subsection.3.2.1}%
\contentsline {subsubsection}{\numberline {3.2.1.1}1. Bit Operationen Rechner}{13}{subsubsection.3.2.1.1}%
\contentsline {chapter}{\numberline {4}04 \sphinxhyphen {} Modularisieren von C Code}{14}{chapter.4}%
\contentsline {section}{\numberline {4.1}1. Übersicht}{14}{section.4.1}%
\contentsline {section}{\numberline {4.2}2. Lernziele}{14}{section.4.2}%
\contentsline {section}{\numberline {4.3}3. Aufgabe 1: Modularisieren}{15}{section.4.3}%
\contentsline {subsection}{\numberline {4.3.1}3.1 Teilaufgabe Modules einbinden, Header Files schreiben}{15}{subsection.4.3.1}%
\contentsline {section}{\numberline {4.4}4. Aufgabe 2: Makefile Regeln}{16}{section.4.4}%
\contentsline {subsection}{\numberline {4.4.1}4.1 Neue Regeln hinzufügen}{16}{subsection.4.4.1}%
\contentsline {section}{\numberline {4.5}5. Aufgabe 3}{16}{section.4.5}%
\contentsline {section}{\numberline {4.6}6. Bewertung}{16}{section.4.6}%
\contentsline {section}{\numberline {4.7}7. Erweiterung Doxyfile für Abhängigkeitsanalyse}{16}{section.4.7}%
\contentsline {chapter}{\numberline {5}05 \sphinxhyphen {} Arrays/Strings/TicTacToe}{18}{chapter.5}%
\contentsline {section}{\numberline {5.1}1. Übersicht}{18}{section.5.1}%
\contentsline {section}{\numberline {5.2}2. Lernziele}{18}{section.5.2}%
\contentsline {section}{\numberline {5.3}3. Aufgabe 1: Sortieren von Strings}{18}{section.5.3}%
\contentsline {section}{\numberline {5.4}4. Aufgabe 2: TicTacToe}{19}{section.5.4}%
\contentsline {subsection}{\numberline {5.4.1}4.1 Teilaufgabe test\_model\_init}{20}{subsection.5.4.1}%
\contentsline {subsection}{\numberline {5.4.2}4.2 Teilaufgabe test\_model\_get\_state und test\_model\_get\_winner}{21}{subsection.5.4.2}%
\contentsline {subsection}{\numberline {5.4.3}4.3 Teilaufgabe test\_model\_can\_move}{22}{subsection.5.4.3}%
\contentsline {subsection}{\numberline {5.4.4}4.4 Teilaufgabe test\_model\_move und test\_model\_get\_win\_line}{22}{subsection.5.4.4}%
\contentsline {section}{\numberline {5.5}5. Bewertung}{23}{section.5.5}%
\contentsline {chapter}{\numberline {6}06 \sphinxhyphen {} Personen Verwaltung \textendash {} Linked List}{24}{chapter.6}%
\contentsline {section}{\numberline {6.1}1. Übersicht}{24}{section.6.1}%
\contentsline {section}{\numberline {6.2}2. Lernziele}{25}{section.6.2}%
\contentsline {section}{\numberline {6.3}3. Personenverwaltung}{25}{section.6.3}%
\contentsline {subsection}{\numberline {6.3.1}3.1 Programmfunktion}{25}{subsection.6.3.1}%
\contentsline {subsection}{\numberline {6.3.2}3.2 Designvorgaben}{25}{subsection.6.3.2}%
\contentsline {subsection}{\numberline {6.3.3}3.3 Bestehender Programmrahmen}{28}{subsection.6.3.3}%
\contentsline {section}{\numberline {6.4}4. Aufgabe 1: Modularisierung \textendash {} API und Implementation main.c}{28}{section.6.4}%
\contentsline {section}{\numberline {6.5}5. Aufgabe 2: Implementierung von person.c und list.c}{29}{section.6.5}%
\contentsline {subsection}{\numberline {6.5.1}5.1 Teilaufgabe: Implementierung von person.c}{29}{subsection.6.5.1}%
\contentsline {subsection}{\numberline {6.5.2}5.2 Teilaufgabe: Implementierung von list.c}{29}{subsection.6.5.2}%
\contentsline {section}{\numberline {6.6}6. Aufgabe 3: Unit Tests}{29}{section.6.6}%
\contentsline {section}{\numberline {6.7}7. Bewertung}{29}{section.6.7}%
\contentsline {chapter}{\numberline {7}07 \sphinxhyphen {} Prozesse und Threads}{31}{chapter.7}%
\contentsline {section}{\numberline {7.1}1. Übersicht}{32}{section.7.1}%
\contentsline {subsection}{\numberline {7.1.1}1.1 Nachweis}{32}{subsection.7.1.1}%
\contentsline {section}{\numberline {7.2}2. Lernziele}{32}{section.7.2}%
\contentsline {section}{\numberline {7.3}3. Aufgaben}{32}{section.7.3}%
\contentsline {subsection}{\numberline {7.3.1}3.1 Aufgabe 1: Prozess mit fork() erzeugen}{33}{subsection.7.3.1}%
\contentsline {subsection}{\numberline {7.3.2}3.2 Aufgabe 2: Prozess mit fork() und exec(): Programm Image ersetzen}{33}{subsection.7.3.2}%
\contentsline {subsection}{\numberline {7.3.3}3.3 Aufgabe 3: Prozesshierarchie analysieren}{33}{subsection.7.3.3}%
\contentsline {subsection}{\numberline {7.3.4}3.4 Aufgabe 4: Zeitlicher Ablauf von Prozessen}{34}{subsection.7.3.4}%
\contentsline {subsection}{\numberline {7.3.5}3.5 Aufgabe 5: Waisenkinder (Orphan Processes)}{34}{subsection.7.3.5}%
\contentsline {subsection}{\numberline {7.3.6}3.6 Aufgabe 6: Terminierte, halbtote Prozesse (Zombies)}{34}{subsection.7.3.6}%
\contentsline {subsection}{\numberline {7.3.7}3.7 Aufgabe 7: Auf Terminieren von Kindprozessen warten}{35}{subsection.7.3.7}%
\contentsline {subsection}{\numberline {7.3.8}3.8 Aufgabe 8: Kindprozess als Kopie des Elternprozesses}{36}{subsection.7.3.8}%
\contentsline {subsection}{\numberline {7.3.9}3.9 Aufgabe 9: Unterschied von Threads gegenüber Prozessen}{36}{subsection.7.3.9}%
\contentsline {subsection}{\numberline {7.3.10}3.10 Aufgabe 10 (optional):}{37}{subsection.7.3.10}%
\contentsline {subsubsection}{\numberline {7.3.10.1}3.10.1 Übersicht}{37}{subsubsection.7.3.10.1}%
\contentsline {paragraph}{3.10.1.1 Nachweis}{37}{paragraph*.7}%
\contentsline {subsubsection}{\numberline {7.3.10.2}3.10.2 Lernziele}{37}{subsubsection.7.3.10.2}%
\contentsline {subsubsection}{\numberline {7.3.10.3}3.10.3 Aufgabe: Dämon Prozesse}{37}{subsubsection.7.3.10.3}%
\contentsline {subsubsection}{\numberline {7.3.10.4}3.10.4 Zusatzinformationen}{38}{subsubsection.7.3.10.4}%
\contentsline {paragraph}{3.10.4.1 Diese Implementation}{38}{paragraph*.8}%
\contentsline {paragraph}{3.10.4.2 Zusatzinformation zu Dämon Prozessen}{39}{paragraph*.9}%
\contentsline {section}{\numberline {7.4}4. Bewertung}{39}{section.7.4}%
\contentsline {chapter}{\numberline {8}08 \sphinxhyphen {} Synchronisationsprobleme}{41}{chapter.8}%
\contentsline {section}{\numberline {8.1}1. Übersicht}{41}{section.8.1}%
\contentsline {subsection}{\numberline {8.1.1}1.1 Nachweis}{42}{subsection.8.1.1}%
\contentsline {section}{\numberline {8.2}2. Lernziele}{42}{section.8.2}%
\contentsline {section}{\numberline {8.3}3. Einführung}{42}{section.8.3}%
\contentsline {subsection}{\numberline {8.3.1}3.1 Wie löst man Synchronisationsprobleme?}{42}{subsection.8.3.1}%
\contentsline {section}{\numberline {8.4}4. Der Kaffee\sphinxhyphen {}Automat}{43}{section.8.4}%
\contentsline {subsection}{\numberline {8.4.1}4.1 Aufgabe: Mutual Exclusion}{44}{subsection.8.4.1}%
\contentsline {subsubsection}{\numberline {8.4.1.1}Aufgaben}{44}{subsubsection.8.4.1.1}%
\contentsline {subsection}{\numberline {8.4.2}4.2 Aufgabe: Einfache Reihenfolge}{44}{subsection.8.4.2}%
\contentsline {subsubsection}{\numberline {8.4.2.1}Aufgaben}{45}{subsubsection.8.4.2.1}%
\contentsline {subsection}{\numberline {8.4.3}4.3 Aufgabe: Erweiterte Reihenfolge}{45}{subsection.8.4.3}%
\contentsline {subsubsection}{\numberline {8.4.3.1}Aufgabe}{45}{subsubsection.8.4.3.1}%
\contentsline {subsection}{\numberline {8.4.4}4.4 Zusammenfassung}{45}{subsection.8.4.4}%
\contentsline {section}{\numberline {8.5}5. International Banking}{46}{section.8.5}%
\contentsline {subsection}{\numberline {8.5.1}5.1 Implementation}{46}{subsection.8.5.1}%
\contentsline {subsection}{\numberline {8.5.2}5.2 Aufgabe: Konto Synchronisation}{46}{subsection.8.5.2}%
\contentsline {subsection}{\numberline {8.5.3}5.3 Aufgabe: Filialen Zugriff in Critical Section}{46}{subsection.8.5.3}%
\contentsline {subsection}{\numberline {8.5.4}5.4 Aufgabe: Refactoring der Synchronisation}{46}{subsection.8.5.4}%
\contentsline {section}{\numberline {8.6}6. Bewertung}{47}{section.8.6}%
\contentsline {chapter}{\numberline {9}09 \sphinxhyphen {} File Operations}{48}{chapter.9}%
\contentsline {section}{\numberline {9.1}1. Übersicht}{48}{section.9.1}%
\contentsline {section}{\numberline {9.2}2. Lernziele}{48}{section.9.2}%
\contentsline {section}{\numberline {9.3}3. Aufgabe 1:}{48}{section.9.3}%
\contentsline {section}{\numberline {9.4}4. Bewertung}{48}{section.9.4}%
\contentsline {chapter}{\numberline {10}10 \sphinxhyphen {} IPC}{49}{chapter.10}%
\contentsline {section}{\numberline {10.1}1. Übersicht}{49}{section.10.1}%
\contentsline {section}{\numberline {10.2}2. Lernziele}{49}{section.10.2}%
\contentsline {section}{\numberline {10.3}3. Aufgabe 1:}{49}{section.10.3}%
\contentsline {section}{\numberline {10.4}4. Bewertung}{49}{section.10.4}%

31
make.bat Normal file
View File

@ -0,0 +1,31 @@
@ECHO OFF
REM Command file for Sphinx documentation
pushd %~dp0
set PDFLATEX=latexmk -pdf -dvi- -ps-
set "LATEXOPTS= "
if "%1" == "" goto all-pdf
if "%1" == "all-pdf" (
:all-pdf
for %%i in (*.tex) do (
%PDFLATEX% %LATEXMKOPTS% %%i
)
goto end
)
if "%1" == "all-pdf-ja" (
goto all-pdf
)
if "%1" == "clean" (
del /q /s *.dvi *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ps *.tar *.tar.gz *.tar.bz2 *.tar.xz *.fls *.fdb_latexmk
goto end
)
:end
popd

16
python.ist Normal file
View File

@ -0,0 +1,16 @@
line_max 100
headings_flag 1
heading_prefix " \\bigletter "
preamble "\\begin{sphinxtheindex}
\\let\\bigletter\\sphinxstyleindexlettergroup
\\let\\spxpagem \\sphinxstyleindexpagemain
\\let\\spxentry \\sphinxstyleindexentry
\\let\\spxextra \\sphinxstyleindexextra
"
postamble "\n\n\\end{sphinxtheindex}\n"
symhead_positive "{\\sphinxsymbolsname}"
numhead_positive "{\\sphinxnumbersname}"

BIN
random_number.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
sequence_graph.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

351
sphinx.sty Normal file
View File

@ -0,0 +1,351 @@
%
% sphinx.sty
%
% Adapted from the old python.sty, mostly written by Fred Drake,
% by Georg Brandl.
%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{sphinx}[2021/01/27 v4.0.0 LaTeX package (Sphinx markup)]
% provides \ltx@ifundefined
% (many packages load ltxcmds: graphicx does for pdftex and lualatex but
% not xelatex, and anyhow kvoptions does, but it may be needed in future to
% use \sphinxdeprecationwarning earlier, and it needs \ltx@ifundefined)
\RequirePackage{ltxcmds}
%% for deprecation warnings
\newcommand\sphinxdeprecationwarning[4]{% #1 the deprecated macro or name,
% #2 = when deprecated, #3 = when removed, #4 = additional info
\edef\spx@tempa{\detokenize{#1}}%
\ltx@ifundefined{sphinx_depr_\spx@tempa}{%
\global\expandafter\let\csname sphinx_depr_\spx@tempa\endcsname\spx@tempa
\expandafter\AtEndDocument\expandafter{\expandafter\let\expandafter
\sphinxdeprecatedmacro\csname sphinx_depr_\spx@tempa\endcsname
\PackageWarningNoLine{sphinx}{^^J**** SPHINX DEPRECATION WARNING:^^J
\sphinxdeprecatedmacro^^J
\@spaces- is deprecated at Sphinx #2^^J
\@spaces- and removed at Sphinx #3.^^J
#4^^J****}}%
}{% warning already emitted (at end of latex log), don't repeat
}}
%% OPTION HANDLING
%
% We first handle options then load packages, but we need \definecolor from
% xcolor/color.
% FIXME: we should \RequirePackage{xcolor} always now
% The xcolor package draws better fcolorboxes around verbatim code
\IfFileExists{xcolor.sty}{
\RequirePackage{xcolor}
}{
\RequirePackage{color}
}
% Handle options via "kvoptions" (later loaded by hyperref anyhow)
\RequirePackage{kvoptions}
\SetupKeyvalOptions{prefix=spx@opt@} % use \spx@opt@ prefix
% Sphinx legacy text layout: 1in margins on all four sides
\ifx\@jsc@uplatextrue\@undefined
\DeclareStringOption[1in]{hmargin}
\DeclareStringOption[1in]{vmargin}
\DeclareStringOption[.5in]{marginpar}
\else
% Japanese standard document classes handle \mag in a special way
\DeclareStringOption[\inv@mag in]{hmargin}
\DeclareStringOption[\inv@mag in]{vmargin}
\DeclareStringOption[.5\dimexpr\inv@mag in\relax]{marginpar}
\fi
\DeclareStringOption[0]{maxlistdepth}% \newcommand*\spx@opt@maxlistdepth{0}
\DeclareStringOption[-1]{numfigreset}
\DeclareBoolOption[false]{nonumfigreset}
\DeclareBoolOption[false]{mathnumfig}
\define@key{sphinx}{bookmarksdepth}{\AtBeginDocument{\hypersetup{bookmarksdepth=#1}}}
\AtBeginDocument{\define@key{sphinx}{bookmarksdepth}{\hypersetup{bookmarksdepth=#1}}}
% \DeclareBoolOption[false]{usespart}% not used
% dimensions, we declare the \dimen registers here.
\newdimen\sphinxverbatimsep
\newdimen\sphinxverbatimborder
\newdimen\sphinxshadowsep
\newdimen\sphinxshadowsize
\newdimen\sphinxshadowrule
% \DeclareStringOption is not convenient for the handling of these dimensions
% because we want to assign the values to the corresponding registers. Even if
% we added the code to the key handler it would be too late for the initial
% set-up and we would need to do initial assignments explicitly. We end up
% using \define@key directly.
% verbatim
\sphinxverbatimsep=\fboxsep
\define@key{sphinx}{verbatimsep}{\sphinxverbatimsep\dimexpr #1\relax}
\sphinxverbatimborder=\fboxrule
\define@key{sphinx}{verbatimborder}{\sphinxverbatimborder\dimexpr #1\relax}
% topic boxes
\sphinxshadowsep =5pt
\define@key{sphinx}{shadowsep}{\sphinxshadowsep\dimexpr #1\relax}
\sphinxshadowsize=4pt
\define@key{sphinx}{shadowsize}{\sphinxshadowsize\dimexpr #1\relax}
\sphinxshadowrule=\fboxrule
\define@key{sphinx}{shadowrule}{\sphinxshadowrule\dimexpr #1\relax}
% verbatim
\DeclareBoolOption[true]{verbatimwithframe}
\DeclareBoolOption[true]{verbatimwrapslines}
\DeclareBoolOption[false]{verbatimforcewraps}
\DeclareStringOption[3]{verbatimmaxoverfull}
\DeclareStringOption[100]{verbatimmaxunderfull}
\DeclareBoolOption[true]{verbatimhintsturnover}
\DeclareBoolOption[true]{inlineliteralwraps}
\DeclareStringOption[t]{literalblockcappos}
\DeclareStringOption[r]{verbatimcontinuedalign}
\DeclareStringOption[r]{verbatimcontinuesalign}
% parsed literal
\DeclareBoolOption[true]{parsedliteralwraps}
% \textvisiblespace for compatibility with fontspec+XeTeX/LuaTeX
\DeclareStringOption[\textcolor{red}{\textvisiblespace}]{verbatimvisiblespace}
\DeclareStringOption % must use braces to hide the brackets
[{\makebox[2\fontcharwd\font`\x][r]{\textcolor{red}{\tiny$\m@th\hookrightarrow$}}}]%
{verbatimcontinued}
% notices/admonitions
% the dimensions for notices/admonitions are kept as macros and assigned to
% \spx@notice@border at time of use, hence \DeclareStringOption is ok for this
\newdimen\spx@notice@border
\DeclareStringOption[0.5pt]{noteborder}
\DeclareStringOption[0.5pt]{hintborder}
\DeclareStringOption[0.5pt]{importantborder}
\DeclareStringOption[0.5pt]{tipborder}
\DeclareStringOption[1pt]{warningborder}
\DeclareStringOption[1pt]{cautionborder}
\DeclareStringOption[1pt]{attentionborder}
\DeclareStringOption[1pt]{dangerborder}
\DeclareStringOption[1pt]{errorborder}
% footnotes
\DeclareStringOption[\mbox{ }]{AtStartFootnote}
% we need a public macro name for direct use in latex file
\newcommand*{\sphinxAtStartFootnote}{\spx@opt@AtStartFootnote}
% no such need for this one, as it is used inside other macros
\DeclareStringOption[\leavevmode\unskip]{BeforeFootnote}
% some font styling.
\DeclareStringOption[\sffamily\bfseries]{HeaderFamily}
% colours
% same problems as for dimensions: we want the key handler to use \definecolor.
% first, some colours with no prefix, for backwards compatibility
\newcommand*{\sphinxDeclareColorOption}[2]{%
\definecolor{#1}#2%
\define@key{sphinx}{#1}{\definecolor{#1}##1}%
}%
\sphinxDeclareColorOption{TitleColor}{{rgb}{0.126,0.263,0.361}}
\sphinxDeclareColorOption{InnerLinkColor}{{rgb}{0.208,0.374,0.486}}
\sphinxDeclareColorOption{OuterLinkColor}{{rgb}{0.216,0.439,0.388}}
\sphinxDeclareColorOption{VerbatimColor}{{rgb}{1,1,1}}
\sphinxDeclareColorOption{VerbatimBorderColor}{{rgb}{0,0,0}}
% now the colours defined with "sphinx" prefix in their names
\newcommand*{\sphinxDeclareSphinxColorOption}[2]{%
% set the initial default
\definecolor{sphinx#1}#2%
% set the key handler. The "value" ##1 must be acceptable by \definecolor.
\define@key{sphinx}{#1}{\definecolor{sphinx#1}##1}%
}%
% Default color chosen to be as in minted.sty LaTeX package!
\sphinxDeclareSphinxColorOption{VerbatimHighlightColor}{{rgb}{0.878,1,1}}
% admonition boxes, "light" style
\sphinxDeclareSphinxColorOption{noteBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{hintBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{importantBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{tipBorderColor}{{rgb}{0,0,0}}
% admonition boxes, "heavy" style
\sphinxDeclareSphinxColorOption{warningBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{cautionBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{attentionBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{dangerBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{errorBorderColor}{{rgb}{0,0,0}}
\sphinxDeclareSphinxColorOption{warningBgColor}{{rgb}{1,1,1}}
\sphinxDeclareSphinxColorOption{cautionBgColor}{{rgb}{1,1,1}}
\sphinxDeclareSphinxColorOption{attentionBgColor}{{rgb}{1,1,1}}
\sphinxDeclareSphinxColorOption{dangerBgColor}{{rgb}{1,1,1}}
\sphinxDeclareSphinxColorOption{errorBgColor}{{rgb}{1,1,1}}
\DeclareDefaultOption{\@unknownoptionerror}
\ProcessKeyvalOptions*
% don't allow use of maxlistdepth via \sphinxsetup.
\DisableKeyvalOption{sphinx}{maxlistdepth}
\DisableKeyvalOption{sphinx}{numfigreset}
\DisableKeyvalOption{sphinx}{nonumfigreset}
\DisableKeyvalOption{sphinx}{mathnumfig}
% FIXME: this is unrelated to an option, move this elsewhere
% To allow hyphenation of first word in narrow contexts; no option,
% customization to be done via 'preamble' key
\newcommand*\sphinxAtStartPar{\leavevmode\nobreak\hskip\z@skip}
% No need for the \hspace{0pt} trick (\hskip\z@skip) with luatex
\ifdefined\directlua\let\sphinxAtStartPar\@empty\fi
% user interface: options can be changed midway in a document!
\newcommand\sphinxsetup[1]{\setkeys{sphinx}{#1}}
%% MISCELLANEOUS CONTEXT
%
% flag to be set in a framed environment
% (defined here as currently needed by three sphinxlatex....sty files and
% even if not needed if such files are replaced, the definition does no harm)
\newif\ifspx@inframed
%
% \spx@ifcaptionpackage (defined at begin document)
% is needed currently in macros from:
% sphinxlatexliterals.sty (sphinxVerbatim)
% sphinxlatextables.sty (for some macros used in the table templates)
%
% \sphinxcaption is mark-up injected by the tabular and tabulary templates
% it is defined in sphinxlatextables.sty
%
% store the original \caption macro for usage with figures inside longtable
% and tabulary cells. Make sure we get the final \caption in presence of
% caption package, whether the latter was loaded before or after sphinx.
\AtBeginDocument{%
\let\spx@originalcaption\caption
\@ifpackageloaded{caption}
{\let\spx@ifcaptionpackage\@firstoftwo
\caption@AtBeginDocument*{\let\spx@originalcaption\caption}%
% in presence of caption package, drop our own \sphinxcaption whose aim was to
% ensure same width of caption to all kinds of tables (tabular(y), longtable),
% because caption package has its own width (or margin) option
\def\sphinxcaption{\caption}%
}%
{\let\spx@ifcaptionpackage\@secondoftwo}%
}
%% PASS OPTIONS
%
% pass options to hyperref; it must not have been loaded already
\input{sphinxoptionshyperref.sty}
% pass options to geometry; it must not have been loaded already
\input{sphinxoptionsgeometry.sty}
%% COLOR (general)
%
% FIXME: these two should be deprecated
%
% FIXME: \normalcolor should be used and \py@NormalColor never defined
\def\py@NormalColor{\color{black}}
% FIXME: \color{TitleColor} should be used directly and \py@TitleColor
% should never get defined.
\def\py@TitleColor{\color{TitleColor}}
%% PACKAGES
%
% as will be indicated below, secondary style files load some more packages
%
% For \text macro (sphinx.util.texescape)
% also for usage of \firstchoice@true(false) in sphinxlatexgraphics.sty
\RequirePackage{amstext}
% It was passed "warn" option from latex template in case it is already loaded
% via some other package before \usepackage{sphinx} in preamble
\RequirePackage{textcomp}
% For the H specifier. Do not \restylefloat{figure}, it breaks Sphinx code
% for allowing figures in tables.
\RequirePackage{float}
% For floating figures in the text. Better to load after float.
\RequirePackage{wrapfig}
% Provides \captionof, used once by latex writer (\captionof{figure})
\RequirePackage{capt-of}
% Support hlist directive
\RequirePackage{multicol}
%% GRAPHICS
%
% It will always be needed, so let's load it here
\RequirePackage{graphicx}
\input{sphinxlatexgraphics.sty}
%% FRAMED ENVIRONMENTS
%
\input{sphinxlatexadmonitions.sty}
\input{sphinxlatexliterals.sty}
\input{sphinxlatexshadowbox.sty}
%% CONTAINERS
%
\input{sphinxlatexcontainers.sty}
%% PYGMENTS
% stylesheet for highlighting with pygments
\RequirePackage{sphinxhighlight}
%% TABLES
%
\input{sphinxlatextables.sty}
%% NUMBERING OF FIGURES, TABLES, AND LITERAL BLOCKS
%
\input{sphinxlatexnumfig.sty}
%% LISTS
%
\input{sphinxlatexlists.sty}
%% FOOTNOTES
%
% Support scopes for footnote numbering
\newcounter{sphinxscope}
\newcommand{\sphinxstepscope}{\stepcounter{sphinxscope}}
% Explicitly numbered footnotes may be referred to, and for this to be
% clickable we need to have only one target. So we will step this at each
% explicit footnote and let \thesphinxscope take it into account
\newcounter{sphinxexplicit}
\newcommand{\sphinxstepexplicit}{\stepcounter{sphinxexplicit}}
% Some babel/polyglossia languages fiddle with \@arabic, so let's be extra
% cautious and redefine \thesphinxscope with \number not \@arabic.
% Memo: we expect some subtle redefinition of \thesphinxscope to be a part of page
% scoping for footnotes, when we shall implement it.
\renewcommand{\thesphinxscope}{\number\value{sphinxscope}.\number\value{sphinxexplicit}}
\newcommand\sphinxthefootnotemark[2]{%
% this is used to make reference to an explicitly numbered footnote not on same page
% #1=label of footnote text, #2=page number where footnote text was printed
\ifdefined\pagename
\pagename\space#2, % <- space
\else
p. #2, % <- space
\fi #1% no space
}
% support large numbered footnotes in minipage; but this is now obsolete
% from systematic use of savenotes environment around minipages
\def\thempfootnote{\arabic{mpfootnote}}
% This package is needed to support hyperlinked footnotes in tables and
% framed contents, and to allow code-blocks in footnotes.
\RequirePackage{sphinxpackagefootnote}
%% INDEX, BIBLIOGRAPHY, APPENDIX, TABLE OF CONTENTS
%
\input{sphinxlatexindbibtoc.sty}
%% STYLING
%
\input{sphinxlatexstylepage.sty}
\input{sphinxlatexstyleheadings.sty}
\input{sphinxlatexstyletext.sty}
%% MODULE RELEASE DATA AND OBJECT DESCRIPTIONS
%
\input{sphinxlatexobjects.sty}
% FIXME: this line should be dropped, as "9" is default anyhow.
\ifdefined\pdfcompresslevel\pdfcompresslevel = 9 \fi
\endinput

230
sphinx.xdy Normal file
View File

@ -0,0 +1,230 @@
;;; -*- mode: lisp; coding: utf-8; -*-
;; Unfortunately xindy is out-of-the-box hyperref-incompatible. This
;; configuration is a workaround, which requires to pass option
;; hyperindex=false to hyperref.
;; textit and emph not currently used, spxpagem replaces former textbf
(define-attributes (("textbf" "textit" "emph" "spxpagem" "default")))
(markup-locref :open "\textbf{\hyperpage{" :close "}}" :attr "textbf")
(markup-locref :open "\textit{\hyperpage{" :close "}}" :attr "textit")
(markup-locref :open "\emph{\hyperpage{" :close "}}" :attr "emph")
(markup-locref :open "\spxpagem{\hyperpage{" :close "}}" :attr "spxpagem")
(markup-locref :open "\hyperpage{" :close "}" :attr "default")
(require "numeric-sort.xdy")
;; xindy base module latex.xdy loads tex.xdy and the latter instructs
;; xindy to ignore **all** TeX macros in .idx entries, except those
;; explicitly described in merge rule. But when after applying all
;; merge rules an empty string results, xindy raises an error:
;; ERROR: CHAR: index 0 should be less than the length of the string
;; For example when using pdflatex with utf-8 characters the index
;; file will contain \IeC macros and they will get ignored except if
;; suitable merge rules are loaded early. The texindy script coming
;; with xindy provides this, but only for Latin scripts. The texindy
;; man page says to use rather xelatex or lualatex in case of Cyrillic
;; scripts.
;; Sphinx contributes LICRcyr2utf8.xdy to provide support for Cyrillic
;; scripts for the pdflatex engine.
;; Another issue caused by xindy ignoring all TeX macros except those
;; explicitly declared reveals itself when attempting to index ">>>",
;; as the ">" is converted to "\textgreater{}" by Sphinx's LaTeX
;; escaping.
;; To fix this, Sphinx does **not** use texindy, and does not even
;; load the xindy latex.xdy base module.
;(require "latex.xdy")
;; Rather it incorporates some suitable extracts from latex.xdy and
;; tex.xdy with additional Sphinx contributed rules.
;; But, this means for pdflatex and Latin scripts that the xindy file
;; tex/inputenc/uf8.xdy is not usable because it refers to the macro
;; \IeC only sporadically, and as tex.xdy is not loaded, a rule such as
;; (merge-rule "\'e" "é" :string)
;; does not work, it must be
;; (merge-rule "\IeC {\'e}" "é" :string)
;; So Sphinx contributes LICRlatin2utf8.xdy to mitigate that problem.
;;;;;;;; extracts from tex.xdy (discarding most original comments):
;;;
;;; TeX conventions
;;;
;; Discard leading and trailing white space. Collapse multiple white
;; space characters to blank.
(merge-rule "^ +" "" :eregexp)
(merge-rule " +$" "" :eregexp)
(merge-rule " +" " " :eregexp)
;; Handle TeX markup
(merge-rule "\\([{}$%&#])" "\1" :eregexp)
;;;;;;;; end of extracts from xindy's tex.xdy
;;;;;;;; extracts from latex.xdy:
;; Standard location classes: arabic and roman numbers, and alphabets.
(define-location-class "arabic-page-numbers" ("arabic-numbers"))
(define-location-class "roman-page-numbers" ("roman-numbers-lowercase"))
(define-location-class "Roman-page-numbers" ("roman-numbers-uppercase"))
(define-location-class "alpha-page-numbers" ("alpha"))
(define-location-class "Alpha-page-numbers" ("ALPHA"))
;; Output Markup
(markup-letter-group-list :sep "~n~n \indexspace~n")
(markup-indexentry :open "~n \item " :depth 0)
(markup-indexentry :open "~n \subitem " :depth 1)
(markup-indexentry :open "~n \subsubitem " :depth 2)
(markup-locclass-list :open ", " :sep ", ")
(markup-locref-list :sep ", ")
;;;;;;;; end of extracts from latex.xdy
;; The LaTeX \index command turns \ into normal character so the TeX macros
;; written to .idx files are not followed by a blank. This is different
;; from non-ascii letters which end up (with pdflatex) as \IeC macros in .idx
;; file, with a blank space after \IeC
;; Details of the syntax are explained at
;; http://xindy.sourceforge.net/doc/manual-3.html
;; In absence of :string, "xindy uses an auto-detection mechanism to decide,
;; if the pattern is a regular expression or not". But it is not obvious to
;; guess, for example "\\_" is not detected as RE but "\\P\{\}" is, so for
;; being sure we apply the :string switch everywhere and do not use \\ etc...
;; Go back from sphinx.util.texescape TeX macros to UTF-8
(merge-rule "\sphinxleftcurlybrace{}" "{" :string)
(merge-rule "\sphinxrightcurlybrace{}" "}" :string)
(merge-rule "\_" "_" :string)
(merge-rule "{[}" "[" :string)
(merge-rule "{]}" "]" :string)
(merge-rule "\textbackslash{}" "\" :string) ; " for Emacs syntax highlighting
(merge-rule "\textasciitilde{}" "~~" :string); the ~~ escape is needed here
(merge-rule "\textasciicircum{}" "^" :string)
(merge-rule "\sphinxhyphen{}" "-" :string)
(merge-rule "\textquotesingle{}" "'" :string)
(merge-rule "\textasciigrave{}" "`" :string)
(merge-rule "\textless{}" "<" :string)
(merge-rule "\textgreater{}" ">" :string)
(merge-rule "\P{}" "¶" :string)
(merge-rule "\S{}" "§" :string)
(merge-rule "\texteuro{}" "€" :string)
(merge-rule "\(\infty\)" "∞" :string)
(merge-rule "\(\pm\)" "±" :string)
(merge-rule "\(\rightarrow\)" "→" :string)
(merge-rule "\(\checkmark\)" "✓" :string)
(merge-rule "\textendash{}" "" :string)
(merge-rule "\textbar{}" "|" :string)
(merge-rule "\(\sp{\text{0}}\)" "⁰" :string)
(merge-rule "\(\sp{\text{1}}\)" "¹" :string)
(merge-rule "\(\sp{\text{2}}\)" "²" :string)
(merge-rule "\(\sp{\text{3}}\)" "³" :string)
(merge-rule "\(\sp{\text{4}}\)" "⁴" :string)
(merge-rule "\(\sp{\text{5}}\)" "⁵" :string)
(merge-rule "\(\sp{\text{6}}\)" "⁶" :string)
(merge-rule "\(\sp{\text{7}}\)" "⁷" :string)
(merge-rule "\(\sp{\text{8}}\)" "⁸" :string)
(merge-rule "\(\sp{\text{9}}\)" "⁹" :string)
(merge-rule "\(\sb{\text{0}}\)" "₀" :string)
(merge-rule "\(\sb{\text{1}}\)" "₁" :string)
(merge-rule "\(\sb{\text{2}}\)" "₂" :string)
(merge-rule "\(\sb{\text{3}}\)" "₃" :string)
(merge-rule "\(\sb{\text{4}}\)" "₄" :string)
(merge-rule "\(\sb{\text{5}}\)" "₅" :string)
(merge-rule "\(\sb{\text{6}}\)" "₆" :string)
(merge-rule "\(\sb{\text{7}}\)" "₇" :string)
(merge-rule "\(\sb{\text{8}}\)" "₈" :string)
(merge-rule "\(\sb{\text{9}}\)" "₉" :string)
(merge-rule "\IeC {\textalpha }" "α" :string)
(merge-rule "\IeC {\textbeta }" "β" :string)
(merge-rule "\IeC {\textgamma }" "γ" :string)
(merge-rule "\IeC {\textdelta }" "δ" :string)
(merge-rule "\IeC {\textepsilon }" "ε" :string)
(merge-rule "\IeC {\textzeta }" "ζ" :string)
(merge-rule "\IeC {\texteta }" "η" :string)
(merge-rule "\IeC {\texttheta }" "θ" :string)
(merge-rule "\IeC {\textiota }" "ι" :string)
(merge-rule "\IeC {\textkappa }" "κ" :string)
(merge-rule "\IeC {\textlambda }" "λ" :string)
(merge-rule "\IeC {\textmu }" "μ" :string)
(merge-rule "\IeC {\textnu }" "ν" :string)
(merge-rule "\IeC {\textxi }" "ξ" :string)
(merge-rule "\IeC {\textomicron }" "ο" :string)
(merge-rule "\IeC {\textpi }" "π" :string)
(merge-rule "\IeC {\textrho }" "ρ" :string)
(merge-rule "\IeC {\textsigma }" "σ" :string)
(merge-rule "\IeC {\texttau }" "τ" :string)
(merge-rule "\IeC {\textupsilon }" "υ" :string)
(merge-rule "\IeC {\textphi }" "φ" :string)
(merge-rule "\IeC {\textchi }" "χ" :string)
(merge-rule "\IeC {\textpsi }" "ψ" :string)
(merge-rule "\IeC {\textomega }" "ω" :string)
(merge-rule "\IeC {\textAlpha }" "Α" :string)
(merge-rule "\IeC {\textBeta }" "Β" :string)
(merge-rule "\IeC {\textGamma }" "Γ" :string)
(merge-rule "\IeC {\textDelta }" "Δ" :string)
(merge-rule "\IeC {\textEpsilon }" "Ε" :string)
(merge-rule "\IeC {\textZeta }" "Ζ" :string)
(merge-rule "\IeC {\textEta }" "Η" :string)
(merge-rule "\IeC {\textTheta }" "Θ" :string)
(merge-rule "\IeC {\textIota }" "Ι" :string)
(merge-rule "\IeC {\textKappa }" "Κ" :string)
(merge-rule "\IeC {\textLambda }" "Λ" :string)
(merge-rule "\IeC {\textMu }" "Μ" :string)
(merge-rule "\IeC {\textNu }" "Ν" :string)
(merge-rule "\IeC {\textTheta }" "Θ" :string)
(merge-rule "\IeC {\textIota }" "Ι" :string)
(merge-rule "\IeC {\textKappa }" "Κ" :string)
(merge-rule "\IeC {\textLambda }" "Λ" :string)
(merge-rule "\IeC {\textMu }" "Μ" :string)
(merge-rule "\IeC {\textNu }" "Ν" :string)
(merge-rule "\IeC {\textXi }" "Ξ" :string)
(merge-rule "\IeC {\textOmicron }" "Ο" :string)
(merge-rule "\IeC {\textPi }" "Π" :string)
(merge-rule "\IeC {\textRho }" "Ρ" :string)
(merge-rule "\IeC {\textSigma }" "Σ" :string)
(merge-rule "\IeC {\textTau }" "Τ" :string)
(merge-rule "\IeC {\textUpsilon }" "Υ" :string)
(merge-rule "\IeC {\textPhi }" "Φ" :string)
(merge-rule "\IeC {\textChi }" "Χ" :string)
(merge-rule "\IeC {\textPsi }" "Ψ" :string)
(merge-rule "\IeC {\textOmega }" "Ω" :string)
(merge-rule "\IeC {\textohm }" "Ω" :string)
;; This xindy module provides some basic support for "see"
(require "makeindex.xdy")
;; This creates one-letter headings and works fine with utf-8 letters.
;; For Cyrillic with pdflatex works thanks to LICRcyr2utf8.xdy
(require "latin-lettergroups.xdy")
;; currently we don't (know how to easily) separate "Numbers" from
;; "Symbols" with xindy as is the case with makeindex.
(markup-index :open "\begin{sphinxtheindex}
\let\lettergroup\sphinxstyleindexlettergroup
\let\lettergroupDefault\sphinxstyleindexlettergroupDefault
\let\spxpagem\sphinxstyleindexpagemain
\let\spxentry\sphinxstyleindexentry
\let\spxextra\sphinxstyleindexextra
"
:close "
\end{sphinxtheindex}
"
:tree)

106
sphinxhighlight.sty Normal file
View File

@ -0,0 +1,106 @@
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{sphinxhighlight}[2016/05/29 stylesheet for highlighting with pygments]
% Its contents depend on pygments_style configuration variable.
\makeatletter
\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax%
\let\PYG@ul=\relax \let\PYG@tc=\relax%
\let\PYG@bc=\relax \let\PYG@ff=\relax}
\def\PYG@tok#1{\csname PYG@tok@#1\endcsname}
\def\PYG@toks#1+{\ifx\relax#1\empty\else%
\PYG@tok{#1}\expandafter\PYG@toks\fi}
\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{%
\PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}}
\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}}
\@namedef{PYG@tok@w}{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}}
\@namedef{PYG@tok@c}{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
\@namedef{PYG@tok@cp}{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
\@namedef{PYG@tok@cs}{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}\def\PYG@bc##1{{\setlength{\fboxsep}{0pt}\colorbox[rgb]{1.00,0.94,0.94}{\strut ##1}}}}
\@namedef{PYG@tok@k}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
\@namedef{PYG@tok@kp}{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
\@namedef{PYG@tok@kt}{\def\PYG@tc##1{\textcolor[rgb]{0.56,0.13,0.00}{##1}}}
\@namedef{PYG@tok@o}{\def\PYG@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}}
\@namedef{PYG@tok@ow}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
\@namedef{PYG@tok@nb}{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
\@namedef{PYG@tok@nf}{\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.49}{##1}}}
\@namedef{PYG@tok@nc}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.05,0.52,0.71}{##1}}}
\@namedef{PYG@tok@nn}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.05,0.52,0.71}{##1}}}
\@namedef{PYG@tok@ne}{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
\@namedef{PYG@tok@nv}{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
\@namedef{PYG@tok@no}{\def\PYG@tc##1{\textcolor[rgb]{0.38,0.68,0.84}{##1}}}
\@namedef{PYG@tok@nl}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.13,0.44}{##1}}}
\@namedef{PYG@tok@ni}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.84,0.33,0.22}{##1}}}
\@namedef{PYG@tok@na}{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
\@namedef{PYG@tok@nt}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.45}{##1}}}
\@namedef{PYG@tok@nd}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.33,0.33,0.33}{##1}}}
\@namedef{PYG@tok@s}{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
\@namedef{PYG@tok@sd}{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
\@namedef{PYG@tok@si}{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.44,0.63,0.82}{##1}}}
\@namedef{PYG@tok@se}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
\@namedef{PYG@tok@sr}{\def\PYG@tc##1{\textcolor[rgb]{0.14,0.33,0.53}{##1}}}
\@namedef{PYG@tok@ss}{\def\PYG@tc##1{\textcolor[rgb]{0.32,0.47,0.09}{##1}}}
\@namedef{PYG@tok@sx}{\def\PYG@tc##1{\textcolor[rgb]{0.78,0.36,0.04}{##1}}}
\@namedef{PYG@tok@m}{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
\@namedef{PYG@tok@gh}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}}
\@namedef{PYG@tok@gu}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}}
\@namedef{PYG@tok@gd}{\def\PYG@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}}
\@namedef{PYG@tok@gi}{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}}
\@namedef{PYG@tok@gr}{\def\PYG@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}}
\@namedef{PYG@tok@ge}{\let\PYG@it=\textit}
\@namedef{PYG@tok@gs}{\let\PYG@bf=\textbf}
\@namedef{PYG@tok@gp}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.78,0.36,0.04}{##1}}}
\@namedef{PYG@tok@go}{\def\PYG@tc##1{\textcolor[rgb]{0.20,0.20,0.20}{##1}}}
\@namedef{PYG@tok@gt}{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}}
\@namedef{PYG@tok@err}{\def\PYG@bc##1{{\setlength{\fboxsep}{-\fboxrule}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}}}
\@namedef{PYG@tok@kc}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
\@namedef{PYG@tok@kd}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
\@namedef{PYG@tok@kn}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
\@namedef{PYG@tok@kr}{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
\@namedef{PYG@tok@bp}{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}}
\@namedef{PYG@tok@fm}{\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.49}{##1}}}
\@namedef{PYG@tok@vc}{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
\@namedef{PYG@tok@vg}{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
\@namedef{PYG@tok@vi}{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
\@namedef{PYG@tok@vm}{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}}
\@namedef{PYG@tok@sa}{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
\@namedef{PYG@tok@sb}{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
\@namedef{PYG@tok@sc}{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
\@namedef{PYG@tok@dl}{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
\@namedef{PYG@tok@s2}{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
\@namedef{PYG@tok@sh}{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
\@namedef{PYG@tok@s1}{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}}
\@namedef{PYG@tok@mb}{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
\@namedef{PYG@tok@mf}{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
\@namedef{PYG@tok@mh}{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
\@namedef{PYG@tok@mi}{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
\@namedef{PYG@tok@il}{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
\@namedef{PYG@tok@mo}{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}}
\@namedef{PYG@tok@ch}{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
\@namedef{PYG@tok@cm}{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
\@namedef{PYG@tok@cpf}{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
\@namedef{PYG@tok@c1}{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}}
\def\PYGZbs{\char`\\}
\def\PYGZus{\char`\_}
\def\PYGZob{\char`\{}
\def\PYGZcb{\char`\}}
\def\PYGZca{\char`\^}
\def\PYGZam{\char`\&}
\def\PYGZlt{\char`\<}
\def\PYGZgt{\char`\>}
\def\PYGZsh{\char`\#}
\def\PYGZpc{\char`\%}
\def\PYGZdl{\char`\$}
\def\PYGZhy{\char`\-}
\def\PYGZsq{\char`\'}
\def\PYGZdq{\char`\"}
\def\PYGZti{\char`\~}
% for compatibility with earlier versions
\def\PYGZat{@}
\def\PYGZlb{[}
\def\PYGZrb{]}
\makeatother
\renewcommand\PYGZsq{\textquotesingle}

102
sphinxhowto.cls Normal file
View File

@ -0,0 +1,102 @@
%
% sphinxhowto.cls for Sphinx (https://www.sphinx-doc.org/)
%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{sphinxhowto}[2019/12/01 v2.3.0 Document class (Sphinx howto)]
% 'oneside' option overriding the 'twoside' default
\newif\if@oneside
\DeclareOption{oneside}{\@onesidetrue}
% Pass remaining document options to the parent class.
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\sphinxdocclass}}
\ProcessOptions\relax
% Default to two-side document
\if@oneside
% nothing to do (oneside is the default)
\else
\PassOptionsToClass{twoside}{\sphinxdocclass}
\fi
\LoadClass{\sphinxdocclass}
% Set some sane defaults for section numbering depth and TOC depth. You can
% reset these counters in your preamble.
%
\setcounter{secnumdepth}{2}
\setcounter{tocdepth}{2}% i.e. section and subsection
% Adapt \and command to the flushright context of \sphinxmaketitle, to
% avoid ragged line endings if author names do not fit all on one single line
\DeclareRobustCommand{\and}{%
\end{tabular}\kern-\tabcolsep
\allowbreak
\hskip\dimexpr1em+\tabcolsep\@plus.17fil\begin{tabular}[t]{c}%
}%
% If it is desired that each author name be on its own line, use in preamble:
%\DeclareRobustCommand{\and}{%
% \end{tabular}\kern-\tabcolsep\\\begin{tabular}[t]{c}%
%}%
% Change the title page to look a bit better, and fit in with the fncychap
% ``Bjarne'' style a bit better.
%
\newcommand{\sphinxmaketitle}{%
\noindent\rule{\textwidth}{1pt}\par
\begingroup % for PDF information dictionary
\def\endgraf{ }\def\and{\& }%
\pdfstringdefDisableCommands{\def\\{, }}% overwrite hyperref setup
\hypersetup{pdfauthor={\@author}, pdftitle={\@title}}%
\endgroup
\begin{flushright}
\sphinxlogo
\py@HeaderFamily
{\Huge \@title }\par
{\itshape\large \py@release \releaseinfo}\par
\vspace{25pt}
{\Large
\begin{tabular}[t]{c}
\@author
\end{tabular}\kern-\tabcolsep}\par
\vspace{25pt}
\@date \par
\py@authoraddress \par
\end{flushright}
\@thanks
\setcounter{footnote}{0}
\let\thanks\relax\let\maketitle\relax
%\gdef\@thanks{}\gdef\@author{}\gdef\@title{}
}
\newcommand{\sphinxtableofcontents}{%
\begingroup
\parskip \z@skip
\sphinxtableofcontentshook
\tableofcontents
\endgroup
\noindent\rule{\textwidth}{1pt}\par
\vspace{12pt}%
}
\newcommand\sphinxtableofcontentshook{}
\pagenumbering{arabic}
% Fix the bibliography environment to add an entry to the Table of
% Contents.
% For an article document class this environment is a section,
% so no page break before it.
%
\newenvironment{sphinxthebibliography}[1]{%
% \phantomsection % not needed here since TeXLive 2010's hyperref
\begin{thebibliography}{#1}%
\addcontentsline{toc}{section}{\ifdefined\refname\refname\else\ifdefined\bibname\bibname\fi\fi}}{\end{thebibliography}}
% Same for the indices.
% The memoir class already does this, so we don't duplicate it in that case.
%
\@ifclassloaded{memoir}
{\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}}
{\newenvironment{sphinxtheindex}{%
\phantomsection % needed because no chapter, section, ... is created by theindex
\begin{theindex}%
\addcontentsline{toc}{section}{\indexname}}{\end{theindex}}}

148
sphinxlatexadmonitions.sty Normal file
View File

@ -0,0 +1,148 @@
%% NOTICES AND ADMONITIONS
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexadmonitions.sty}[2021/01/27 admonitions]
% Provides support for this output mark-up from Sphinx latex writer:
%
% - sphinxadmonition (environment)
% This is a dispatch supporting
%
% - note, hint, important, tip (via sphinxlightbox)
% - warning, caution, attention, danger, error (via sphinxheavybox)
%
% Each sphinx<notice name> environment can be redefined by user.
% The defaults are customizable via various colour and dimension
% settings, cf sphinx docs (latex customization).
%
% Requires:
\RequirePackage{framed}% used by sphinxheavybox
%
% Dependencies (they do not need to be defined at time of loading):
% - of course the various colour and dimension options handled via sphinx.sty
% - \sphinxstrong (for sphinxlightbox and sphinxheavybox)
% - dimension register \spx@image@maxheight from sphinxlatexgraphics.sty
% - \savenotes/\spewnotes from sphinxpackagefootnote (for sphinxheavybox)
% Provides: (also in sphinxlatexliterals.sty)
\providecommand*\sphinxvspacefixafterfrenchlists{%
\ifvmode\ifdim\lastskip<\z@ \vskip\parskip\fi\else\par\fi
}
% Some are quite plain
% the spx@notice@bordercolor etc are set in the sphinxadmonition environment
\newenvironment{sphinxlightbox}{%
\par
\noindent{\color{spx@notice@bordercolor}%
\rule{\linewidth}{\spx@notice@border}}\par\nobreak
{\parskip\z@skip\noindent}%
}
{%
% counteract previous possible negative skip (French lists!):
% (we can't cancel that any earlier \vskip introduced a potential pagebreak)
\sphinxvspacefixafterfrenchlists
\nobreak\vbox{\noindent\kern\@totalleftmargin
{\color{spx@notice@bordercolor}%
\rule[\dimexpr.4\baselineskip-\spx@notice@border\relax]
{\linewidth}{\spx@notice@border}}\hss}\allowbreak
}% end of sphinxlightbox environment definition
% may be renewenvironment'd by user for complete customization
\newenvironment{sphinxnote}[1]
{\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
\newenvironment{sphinxhint}[1]
{\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
\newenvironment{sphinximportant}[1]
{\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
\newenvironment{sphinxtip}[1]
{\begin{sphinxlightbox}\sphinxstrong{#1} }{\end{sphinxlightbox}}
% or just use the package options
% these are needed for common handling by notice environment of lightbox
% and heavybox but they are currently not used by lightbox environment
% and there is consequently no corresponding package option
\definecolor{sphinxnoteBgColor}{rgb}{1,1,1}
\definecolor{sphinxhintBgColor}{rgb}{1,1,1}
\definecolor{sphinximportantBgColor}{rgb}{1,1,1}
\definecolor{sphinxtipBgColor}{rgb}{1,1,1}
% Others get more distinction
% Code adapted from framed.sty's "snugshade" environment.
% Nesting works (inner frames do not allow page breaks).
\newenvironment{sphinxheavybox}{\par
\setlength{\FrameRule}{\spx@notice@border}%
\setlength{\FrameSep}{\dimexpr.6\baselineskip-\FrameRule\relax}
\advance\spx@image@maxheight
-\dimexpr2\FrameRule
+2\FrameSep
+\baselineskip\relax % will happen again if nested, needed indeed!
% configure framed.sty's parameters to obtain same vertical spacing
% as for "light" boxes. We need for this to manually insert parskip glue and
% revert a skip done by framed before the frame.
\ltx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}%
\vspace{\FrameHeightAdjust}
% copied/adapted from framed.sty's snugshade
\def\FrameCommand##1{\hskip\@totalleftmargin
\fboxsep\FrameSep \fboxrule\FrameRule
\fcolorbox{spx@notice@bordercolor}{spx@notice@bgcolor}{##1}%
\hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
\savenotes
% use a minipage if we are already inside a framed environment
\ifspx@inframed
\noindent\begin{minipage}{\linewidth}
\else
% handle case where notice is first thing in a list item (or is quoted)
\if@inlabel
\noindent\par\vspace{-\baselineskip}
\else
\vspace{\parskip}
\fi
\fi
\MakeFramed {\spx@inframedtrue
\advance\hsize-\width \@totalleftmargin\z@ \linewidth\hsize
% minipage initialization copied from LaTeX source code.
\@pboxswfalse
\let\@listdepth\@mplistdepth \@mplistdepth\z@
\@minipagerestore
\@setminipage }%
}
{%
\par\unskip
\@minipagefalse
\endMakeFramed
\ifspx@inframed\end{minipage}\fi
% set footnotes at bottom of page
\spewnotes
% arrange for similar spacing below frame as for "light" boxes.
\vskip .4\baselineskip
}% end of sphinxheavybox environment definition
% may be renewenvironment'd by user for complete customization
\newenvironment{sphinxwarning}[1]
{\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
\newenvironment{sphinxcaution}[1]
{\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
\newenvironment{sphinxattention}[1]
{\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
\newenvironment{sphinxdanger}[1]
{\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
\newenvironment{sphinxerror}[1]
{\begin{sphinxheavybox}\sphinxstrong{#1} }{\end{sphinxheavybox}}
% or just use package options
% the \colorlet of xcolor (if at all loaded) is overkill for our use case
\newcommand{\sphinxcolorlet}[2]
{\expandafter\let\csname\@backslashchar color@#1\expandafter\endcsname
\csname\@backslashchar color@#2\endcsname }
% the main dispatch for all types of notices
\newenvironment{sphinxadmonition}[2]{% #1=type, #2=heading
% can't use #1 directly in definition of end part
\def\spx@noticetype {#1}%
% set parameters of heavybox/lightbox
\sphinxcolorlet{spx@notice@bordercolor}{sphinx#1BorderColor}%
\sphinxcolorlet{spx@notice@bgcolor}{sphinx#1BgColor}%
\spx@notice@border \dimexpr\csname spx@opt@#1border\endcsname\relax
% start specific environment, passing the heading as argument
\begin{sphinx#1}{#2}}
% workaround some LaTeX "feature" of \end command
{\edef\spx@temp{\noexpand\end{sphinx\spx@noticetype}}\spx@temp}
\endinput

22
sphinxlatexcontainers.sty Normal file
View File

@ -0,0 +1,22 @@
%% CONTAINER DIRECTIVES
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexcontainers.sty}[2021/05/03 containers]
% The purpose of this file is to provide a dummy environment sphinxclass which
% will be inserted for each class in each container directive. The class name
% will be passed as the argument to the environment.
%
% For a class foo, the user can define customised handling of that class by
% defining the sphinxclassfoo LaTeX environment.
\newenvironment{sphinxuseclass}[1]{%
\def\sphinxClassFunctionName{sphinxclass#1}%
\ltx@ifundefined{\sphinxClassFunctionName}%
{}% undefined so do nothing
{\expandafter\begin\expandafter{\sphinxClassFunctionName}}%
}{%
\ltx@ifundefined{\sphinxClassFunctionName}%
{}% we did nothing so we keep doing nothing
{\expandafter\end\expandafter{\sphinxClassFunctionName}}%
}%

122
sphinxlatexgraphics.sty Normal file
View File

@ -0,0 +1,122 @@
%% GRAPHICS
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexgraphics.sty}[2021/01/27 graphics]
% Provides support for this output mark-up from Sphinx latex writer:
%
% - macros:
%
% - \sphinxfigcaption
% - \sphinxincludegraphics
%
% - environments:
%
% - sphinxfigure-in-table
%
% May change:
%
% - \sphinxcaption (at begin document)
%
% Also provides:
%
% - \sphinxsafeincludegraphics (default of \sphinxincludegraphics since 2.0)
% - \spx@image@maxheight dimension (used by sphinxlatexadmonitions.sty)
% - \spx@image@box scratch box register (also used by sphinxlatexliterals.sty)
%
% Requires:
% \RequirePackage{graphicx}% done in sphinx.sty
\RequirePackage{amstext}% needed for \firstchoice@true(false)
% \sphinxincludegraphics resizes images larger than the TeX \linewidth (which
% is adjusted in indented environments), or taller than a certain maximal
% height (usually \textheight and this is reduced in the environments which use
% framed.sty to avoid infinite loop if image too tall).
%
% In case height or width options are present the rescaling is done
% (since 2.0), in a way keeping the width:height ratio either native from
% image or from the width and height options if both were present.
%
\newdimen\spx@image@maxheight
\AtBeginDocument{\spx@image@maxheight\textheight}
% box scratch register
\newbox\spx@image@box
\newcommand*{\sphinxsafeincludegraphics}[2][]{%
% #1 contains possibly width=, height=, but no scale= since 1.8.4
\setbox\spx@image@box\hbox{\includegraphics[#1,draft]{#2}}%
\in@false % use some handy boolean flag
\ifdim \wd\spx@image@box>\linewidth
\in@true % flag to remember to adjust options and set box dimensions
% compute height which results from rescaling width to \linewidth
% and keep current aspect ratio. multiply-divide in \numexpr uses
% temporarily doubled precision, hence no overflow. (of course we
% assume \ht is not a few sp's below \maxdimen...(about 16384pt).
\edef\spx@image@rescaledheight % with sp units
{\the\numexpr\ht\spx@image@box
*\linewidth/\wd\spx@image@box sp}%
\ifdim\spx@image@rescaledheight>\spx@image@maxheight
% the rescaled height will be too big, so it is height which decides
% the rescaling factor
\def\spx@image@requiredheight{\spx@image@maxheight}% dimen register
\edef\spx@image@requiredwidth % with sp units
{\the\numexpr\wd\spx@image@box
*\spx@image@maxheight/\ht\spx@image@box sp}%
% TODO: decide if this commented-out block could be needed due to
% rounding in numexpr operations going up
% \ifdim\spx@image@requiredwidth>\linewidth
% \def\spx@image@requiredwidth{\linewidth}% dimen register
% \fi
\else
\def\spx@image@requiredwidth{\linewidth}% dimen register
\let\spx@image@requiredheight\spx@image@rescaledheight% sp units
\fi
\else
% width is ok, let's check height
\ifdim\ht\spx@image@box>\spx@image@maxheight
\in@true
\edef\spx@image@requiredwidth % with sp units
{\the\numexpr\wd\spx@image@box
*\spx@image@maxheight/\ht\spx@image@box sp}%
\def\spx@image@requiredheight{\spx@image@maxheight}% dimen register
\fi
\fi % end of check of width and height
\ifin@
\setbox\spx@image@box
\hbox{\includegraphics
[%#1,% contained only width and/or height and overruled anyhow
width=\spx@image@requiredwidth,height=\spx@image@requiredheight]%
{#2}}%
% \includegraphics does not set box dimensions to the exactly
% requested ones, see https://github.com/latex3/latex2e/issues/112
\wd\spx@image@box\spx@image@requiredwidth
\ht\spx@image@box\spx@image@requiredheight
\leavevmode\box\spx@image@box
\else
% here we do not modify the options, no need to adjust width and height
% on output, they will be computed exactly as with "draft" option
\setbox\spx@image@box\box\voidb@x % clear memory
\includegraphics[#1]{#2}%
\fi
}%
% Use the "safe" one by default (2.0)
\def\sphinxincludegraphics{\sphinxsafeincludegraphics}
%% FIGURE IN TABLE
%
\newenvironment{sphinxfigure-in-table}[1][\linewidth]{%
\def\@captype{figure}%
\sphinxsetvskipsforfigintablecaption
\begin{minipage}{#1}%
}{\end{minipage}}
% tabulary expands twice contents, we need to prevent double counter stepping
\newcommand*\sphinxfigcaption
{\ifx\equation$%$% this is trick to identify tabulary first pass
\firstchoice@false\else\firstchoice@true\fi
\spx@originalcaption }
\newcommand*\sphinxsetvskipsforfigintablecaption
{\abovecaptionskip\smallskipamount
\belowcaptionskip\smallskipamount}
\endinput

69
sphinxlatexindbibtoc.sty Normal file
View File

@ -0,0 +1,69 @@
%% INDEX, BIBLIOGRAPHY, APPENDIX, TABLE OF CONTENTS
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexindbibtoc.sty}[2021/01/27 index, bib., toc]
% Provides support for this output mark-up from Sphinx latex writer:
%
% - environments: (backup defaults or get redefined)
%
% - sphinxtheindex (direct mark-up or via python.ist or sphinx.xdy)
% - sphinxthebibliography
%
% - macros: (defines defaults)
%
% - \sphinxmaketitle
% - \sphinxtableofcontents
% - \sphinxnonalphabeticalgroupname
% - \sphinxsymbolsname
% - \sphinxnumbersname
% - \sphinxcite
%
% Requires:
\RequirePackage{makeidx}
% fix the double index and bibliography on the table of contents
% in jsclasses (Japanese standard document classes)
\ifx\@jsc@uplatextrue\@undefined\else
\renewenvironment{sphinxtheindex}
{\cleardoublepage\phantomsection
\begin{theindex}}
{\end{theindex}}
\renewenvironment{sphinxthebibliography}[1]
{\cleardoublepage% \phantomsection % not needed here since TeXLive 2010's hyperref
\begin{thebibliography}{#1}}
{\end{thebibliography}}
\fi
% disable \@chappos in Appendix in pTeX
\ifx\kanjiskip\@undefined\else
\let\py@OldAppendix=\appendix
\renewcommand{\appendix}{
\py@OldAppendix
\gdef\@chappos{}
}
\fi
% make commands known to non-Sphinx document classes
\providecommand*{\sphinxmaketitle}{\maketitle}
\providecommand*{\sphinxtableofcontents}{\tableofcontents}
\ltx@ifundefined{sphinxthebibliography}
{\newenvironment
{sphinxthebibliography}{\begin{thebibliography}}{\end{thebibliography}}%
}
{}% else clause of \ltx@ifundefined
\ltx@ifundefined{sphinxtheindex}
{\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}}%
{}% else clause of \ltx@ifundefined
% for usage with xindy: this string gets internationalized in preamble
\newcommand*{\sphinxnonalphabeticalgroupname}{}
% redefined in preamble, headings for makeindex produced index
\newcommand*{\sphinxsymbolsname}{}
\newcommand*{\sphinxnumbersname}{}
\protected\def\sphinxcite{\cite}
\endinput

97
sphinxlatexlists.sty Normal file
View File

@ -0,0 +1,97 @@
%% ALPHANUMERIC LIST ITEMS
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexlists.sty}[2021/01/27 lists]
% Provides support for this output mark-up from Sphinx latex writer:
% - \sphinxsetlistlabels
% Dependencies: the \spx@opt@maxlistdepth from sphinx.sty
\newcommand\sphinxsetlistlabels[5]
{% #1 = style, #2 = enum, #3 = enumnext, #4 = prefix, #5 = suffix
% #2 and #3 are counters used by enumerate environment e.g. enumi, enumii.
% #1 is a macro such as \arabic or \alph
% prefix and suffix are strings (by default empty and a dot).
\@namedef{the#2}{#1{#2}}%
\@namedef{label#2}{#4\@nameuse{the#2}#5}%
\@namedef{p@#3}{\@nameuse{p@#2}#4\@nameuse{the#2}#5}%
}%
%% MAXLISTDEPTH
%
% remove LaTeX's cap on nesting depth if 'maxlistdepth' key used.
% This is a hack, which works with the standard classes: it assumes \@toodeep
% is always used in "true" branches: "\if ... \@toodeep \else .. \fi."
% will force use the "false" branch (if there is one)
\def\spx@toodeep@hack{\fi\iffalse}
% do nothing if 'maxlistdepth' key not used or if package enumitem loaded.
\ifnum\spx@opt@maxlistdepth=\z@\expandafter\@gobbletwo\fi
\AtBeginDocument{%
\@ifpackageloaded{enumitem}{\remove@to@nnil}{}%
\let\spx@toodeepORI\@toodeep
\def\@toodeep{%
\ifnum\@listdepth<\spx@opt@maxlistdepth\relax
\expandafter\spx@toodeep@hack
\else
\expandafter\spx@toodeepORI
\fi}%
% define all missing \@list... macros
\count@\@ne
\loop
\ltx@ifundefined{@list\romannumeral\the\count@}
{\iffalse}{\iftrue\advance\count@\@ne}%
\repeat
\loop
\ifnum\count@>\spx@opt@maxlistdepth\relax\else
\expandafter\let
\csname @list\romannumeral\the\count@\expandafter\endcsname
\csname @list\romannumeral\the\numexpr\count@-\@ne\endcsname
% workaround 2.6--3.2d babel-french issue (fixed in 3.2e; no change needed)
\ltx@ifundefined{leftmargin\romannumeral\the\count@}
{\expandafter\let
\csname leftmargin\romannumeral\the\count@\expandafter\endcsname
\csname leftmargin\romannumeral\the\numexpr\count@-\@ne\endcsname}{}%
\advance\count@\@ne
\repeat
% define all missing enum... counters and \labelenum... macros and \p@enum..
\count@\@ne
\loop
\ltx@ifundefined{c@enum\romannumeral\the\count@}
{\iffalse}{\iftrue\advance\count@\@ne}%
\repeat
\loop
\ifnum\count@>\spx@opt@maxlistdepth\relax\else
\newcounter{enum\romannumeral\the\count@}%
\expandafter\def
\csname labelenum\romannumeral\the\count@\expandafter\endcsname
\expandafter
{\csname theenum\romannumeral\the\numexpr\count@\endcsname.}%
\expandafter\def
\csname p@enum\romannumeral\the\count@\expandafter\endcsname
\expandafter
{\csname p@enum\romannumeral\the\numexpr\count@-\@ne\expandafter
\endcsname\csname theenum\romannumeral\the\numexpr\count@-\@ne\endcsname.}%
\advance\count@\@ne
\repeat
% define all missing labelitem... macros
\count@\@ne
\loop
\ltx@ifundefined{labelitem\romannumeral\the\count@}
{\iffalse}{\iftrue\advance\count@\@ne}%
\repeat
\loop
\ifnum\count@>\spx@opt@maxlistdepth\relax\else
\expandafter\let
\csname labelitem\romannumeral\the\count@\expandafter\endcsname
\csname labelitem\romannumeral\the\numexpr\count@-\@ne\endcsname
\advance\count@\@ne
\repeat
\PackageInfo{sphinx}{maximal list depth extended to \spx@opt@maxlistdepth}%
\@gobble\@nnil
}
\endinput

804
sphinxlatexliterals.sty Normal file
View File

@ -0,0 +1,804 @@
%% LITERAL BLOCKS
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexliterals.sty}[2021/12/06 code-blocks and parsed literals]
% Provides support for this output mark-up from Sphinx latex writer:
%
% - macros:
% - \sphinxLiteralBlockLabel
% - \sphinxSetupCaptionForVerbatim
% - \sphinxSetupCodeBlockInFootnote
% - \sphinxhref
% - \sphinxnolinkurl
% - \sphinxresetverbatimhllines
% - \sphinxunactivateextrasandspace
% - \sphinxupquote
% - \sphinxurl
%
% - environments:
% - sphinxVerbatim
% - sphinxVerbatimintable
% - sphinxalltt
%
% Dependency:
%
% - hyperref (for \phantomsection and \capstart) (loaded later)
%
% Executes \RequirePackage for:
%
% - framed
% - fancyvrb
% - alltt
% - upquote
% - needspace
% also in sphinxlatexadmonitions.sty:
% This is a workaround to a "feature" of French lists, when literal block
% follows immediately; usable generally (does only \par then), a priori...
\providecommand*\sphinxvspacefixafterfrenchlists{%
\ifvmode\ifdim\lastskip<\z@ \vskip\parskip\fi\else\par\fi
}
% For framing allowing pagebreaks
\RequirePackage{framed}
% For source code
% MEMO: fancyvrb is used mainly to
% 1- control horizontal and vertical spacing
% 2- optional line numbering
% 3- optional line emphasizing
% 4- while still allowing expansion of Pygments latex mark-up
% Other aspects such as framing, caption handling, codeline wrapping are
% added on top of it. We should stop using fancyvrb and implement
% 1, 2, 3, 4 by own Sphinx fully native Verbatim. This would allow to solve
% limitations with wrapped long code line not allowing page break.
\RequirePackage{fancyvrb}
% For parsed-literal blocks.
\RequirePackage{alltt}
% Display "real" single quotes in literal blocks.
\RequirePackage{upquote}
% Skip to next page if not enough space at bottom
\RequirePackage{needspace}
% Based on use of "fancyvrb.sty"'s Verbatim.
% - with framing allowing page breaks ("framed.sty")
% - with breaking of long lines (exploits Pygments mark-up),
% - with possibly of a top caption, non-separable by pagebreak.
% - and usable inside tables or footnotes ("sphinxpackagefootnote.sty").
% for emphasizing lines
\define@key{FV}{hllines}{\def\sphinx@verbatim@checkifhl##1{\in@{, ##1,}{#1}}}
% sphinxVerbatim must be usable by third party without requiring hllines set-up
\def\sphinxresetverbatimhllines{\def\sphinx@verbatim@checkifhl##1{\in@false}}
\sphinxresetverbatimhllines
% Prior to Sphinx 1.5, \Verbatim and \endVerbatim were modified by Sphinx.
% The aliases defined here are used in sphinxVerbatim environment and can
% serve as hook-points with no need to modify \Verbatim itself.
\let\OriginalVerbatim \Verbatim
\let\endOriginalVerbatim\endVerbatim
% for captions of literal blocks
% at start of caption title
\newcommand*{\fnum@literalblock}{\literalblockname\nobreakspace\theliteralblock}
% this will be overwritten in document preamble by Babel translation
\newcommand*{\literalblockname}{Listing }
% file extension needed for \caption's good functioning, the file is created
% only if a \listof{literalblock}{foo} command is encountered, which is
% analogous to \listoffigures, but for the code listings (foo = chosen title.)
\newcommand*{\ext@literalblock}{lol}
% if forced use of minipage encapsulation is needed (e.g. table cells)
\newif\ifsphinxverbatimwithminipage \sphinxverbatimwithminipagefalse
% Framing macro for use with framed.sty's \FrameCommand
% - it obeys current indentation,
% - frame is \fboxsep separated from the contents,
% - the contents use the full available text width,
% - #1 = color of frame, #2 = color of background,
% - #3 = above frame, #4 = below frame, #5 = within frame,
% - #3 and #4 must be already typeset boxes; they must issue \normalcolor
% or similar, else, they are under scope of color #1
\long\def\spx@fcolorbox #1#2#3#4#5{%
\hskip\@totalleftmargin
\hskip-\fboxsep\hskip-\fboxrule
% use of \color@b@x here is compatible with both xcolor.sty and color.sty
\color@b@x {\color{#1}\spx@CustomFBox{#3}{#4}}{\color{#2}}{#5}%
\hskip-\fboxsep\hskip-\fboxrule
\hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth
}%
% #1 = for material above frame, such as a caption or a "continued" hint
% #2 = for material below frame, such as a caption or "continues on next page"
% #3 = actual contents, which will be typeset with a background color
\long\def\spx@CustomFBox#1#2#3{%
\begingroup
\setbox\@tempboxa\hbox{{#3}}% inner braces to avoid color leaks
\vbox{#1% above frame
% draw frame border _latest_ to avoid pdf viewer issue
\kern\fboxrule
\hbox{\kern\fboxrule
\copy\@tempboxa
\kern-\wd\@tempboxa\kern-\fboxrule
\vrule\@width\fboxrule
\kern\wd\@tempboxa
\vrule\@width\fboxrule}%
\kern-\dimexpr\ht\@tempboxa+\dp\@tempboxa+\fboxrule\relax
\hrule\@height\fboxrule
\kern\dimexpr\ht\@tempboxa+\dp\@tempboxa\relax
\hrule\@height\fboxrule
#2% below frame
}%
\endgroup
}%
\def\spx@fcolorbox@put@c#1{% hide width from framed.sty measuring
\moveright\dimexpr\fboxrule+.5\wd\@tempboxa\hb@xt@\z@{\hss#1\hss}%
}%
\def\spx@fcolorbox@put@r#1{% right align with contents, width hidden
\moveright\dimexpr\fboxrule+\wd\@tempboxa-\fboxsep\hb@xt@\z@{\hss#1}%
}%
\def\spx@fcolorbox@put@l#1{% left align with contents, width hidden
\moveright\dimexpr\fboxrule+\fboxsep\hb@xt@\z@{#1\hss}%
}%
%
\def\sphinxVerbatim@Continued
{\csname spx@fcolorbox@put@\spx@opt@verbatimcontinuedalign\endcsname
{\normalcolor\sphinxstylecodecontinued\literalblockcontinuedname}}%
\def\sphinxVerbatim@Continues
{\csname spx@fcolorbox@put@\spx@opt@verbatimcontinuesalign\endcsname
{\normalcolor\sphinxstylecodecontinues\literalblockcontinuesname}}%
\def\sphinxVerbatim@Title
{\spx@fcolorbox@put@c{\unhcopy\sphinxVerbatim@TitleBox}}%
\let\sphinxVerbatim@Before\@empty
\let\sphinxVerbatim@After\@empty
% Defaults are redefined in document preamble according to language
\newcommand*\literalblockcontinuedname{continued from previous page}%
\newcommand*\literalblockcontinuesname{continues on next page}%
%
\def\spx@verbatimfcolorbox{\spx@fcolorbox{VerbatimBorderColor}{VerbatimColor}}%
\def\sphinxVerbatim@FrameCommand
{\spx@verbatimfcolorbox\sphinxVerbatim@Before\sphinxVerbatim@After}%
\def\sphinxVerbatim@FirstFrameCommand
{\spx@verbatimfcolorbox\sphinxVerbatim@Before\sphinxVerbatim@Continues}%
\def\sphinxVerbatim@MidFrameCommand
{\spx@verbatimfcolorbox\sphinxVerbatim@Continued\sphinxVerbatim@Continues}%
\def\sphinxVerbatim@LastFrameCommand
{\spx@verbatimfcolorbox\sphinxVerbatim@Continued\sphinxVerbatim@After}%
% For linebreaks inside Verbatim environment from package fancyvrb.
\newbox\sphinxcontinuationbox
\newbox\sphinxvisiblespacebox
\newcommand*\sphinxafterbreak {\copy\sphinxcontinuationbox}
% Take advantage of the already applied Pygments mark-up to insert
% potential linebreaks for TeX processing.
% {, <, #, %, $, ' and ": go to next line.
% _, }, ^, &, >, -, ~, and \: stay at end of broken line.
% Use of \textquotesingle for straight quote.
% FIXME: convert this to package options ?
\newcommand*\sphinxbreaksbeforelist {%
\do\PYGZob\{\do\PYGZlt\<\do\PYGZsh\#\do\PYGZpc\%% {, <, #, %,
\do\PYGZdl\$\do\PYGZdq\"% $, "
\def\PYGZsq
{\discretionary{}{\sphinxafterbreak\textquotesingle}{\textquotesingle}}% '
}
\newcommand*\sphinxbreaksafterlist {%
\do\PYGZus\_\do\PYGZcb\}\do\PYGZca\^\do\PYGZam\&% _, }, ^, &,
\do\PYGZgt\>\do\PYGZhy\-\do\PYGZti\~% >, -, ~
\do\PYGZbs\\% \
}
\newcommand*\sphinxbreaksatspecials {%
\def\do##1##2%
{\def##1{\discretionary{}{\sphinxafterbreak\char`##2}{\char`##2}}}%
\sphinxbreaksbeforelist
\def\do##1##2%
{\def##1{\discretionary{\char`##2}{\sphinxafterbreak}{\char`##2}}}%
\sphinxbreaksafterlist
}
\def\sphinx@verbatim@nolig@list {\do \`}%
% Some characters . , ; ? ! / are neither pygmentized nor "tex-escaped".
% This macro makes them "active" and they will insert potential linebreaks.
% Not compatible with math mode (cf \sphinxunactivateextras).
\newcommand*\sphinxbreaksbeforeactivelist {}% none
\newcommand*\sphinxbreaksafteractivelist {\do\.\do\,\do\;\do\?\do\!\do\/}
\newcommand*\sphinxbreaksviaactive {%
\def\do##1{\lccode`\~`##1%
\lowercase{\def~}{\discretionary{}{\sphinxafterbreak\char`##1}{\char`##1}}%
\catcode`##1\active}%
\sphinxbreaksbeforeactivelist
\def\do##1{\lccode`\~`##1%
\lowercase{\def~}{\discretionary{\char`##1}{\sphinxafterbreak}{\char`##1}}%
\catcode`##1\active}%
\sphinxbreaksafteractivelist
\lccode`\~`\~
}
% If the linebreak is at a space, the latter will be displayed as visible
% space at end of first line, and a continuation symbol starts next line.
\def\spx@verbatim@space {%
\nobreak\hskip\z@skip
\discretionary{\copy\sphinxvisiblespacebox}{\sphinxafterbreak}
{\kern\fontdimen2\font}%
}%
% if the available space on page is less than \literalblockneedspace, insert pagebreak
\newcommand{\sphinxliteralblockneedspace}{5\baselineskip}
\newcommand{\sphinxliteralblockwithoutcaptionneedspace}{1.5\baselineskip}
% The title (caption) is specified from outside as macro \sphinxVerbatimTitle.
% \sphinxVerbatimTitle is reset to empty after each use of Verbatim.
\newcommand*\sphinxVerbatimTitle {}
% This box to typeset the caption before framed.sty multiple passes for framing.
\newbox\sphinxVerbatim@TitleBox
% This box to measure contents if nested as inner \MakeFramed requires then
% minipage encapsulation but too long contents then break outer \MakeFramed
\newbox\sphinxVerbatim@ContentsBox
% Holder macro for labels of literal blocks. Set-up by LaTeX writer.
\newcommand*\sphinxLiteralBlockLabel {}
\newcommand*\sphinxSetupCaptionForVerbatim [1]
{%
\sphinxvspacefixafterfrenchlists
\needspace{\sphinxliteralblockneedspace}%
% insert a \label via \sphinxLiteralBlockLabel
% reset to normal the color for the literal block caption
\def\sphinxVerbatimTitle
{\py@NormalColor\sphinxcaption{\sphinxLiteralBlockLabel #1}}%
}
\newcommand*\sphinxSetupCodeBlockInFootnote {%
\fvset{fontsize=\footnotesize}\let\caption\sphinxfigcaption
\sphinxverbatimwithminipagetrue % reduces vertical spaces
% we counteract (this is in a group) the \@normalsize from \caption
\let\normalsize\footnotesize\let\@parboxrestore\relax
\def\spx@abovecaptionskip{\sphinxverbatimsmallskipamount}%
}
\newcommand*{\sphinxverbatimsmallskipamount}{\smallskipamount}
% serves to implement line highlighting and line wrapping
\newcommand\sphinxFancyVerbFormatLine[1]{%
\expandafter\sphinx@verbatim@checkifhl\expandafter{\the\FV@CodeLineNo}%
\ifin@
\sphinxVerbatimHighlightLine{#1}%
\else
\sphinxVerbatimFormatLine{#1}%
\fi
}%
\newcommand\sphinxVerbatimHighlightLine[1]{%
\edef\sphinxrestorefboxsep{\fboxsep\the\fboxsep\relax}%
\fboxsep0pt\relax % cf LaTeX bug graphics/4524
\colorbox{sphinxVerbatimHighlightColor}%
{\sphinxrestorefboxsep\sphinxVerbatimFormatLine{#1}}%
% no need to restore \fboxsep here, as this ends up in a \hbox from fancyvrb
}%
% \sphinxVerbatimFormatLine will be set locally to one of those two:
\newcommand\sphinxVerbatimFormatLineWrap{%
\hsize\linewidth
\ifspx@opt@verbatimforcewraps
\expandafter\spx@verb@FormatLineForceWrap
\else\expandafter\spx@verb@FormatLineWrap
\fi
}%
\newcommand\sphinxVerbatimFormatLineNoWrap[1]{\hb@xt@\linewidth{\strut #1\hss}}%
\long\def\spx@verb@FormatLineWrap#1{%
\vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@
\doublehyphendemerits\z@\finalhyphendemerits\z@
\strut #1\strut}%
}%
%
% The normal line wrapping allows breaks at spaces and ascii non
% letters, non digits. The \raggedright above means there will be
% an overfilled line only if some non-breakable "word" was
% encountered, which is longer than a line (it is moved always to
% be on its own on a new line).
%
% The "forced" line wrapping will parse the tokens to add potential
% breakpoints at each character. As some strings are highlighted,
% we have to apply the highlighting character per character, which
% requires to manipulate the output of the Pygments LaTeXFormatter.
%
% Doing this at latex level is complicated. The contents should
% be as expected: i.e. some active characters from
% \sphinxbreaksviaactive, some Pygments character escapes such as
% \PYGZdl{}, and the highlighting \PYG macro with always 2
% arguments. No other macros should be there, except perhaps
% zero-parameter macros. In particular:
% - the texcomments Pygments option must be set to False
%
% With pdflatex, Unicode input gives multi-bytes characters
% where the first byte is active. We support the "utf8" macros
% only. "utf8x" is not supported.
%
% The highlighting macro \PYG will be applied character per
% character. Highlighting via a colored background gives thus a
% chain of small colored boxes which may cause some artefact in
% some pdf viewers. Can't do anything here if we do want the line
% break to be possible.
%
% First a measurement step is done of what would the standard line
% wrapping give (i.e line breaks only at spaces and non-letter,
% non-digit ascii characters), cf TeX by Topic for the basic
% dissecting technique: TeX unfortunately when building a vertical
% box does not store in an accessible way what was the maximal
% line-width during paragraph building.
%
% Avoid LaTeX 2021 alteration of \@@par which potentially could break our
% measurement step (typically if the para/after hook is configured to use
% \vspace). Of course, breakage could happen only from user or package
% adding things to basic Sphinx latex. And perhaps spring LaTeX 2021 will
% provide a non-hooked \@@par, but this should work anyway and can't be
% beaten for speed.
\ltx@ifundefined{tex_par:D}
% We could use \@ifl@t@r\fmtversion{2020/02/02}{use \tex_par:D}{use \@@par}.
{\let\spx@par\@@par}% \@@par is then expected to be TeX's original \par
{\expandafter\let\expandafter\spx@par\csname tex_par:D\endcsname}
% More hesitation for avoiding the at-start-of-par hooks for our
% measurement : 1. with old LaTeX, we can not avoid hooks from everyhook
% or similar packages, 2. and perhaps the hooks add stuff which we should
% actually measure. Ideally, hooks are for inserting things in margin
% which do not change spacing. Most everything else in fact should not be
% executed in our scratch box for measurement, such as counter stepping.
\ltx@ifundefined{tex_everypar:D}
{\let\spx@everypar\everypar}
{\expandafter\let\expandafter\spx@everypar\csname tex_everypar:D\endcsname}
%
% If the max width exceeds the linewidth by more than verbatimmaxoverfull
% character widths, or if the min width plus verbatimmaxunderfull character
% widths is inferior to linewidth, then we apply the "force wrapping" with
% potential line break at each character, else we don't.
\long\def\spx@verb@FormatLineForceWrap#1{%
% \spx@image@box is a scratch box register that we can use here
\global\let\spx@verb@maxwidth\z@
\global\let\spx@verb@minwidth\linewidth
\setbox\spx@image@box
\vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@
\doublehyphendemerits\z@\finalhyphendemerits\z@
\spx@everypar{}\noindent\strut #1\strut\spx@par
\spx@verb@getwidths}%
\ifdim\spx@verb@maxwidth>
\dimexpr\linewidth+\spx@opt@verbatimmaxoverfull\fontcharwd\font`X \relax
\spx@verb@FormatLineWrap{\spx@verb@wrapPYG #1\spx@verb@wrapPYG}%
\else
\ifdim\spx@verb@minwidth<
\dimexpr\linewidth-\spx@opt@verbatimmaxunderfull\fontcharwd\font`X \relax
\spx@verb@FormatLineWrap{\spx@verb@wrapPYG #1\spx@verb@wrapPYG}%
\else
\spx@verb@FormatLineWrap{#1}%
\fi\fi
}%
% auxiliary paragraph dissector to get max and min widths
% but minwidth must not take into account the last line
\newbox\spx@scratchbox
\def\spx@verb@getwidths {%
\unskip\unpenalty
\setbox\spx@scratchbox\lastbox
\ifvoid\spx@scratchbox
\else
\setbox\spx@scratchbox\hbox{\unhbox\spx@scratchbox}%
\ifdim\spx@verb@maxwidth<\wd\spx@scratchbox
\xdef\spx@verb@maxwidth{\number\wd\spx@scratchbox sp}%
\fi
\expandafter\spx@verb@getwidths@loop
\fi
}%
\def\spx@verb@getwidths@loop {%
\unskip\unpenalty
\setbox\spx@scratchbox\lastbox
\ifvoid\spx@scratchbox
\else
\setbox\spx@scratchbox\hbox{\unhbox\spx@scratchbox}%
\ifdim\spx@verb@maxwidth<\wd\spx@scratchbox
\xdef\spx@verb@maxwidth{\number\wd\spx@scratchbox sp}%
\fi
\ifdim\spx@verb@minwidth>\wd\spx@scratchbox
\xdef\spx@verb@minwidth{\number\wd\spx@scratchbox sp}%
\fi
\expandafter\spx@verb@getwidths@loop
\fi
}%
% auxiliary macros to implement "cut long line even in middle of word"
\catcode`Z=3 % safe delimiter
\def\spx@verb@wrapPYG{%
\futurelet\spx@nexttoken\spx@verb@wrapPYG@i
}%
\def\spx@verb@wrapPYG@i{%
\ifx\spx@nexttoken\spx@verb@wrapPYG\let\next=\@gobble\else
\ifx\spx@nexttoken\PYG\let\next=\spx@verb@wrapPYG@PYG@onebyone\else
\discretionary{}{\sphinxafterbreak}{}%
\let\next\spx@verb@wrapPYG@ii
\fi\fi
\next
}%
% Let's recognize active characters. We don't support utf8x only utf8.
% And here #1 should not have picked up (non empty) braced contents
\long\def\spx@verb@wrapPYG@ii#1{%
\ifcat\noexpand~\noexpand#1\relax% active character
\expandafter\spx@verb@wrapPYG@active
\else % non-active character, control sequence such as \PYGZdl, or empty
\expandafter\spx@verb@wrapPYG@one
\fi {#1}%
}%
\long\def\spx@verb@wrapPYG@active#1{%
% Let's hope expansion of active character does not really require arguments,
% as we certainly don't want to go into expanding upfront token stream anyway.
\expandafter\spx@verb@wrapPYG@iii#1{}{}{}{}{}{}{}{}{}Z#1%
}%
\long\def\spx@verb@wrapPYG@iii#1#2Z{%
\ifx\UTFviii@four@octets#1\let\next=\spx@verb@wrapPYG@four\else
\ifx\UTFviii@three@octets#1\let\next=\spx@verb@wrapPYG@three\else
\ifx\UTFviii@two@octets#1\let\next=\spx@verb@wrapPYG@two\else
\let\next=\spx@verb@wrapPYG@one
\fi\fi\fi
\next
}%
\long\def\spx@verb@wrapPYG@one #1{#1\futurelet\spx@nexttoken\spx@verb@wrapPYG@i}%
\long\def\spx@verb@wrapPYG@two #1#2{#1#2\futurelet\spx@nexttoken\spx@verb@wrapPYG@i}%
\long\def\spx@verb@wrapPYG@three #1#2#3{#1#2#3\futurelet\spx@nexttoken\spx@verb@wrapPYG@i}%
\long\def\spx@verb@wrapPYG@four #1#2#3#4{#1#2#3#4\futurelet\spx@nexttoken\spx@verb@wrapPYG@i}%
% Replace \PYG by itself applied one character at a time! This way breakpoints
% can be inserted.
\def\spx@verb@wrapPYG@PYG@onebyone#1#2#3{% #1 = \PYG, #2 = highlight spec, #3 = tokens
\def\spx@verb@wrapPYG@PYG@spec{{#2}}%
\futurelet\spx@nexttoken\spx@verb@wrapPYG@PYG@i#3Z%
}%
\def\spx@verb@wrapPYG@PYG@i{%
\ifx\spx@nexttokenZ\let\next=\spx@verb@wrapPYG@PYG@done\else
\discretionary{}{\sphinxafterbreak}{}%
\let\next\spx@verb@wrapPYG@PYG@ii
\fi
\next
}%
\def\spx@verb@wrapPYG@PYG@doneZ{\futurelet\spx@nexttoken\spx@verb@wrapPYG@i}%
\long\def\spx@verb@wrapPYG@PYG@ii#1{%
\ifcat\noexpand~\noexpand#1\relax% active character
\expandafter\spx@verb@wrapPYG@PYG@active
\else % non-active character, control sequence such as \PYGZdl, or empty
\expandafter\spx@verb@wrapPYG@PYG@one
\fi {#1}%
}%
\long\def\spx@verb@wrapPYG@PYG@active#1{%
% Let's hope expansion of active character does not really require arguments,
% as we certainly don't want to go into expanding upfront token stream anyway.
\expandafter\spx@verb@wrapPYG@PYG@iii#1{}{}{}{}{}{}{}{}{}Z#1%
}%
\long\def\spx@verb@wrapPYG@PYG@iii#1#2Z{%
\ifx\UTFviii@four@octets#1\let\next=\spx@verb@wrapPYG@PYG@four\else
\ifx\UTFviii@three@octets#1\let\next=\spx@verb@wrapPYG@PYG@three\else
\ifx\UTFviii@two@octets#1\let\next=\spx@verb@wrapPYG@PYG@two\else
\let\next=\spx@verb@wrapPYG@PYG@one
\fi\fi\fi
\next
}%
\long\def\spx@verb@wrapPYG@PYG@one#1{%
\expandafter\PYG\spx@verb@wrapPYG@PYG@spec{#1}%
\futurelet\spx@nexttoken\spx@verb@wrapPYG@PYG@i
}%
\long\def\spx@verb@wrapPYG@PYG@two#1#2{%
\expandafter\PYG\spx@verb@wrapPYG@PYG@spec{#1#2}%
\futurelet\spx@nexttoken\spx@verb@wrapPYG@PYG@i
}%
\long\def\spx@verb@wrapPYG@PYG@three#1#2#3{%
\expandafter\PYG\spx@verb@wrapPYG@PYG@spec{#1#2#3}%
\futurelet\spx@nexttoken\spx@verb@wrapPYG@PYG@i
}%
\long\def\spx@verb@wrapPYG@PYG@four#1#2#3#4{%
\expandafter\PYG\spx@verb@wrapPYG@PYG@spec{#1#2#3#4}%
\futurelet\spx@nexttoken\spx@verb@wrapPYG@PYG@i
}%
\catcode`Z 11 %
%
\g@addto@macro\FV@SetupFont{%
\sbox\sphinxcontinuationbox {\spx@opt@verbatimcontinued}%
\sbox\sphinxvisiblespacebox {\spx@opt@verbatimvisiblespace}%
}%
\newenvironment{sphinxVerbatim}{%
% first, let's check if there is a caption
\ifx\sphinxVerbatimTitle\empty
\sphinxvspacefixafterfrenchlists
\parskip\z@skip
\vskip\sphinxverbatimsmallskipamount
% there was no caption. Check if nevertheless a label was set.
\ifx\sphinxLiteralBlockLabel\empty\else
% we require some space to be sure hyperlink target from \phantomsection
% will not be separated from upcoming verbatim by a page break
\needspace{\sphinxliteralblockwithoutcaptionneedspace}%
\phantomsection\sphinxLiteralBlockLabel
\fi
\else
\parskip\z@skip
\if t\spx@opt@literalblockcappos
\vskip\spx@abovecaptionskip
\def\sphinxVerbatim@Before
{\sphinxVerbatim@Title\nointerlineskip
\kern\dimexpr-\dp\strutbox+\sphinxbelowcaptionspace
% if no frame (code-blocks inside table cells), remove
% the "verbatimsep" whitespace from the top (better visually)
\ifspx@opt@verbatimwithframe\else-\sphinxverbatimsep\fi
% caption package adds \abovecaptionskip vspace, remove it
\spx@ifcaptionpackage{-\abovecaptionskip}{}\relax}%
\else
\vskip\sphinxverbatimsmallskipamount
\def\sphinxVerbatim@After
{\nointerlineskip\kern\dimexpr\dp\strutbox
\ifspx@opt@verbatimwithframe\else-\sphinxverbatimsep\fi
\spx@ifcaptionpackage{-\abovecaptionskip}{}\relax
\sphinxVerbatim@Title}%
\fi
\def\@captype{literalblock}%
\capstart
% \sphinxVerbatimTitle must reset color
\setbox\sphinxVerbatim@TitleBox
\hbox{\begin{minipage}{\linewidth}%
% caption package may detect wrongly if top or bottom, so we help it
\spx@ifcaptionpackage
{\caption@setposition{\spx@opt@literalblockcappos}}{}%
\sphinxVerbatimTitle
\end{minipage}}%
\fi
\global\let\sphinxLiteralBlockLabel\empty
\global\let\sphinxVerbatimTitle\empty
\fboxsep\sphinxverbatimsep \fboxrule\sphinxverbatimborder
\ifspx@opt@verbatimwithframe\else\fboxrule\z@\fi
\let\FrameCommand \sphinxVerbatim@FrameCommand
\let\FirstFrameCommand\sphinxVerbatim@FirstFrameCommand
\let\MidFrameCommand \sphinxVerbatim@MidFrameCommand
\let\LastFrameCommand \sphinxVerbatim@LastFrameCommand
\ifspx@opt@verbatimhintsturnover\else
\let\sphinxVerbatim@Continued\@empty
\let\sphinxVerbatim@Continues\@empty
\fi
\ifspx@opt@verbatimwrapslines
% fancyvrb's Verbatim puts each input line in (unbreakable) horizontal boxes.
% This customization wraps each line from the input in a \vtop, thus
% allowing it to wrap and display on two or more lines in the latex output.
% - The codeline counter will be increased only once.
% - The wrapped material will not break across pages, it is impossible
% to achieve this without extensive rewrite of fancyvrb.
% - The (not used in sphinx) obeytabs option to Verbatim is
% broken by this change (showtabs and tabspace work).
\let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineWrap
\let\FV@Space\spx@verbatim@space
% Allow breaks at special characters using \PYG... macros.
\sphinxbreaksatspecials
% Breaks at punctuation characters . , ; ? ! and / (needs catcode activation)
\fvset{codes*=\sphinxbreaksviaactive}%
\else % end of conditional code for wrapping long code lines
\let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineNoWrap
\fi
\let\FancyVerbFormatLine\sphinxFancyVerbFormatLine
\VerbatimEnvironment
% workaround to fancyvrb's check of current list depth
\def\@toodeep {\advance\@listdepth\@ne}%
% The list environment is needed to control perfectly the vertical space.
% Note: \OuterFrameSep used by framed.sty is later set to \topsep hence 0pt.
% - if caption: distance from last text baseline to caption baseline is
% A+(B-F)+\ht\strutbox, A = \abovecaptionskip (default 10pt), B =
% \baselineskip, F is the framed.sty \FrameHeightAdjust macro, default 6pt.
% Formula valid for F < 10pt.
% - distance of baseline of caption to top of frame is like for tables:
% \sphinxbelowcaptionspace (=0.5\baselineskip)
% - if no caption: distance of last text baseline to code frame is S+(B-F),
% with S = \sphinxverbatimtopskip (=\smallskip)
% - and distance from bottom of frame to next text baseline is
% \baselineskip+\parskip.
% The \trivlist is used to avoid possible "too deeply nested" error.
\itemsep \z@skip
\topsep \z@skip
\partopsep \z@skip
% trivlist will set \parsep to \parskip (which itself is set to zero above)
% \leftmargin will be set to zero by trivlist
\rightmargin\z@
\parindent \z@% becomes \itemindent. Default zero, but perhaps overwritten.
\trivlist\item\relax
\ifspx@inframed\setbox\sphinxVerbatim@ContentsBox\vbox\bgroup
\@setminipage\hsize\linewidth
% use bulk of minipage paragraph shape restores (this is needed
% in indented contexts, at least for some)
\textwidth\hsize \columnwidth\hsize \@totalleftmargin\z@
\leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip
\else
\ifsphinxverbatimwithminipage\noindent\begin{minipage}{\linewidth}\fi
\MakeFramed {% adapted over from framed.sty's snugshade environment
\advance\hsize-\width\@totalleftmargin\z@\linewidth\hsize\@setminipage
}%
\fi
% For grid placement from \strut's in \FancyVerbFormatLine
\lineskip\z@skip
% active comma should not be overwritten by \@noligs
\ifspx@opt@verbatimwrapslines
\let\verbatim@nolig@list \sphinx@verbatim@nolig@list
\fi
% will fetch its optional arguments if any
\OriginalVerbatim
}
{%
\endOriginalVerbatim
\ifspx@inframed
\egroup % finish \sphinxVerbatim@ContentsBox vbox
\nobreak % update page totals
\ifdim\dimexpr\ht\sphinxVerbatim@ContentsBox+
\dp\sphinxVerbatim@ContentsBox+
\ht\sphinxVerbatim@TitleBox+
\dp\sphinxVerbatim@TitleBox+
2\fboxsep+2\fboxrule+
% try to account for external frame parameters
\FrameSep+\FrameRule+
% Usage here of 2 baseline distances is empirical.
% In border case where code-block fits barely in remaining space,
% it gets framed and looks good but the outer frame may continue
% on top of next page and give (if no contents after code-block)
% an empty framed line, as testing showed.
2\baselineskip+
% now add all to accumulated page totals and compare to \pagegoal
\pagetotal+\pagedepth>\pagegoal
% long contents: do not \MakeFramed. Do make a caption (either before or
% after) if title exists. Continuation hints across pagebreaks dropped.
% FIXME? a bottom caption may end up isolated at top of next page
% (no problem with a top caption, which is default)
\spx@opt@verbatimwithframefalse
\def\sphinxVerbatim@Title{\noindent\box\sphinxVerbatim@TitleBox\par}%
\sphinxVerbatim@Before
\noindent\unvbox\sphinxVerbatim@ContentsBox\par
\sphinxVerbatim@After
\else
% short enough contents: use \MakeFramed. As it is nested, this requires
% minipage encapsulation.
\noindent\begin{minipage}{\linewidth}%
\MakeFramed {% Use it now with the fetched contents
\advance\hsize-\width\@totalleftmargin\z@\linewidth\hsize\@setminipage
}%
\unvbox\sphinxVerbatim@ContentsBox
% some of this may be superfluous:
\par\unskip\@minipagefalse\endMakeFramed
\end{minipage}%
\fi
\else % non-nested \MakeFramed
\par\unskip\@minipagefalse\endMakeFramed % from framed.sty snugshade
\ifsphinxverbatimwithminipage\end{minipage}\fi
\fi
\endtrivlist
}
\newenvironment {sphinxVerbatimNoFrame}
{\spx@opt@verbatimwithframefalse
\VerbatimEnvironment
\begin{sphinxVerbatim}}
{\end{sphinxVerbatim}}
\newenvironment {sphinxVerbatimintable}
{% don't use a frame if in a table cell
\spx@opt@verbatimwithframefalse
\sphinxverbatimwithminipagetrue
% the literal block caption uses \sphinxcaption which is wrapper of \caption,
% but \caption must be modified because longtable redefines it to work only
% for the own table caption, and tabulary has multiple passes
\let\caption\sphinxfigcaption
% reduce above caption skip
\def\spx@abovecaptionskip{\sphinxverbatimsmallskipamount}%
\VerbatimEnvironment
\begin{sphinxVerbatim}}
{\end{sphinxVerbatim}}
%% PARSED LITERALS
% allow long lines to wrap like they do in code-blocks
% this should be kept in sync with definitions in sphinx.util.texescape
\newcommand*\sphinxbreaksattexescapedchars{%
\def\do##1##2% put potential break point before character
{\def##1{\discretionary{}{\sphinxafterbreak\char`##2}{\char`##2}}}%
\do\{\{\do\textless\<\do\#\#\do\%\%\do\$\$% {, <, #, %, $
\def\do##1##2% put potential break point after character
{\def##1{\discretionary{\char`##2}{\sphinxafterbreak}{\char`##2}}}%
\do\_\_\do\}\}\do\textasciicircum\^\do\&\&% _, }, ^, &,
\do\textgreater\>\do\textasciitilde\~% >, ~
\do\textbackslash\\% \
}
\newcommand*\sphinxbreaksviaactiveinparsedliteral{%
\sphinxbreaksviaactive % by default handles . , ; ? ! /
\lccode`\~`\~ %
% update \dospecials as it is used by \url
% but deactivation will already have been done hence this is unneeded:
% \expandafter\def\expandafter\dospecials\expandafter{\dospecials
% \sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist\do\-}%
}
\newcommand*\sphinxbreaksatspaceinparsedliteral{%
\lccode`~32 \lowercase{\let~}\spx@verbatim@space\lccode`\~`\~
}
\newcommand*{\sphinxunactivateextras}{\let\do\@makeother
\sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist}%
% the \catcode13=5\relax (deactivate end of input lines) is left to callers
\newcommand*{\sphinxunactivateextrasandspace}{\catcode32=10\relax
\sphinxunactivateextras}%
% alltt uses a monospace font and linebreaks at dashes (which are escaped
% to \sphinxhyphen{} which expands to -\kern\z@) are inhibited with pdflatex.
% Not with xelatex (cf \defaultfontfeatures in latex writer), so:
\newcommand*{\sphinxhypheninparsedliteral}{\sphinxhyphennobreak}
% now for the modified alltt environment
\newenvironment{sphinxalltt}
{% at start of next line to workaround Emacs/AUCTeX issue with this file
\begin{alltt}%
\ifspx@opt@parsedliteralwraps
\sbox\sphinxcontinuationbox {\spx@opt@verbatimcontinued}%
\sbox\sphinxvisiblespacebox {\spx@opt@verbatimvisiblespace}%
\let\sphinxhyphen\sphinxhypheninparsedliteral
\sphinxbreaksattexescapedchars
\sphinxbreaksviaactiveinparsedliteral
\sphinxbreaksatspaceinparsedliteral
% alltt takes care of the ' as derivative ("prime") in math mode
\everymath\expandafter{\the\everymath\sphinxunactivateextrasandspace
\catcode`\<=12\catcode`\>=12\catcode`\^=7\catcode`\_=8 }%
% not sure if displayed math (align,...) can end up in parsed-literal, anyway
\everydisplay\expandafter{\the\everydisplay
\catcode13=5 \sphinxunactivateextrasandspace
\catcode`\<=12\catcode`\>=12\catcode`\^=7\catcode`\_=8 }%
\fi }
{\end{alltt}}
%% INLINE MARK-UP
%
% Protect \href's first argument in contexts such as sphinxalltt (or
% \sphinxcode). Sphinx uses \#, \%, \& ... always inside \sphinxhref.
\protected\def\sphinxhref#1#2{{%
\sphinxunactivateextrasandspace % never do \scantokens with active space!
% for the \endlinechar business, https://github.com/latex3/latex2e/issues/286
\endlinechar\m@ne\everyeof{{\endlinechar13 #2}}% keep catcode regime for #2
\scantokens{\href{#1}}% normalise it for #1 during \href expansion
}}
% Same for \url. And also \nolinkurl for coherence.
\protected\def\sphinxurl#1{{%
\sphinxunactivateextrasandspace\everyeof{}% (<- precaution for \scantokens)
\endlinechar\m@ne\scantokens{\url{#1}}%
}}
\protected\def\sphinxnolinkurl#1{{%
\sphinxunactivateextrasandspace\everyeof{}%
\endlinechar\m@ne\scantokens{\nolinkurl{#1}}%
}}
% \sphinxupquote
% to obtain straight quotes we execute \@noligs as patched by upquote, and
% \scantokens is needed in cases where it would be too late for the macro to
% first set catcodes and then fetch its argument. We also make the contents
% breakable at non-escaped . , ; ? ! / using \sphinxbreaksviaactive,
% and also at \ character (which is escaped to \textbackslash{}).
\protected\def\sphinxtextbackslashbreakbefore
{\discretionary{}{\sphinxafterbreak\sphinx@textbackslash}{\sphinx@textbackslash}}
\protected\def\sphinxtextbackslashbreakafter
{\discretionary{\sphinx@textbackslash}{\sphinxafterbreak}{\sphinx@textbackslash}}
\let\sphinxtextbackslash\sphinxtextbackslashbreakafter
% - is escaped to \sphinxhyphen{} and this default ensures no linebreak
% behaviour (also with a non monospace font, or with xelatex)
\newcommand*{\sphinxhyphenininlineliteral}{\sphinxhyphennobreak}
% the macro must be protected if it ends up used in moving arguments,
% in 'alltt' \@noligs is done already, and the \scantokens must be avoided.
\protected\def\sphinxupquote#1{{\def\@tempa{alltt}%
\ifx\@tempa\@currenvir\else
\let\sphinxhyphen\sphinxhyphenininlineliteral
\ifspx@opt@inlineliteralwraps
% break at . , ; ? ! /
\sphinxbreaksviaactive
% break also at \
\setbox8=\hbox{\textbackslash}%
\def\sphinx@textbackslash{\copy8}%
\let\textbackslash\sphinxtextbackslash
% by default, no continuation symbol on next line but may be added
\let\sphinxafterbreak\sphinxafterbreakofinlineliteral
% do not overwrite the comma set-up
\let\verbatim@nolig@list\sphinx@literal@nolig@list
\fi
% fix a space-gobbling issue due to LaTeX's original \do@noligs
% TODO: using \@noligs as patched by upquote.sty is now unneeded because
% either ` and ' are escaped (non-unicode engines) or they don't build
% ligatures (unicode engines). Thus remove this and unify handling of `, <, >,
% ' and - with the characters . , ; ? ! / as handled via
% \sphinxbreaksviaactive.
% Hence \sphinx@do@noligs will be removed, or rather replaced with code
% inserting discretionaries, as they allow a continuation symbol on start of
% next line to achieve common design with code-blocks.
\let\do@noligs\sphinx@do@noligs
\@noligs\endlinechar\m@ne\everyeof{}% (<- in case inside \sphinxhref)
\expandafter\scantokens
\fi {{#1}}}}% extra brace pair to fix end-space gobbling issue...
\def\sphinx@do@noligs #1{\catcode`#1\active\begingroup\lccode`\~`#1\relax
\lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1 }}}
\def\sphinx@literal@nolig@list {\do\`\do\<\do\>\do\'\do\-}%
\let\sphinxafterbreakofinlineliteral\empty
\endinput

122
sphinxlatexnumfig.sty Normal file
View File

@ -0,0 +1,122 @@
%% NUMBERING OF FIGURES, TABLES, AND LITERAL BLOCKS
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexnumfig.sty}[2021/01/27 numbering]
% Requires: remreset (old LaTeX only)
% relates to numfig and numfig_secnum_depth configuration variables
% LaTeX 2018-04-01 and later provides \@removefromreset
\ltx@ifundefined{@removefromreset}
{\RequirePackage{remreset}}
{}% avoid warning
% Everything is delayed to \begin{document} to allow hyperref patches into
% \newcounter to solve duplicate label problems for internal hyperlinks to
% code listings (literalblock counter). User or extension re-definitions of
% \theliteralblock, et al., thus have also to be delayed. (changed at 3.5.0)
\AtBeginDocument{%
\ltx@ifundefined{c@chapter}
{\newcounter{literalblock}}%
{\newcounter{literalblock}[chapter]%
\def\theliteralblock{\ifnum\c@chapter>\z@\arabic{chapter}.\fi
\arabic{literalblock}}%
}%
\ifspx@opt@nonumfigreset
\ltx@ifundefined{c@chapter}{}{%
\@removefromreset{figure}{chapter}%
\@removefromreset{table}{chapter}%
\@removefromreset{literalblock}{chapter}%
\ifspx@opt@mathnumfig
\@removefromreset{equation}{chapter}%
\fi
}%
\def\thefigure{\arabic{figure}}%
\def\thetable {\arabic{table}}%
\def\theliteralblock{\arabic{literalblock}}%
\ifspx@opt@mathnumfig
\def\theequation{\arabic{equation}}%
\fi
\else
\let\spx@preAthefigure\@empty
\let\spx@preBthefigure\@empty
% \ifspx@opt@usespart % <-- LaTeX writer could pass such a 'usespart' boolean
% % as sphinx.sty package option
% If document uses \part, (triggered in Sphinx by latex_toplevel_sectioning)
% LaTeX core per default does not reset chapter or section
% counters at each part.
% But if we modify this, we need to redefine \thechapter, \thesection to
% include the part number and this will cause problems in table of contents
% because of too wide numbering. Simplest is to do nothing.
% \fi
\ifnum\spx@opt@numfigreset>0
\ltx@ifundefined{c@chapter}
{}
{\g@addto@macro\spx@preAthefigure{\ifnum\c@chapter>\z@\arabic{chapter}.}%
\g@addto@macro\spx@preBthefigure{\fi}}%
\fi
\ifnum\spx@opt@numfigreset>1
\@addtoreset{figure}{section}%
\@addtoreset{table}{section}%
\@addtoreset{literalblock}{section}%
\ifspx@opt@mathnumfig
\@addtoreset{equation}{section}%
\fi%
\g@addto@macro\spx@preAthefigure{\ifnum\c@section>\z@\arabic{section}.}%
\g@addto@macro\spx@preBthefigure{\fi}%
\fi
\ifnum\spx@opt@numfigreset>2
\@addtoreset{figure}{subsection}%
\@addtoreset{table}{subsection}%
\@addtoreset{literalblock}{subsection}%
\ifspx@opt@mathnumfig
\@addtoreset{equation}{subsection}%
\fi%
\g@addto@macro\spx@preAthefigure{\ifnum\c@subsection>\z@\arabic{subsection}.}%
\g@addto@macro\spx@preBthefigure{\fi}%
\fi
\ifnum\spx@opt@numfigreset>3
\@addtoreset{figure}{subsubsection}%
\@addtoreset{table}{subsubsection}%
\@addtoreset{literalblock}{subsubsection}%
\ifspx@opt@mathnumfig
\@addtoreset{equation}{subsubsection}%
\fi%
\g@addto@macro\spx@preAthefigure{\ifnum\c@subsubsection>\z@\arabic{subsubsection}.}%
\g@addto@macro\spx@preBthefigure{\fi}%
\fi
\ifnum\spx@opt@numfigreset>4
\@addtoreset{figure}{paragraph}%
\@addtoreset{table}{paragraph}%
\@addtoreset{literalblock}{paragraph}%
\ifspx@opt@mathnumfig
\@addtoreset{equation}{paragraph}%
\fi%
\g@addto@macro\spx@preAthefigure{\ifnum\c@subparagraph>\z@\arabic{subparagraph}.}%
\g@addto@macro\spx@preBthefigure{\fi}%
\fi
\ifnum\spx@opt@numfigreset>5
\@addtoreset{figure}{subparagraph}%
\@addtoreset{table}{subparagraph}%
\@addtoreset{literalblock}{subparagraph}%
\ifspx@opt@mathnumfig
\@addtoreset{equation}{subparagraph}%
\fi%
\g@addto@macro\spx@preAthefigure{\ifnum\c@subsubparagraph>\z@\arabic{subsubparagraph}.}%
\g@addto@macro\spx@preBthefigure{\fi}%
\fi
\expandafter\g@addto@macro
\expandafter\spx@preAthefigure\expandafter{\spx@preBthefigure}%
\let\thefigure\spx@preAthefigure
\let\thetable\spx@preAthefigure
\let\theliteralblock\spx@preAthefigure
\g@addto@macro\thefigure{\arabic{figure}}%
\g@addto@macro\thetable{\arabic{table}}%
\g@addto@macro\theliteralblock{\arabic{literalblock}}%
\ifspx@opt@mathnumfig
\let\theequation\spx@preAthefigure
\g@addto@macro\theequation{\arabic{equation}}%
\fi
\fi
}% end of big \AtBeginDocument
\endinput

215
sphinxlatexobjects.sty Normal file
View File

@ -0,0 +1,215 @@
%% MODULE RELEASE DATA AND OBJECT DESCRIPTIONS
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexobjects.sty}[2021/12/05 documentation environments]
% Provides support for this output mark-up from Sphinx latex writer:
%
% - environments
%
% - fulllineitems
% - productionlist
% - optionlist
% - DUlineblock (also "lineblock")
%
% - macros
%
% - \DUrole
% - various legacy support macros related to author and release
% data of documented objects and modules.
% \moduleauthor{name}{email}
\newcommand{\moduleauthor}[2]{}
% \sectionauthor{name}{email}
\newcommand{\sectionauthor}[2]{}
% Allow the release number to be specified independently of the
% \date{}. This allows the date to reflect the document's date and
% release to specify the release that is documented.
%
\newcommand{\py@release}{\releasename\space\version}
\newcommand{\version}{}% part of \py@release, used by title page and headers
% \releaseinfo is used on titlepage (sphinxmanual.cls, sphinxhowto.cls)
\newcommand{\releaseinfo}{}
\newcommand{\setreleaseinfo}[1]{\renewcommand{\releaseinfo}{#1}}
% this is inserted via template and #1=release config variable
\newcommand{\release}[1]{\renewcommand{\version}{#1}}
% this is defined by template to 'releasename' latex_elements key
\newcommand{\releasename}{}
% Fix issue in case release and releasename deliberately left blank
\newcommand{\sphinxheadercomma}{, }% used in fancyhdr header definition
\newcommand{\sphinxifemptyorblank}[1]{%
% test after one expansion of macro #1 if contents is empty or spaces
\if&\expandafter\@firstofone\detokenize\expandafter{#1}&%
\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}%
\AtBeginDocument {%
\sphinxifemptyorblank{\releasename}
{\sphinxifemptyorblank{\version}{\let\sphinxheadercomma\empty}{}}
{}%
}%
% Allow specification of the author's address separately from the
% author's name. This can be used to format them differently, which
% is a good thing.
%
\newcommand{\py@authoraddress}{}
\newcommand{\authoraddress}[1]{\renewcommand{\py@authoraddress}{#1}}
% {fulllineitems} is the main environment for object descriptions.
%
% With 4.0.0 \pysigline (and \pysiglinewithargsret), used in a fulllineitems
% environment the #1 will already be of the width which is computed here, i.e.
% the available width on line, so the \makebox becomes a bit superfluous
\newcommand{\py@itemnewline}[1]{% macro used as \makelabel in fulllineitems
% Memo: this presupposes \itemindent is 0pt
\kern\labelsep % because \@labels core latex box does \hskip-\labelsep
\makebox[\dimexpr\linewidth+\labelwidth\relax][l]{#1}%
\kern-\labelsep % because at end of \@labels box there is \hskip\labelsep
}
\newenvironment{fulllineitems}{%
\begin{list}{}{\labelwidth \leftmargin
\rightmargin \z@ \topsep -\parskip \partopsep \parskip
\itemsep -\parsep
\let\makelabel=\py@itemnewline}%
}{\end{list}}
% Signatures, possibly multi-line
%
\newlength{\py@argswidth}
\newcommand{\py@sigparams}[2]{%
% The \py@argswidth has been computed in \pysiglinewithargsret to make this
% occupy full available width on line.
\parbox[t]{\py@argswidth}{\raggedright #1\sphinxcode{)}#2\strut}%
% final strut is to help get correct vertical separation in case of multi-line
% box with the item contents.
}
\newcommand{\pysigline}[1]{%
% the \py@argswidth is available we use it despite its name (no "args" here)
% the \relax\relax is because \py@argswidth is a "skip" variable and the first
% \relax only ends its "dimen" part
\py@argswidth=\dimexpr\linewidth+\labelwidth\relax\relax
\item[{\parbox[t]{\py@argswidth}{\raggedright #1\strut}}]
\futurelet\sphinx@token\pysigline@preparevspace@i
}
\newcommand{\pysiglinewithargsret}[3]{%
\settowidth{\py@argswidth}{#1\sphinxcode{(}}%
\py@argswidth=\dimexpr\linewidth+\labelwidth-\py@argswidth\relax\relax
\item[{#1\sphinxcode{(}\py@sigparams{#2}{#3}\strut}]
\futurelet\sphinx@token\pysigline@preparevspace@i
}
\def\pysigline@preparevspace@i{%
\ifx\sphinx@token\@sptoken
\expandafter\pysigline@preparevspace@again
\else\expandafter\pysigline@preparevspace@ii
\fi
}
\@firstofone{\def\pysigline@preparevspace@again} {\futurelet\sphinx@token\pysigline@preparevspace@i}
\long\def\pysigline@preparevspace@ii#1{%
\ifx\sphinx@token\bgroup\expandafter\@firstoftwo
\else
\ifx\sphinx@token\phantomsection
\else
% this strange incantation is because at its root LaTeX in fact did not
% imagine a multi-line label, it is always wrapped in a horizontal box at core
% LaTeX level and we have to find tricks to get correct interline distances.
% It interacts badly with a follow-up \phantomsection hence the test above
\leavevmode\par\nobreak\vskip-\parskip\prevdepth\dp\strutbox
\fi
\expandafter\@secondoftwo
\fi
{{#1}}{#1}%
}
\newcommand{\pysigstartmultiline}{%
\def\pysigstartmultiline{\vskip\smallskipamount\parskip\z@skip\itemsep\z@skip}%
\edef\pysigstopmultiline
{\noexpand\leavevmode\parskip\the\parskip\relax\itemsep\the\itemsep\relax}%
\parskip\z@skip\itemsep\z@skip
}
% Production lists
%
\newenvironment{productionlist}{%
% \def\sphinxoptional##1{{\Large[}##1{\Large]}}
\def\production##1##2{\\\sphinxcode{\sphinxupquote{##1}}&::=&\sphinxcode{\sphinxupquote{##2}}}%
\def\productioncont##1{\\& &\sphinxcode{\sphinxupquote{##1}}}%
\parindent=2em
\indent
\setlength{\LTpre}{0pt}%
\setlength{\LTpost}{0pt}%
\begin{longtable}[l]{lcl}
}{%
\end{longtable}
}
% Definition lists; requested by AMK for HOWTO documents. Probably useful
% elsewhere as well, so keep in in the general style support.
%
\newenvironment{definitions}{%
\begin{description}%
\def\term##1{\item[{##1}]\mbox{}\\*[0mm]}%
}{%
\end{description}%
}
%% FROM DOCTUTILS LATEX WRITER
%
% The following is stuff copied from docutils' latex writer.
%
\newcommand{\optionlistlabel}[1]{\normalfont\bfseries #1 \hfill}% \bf deprecated
\newenvironment{optionlist}[1]
{\begin{list}{}
{\setlength{\labelwidth}{#1}
\setlength{\rightmargin}{1cm}
\setlength{\leftmargin}{\rightmargin}
\addtolength{\leftmargin}{\labelwidth}
\addtolength{\leftmargin}{\labelsep}
\renewcommand{\makelabel}{\optionlistlabel}}
}{\end{list}}
\newlength{\lineblockindentation}
\setlength{\lineblockindentation}{2.5em}
\newenvironment{lineblock}[1]
{\begin{list}{}
{\setlength{\partopsep}{\parskip}
\addtolength{\partopsep}{\baselineskip}
\topsep0pt\itemsep0.15\baselineskip\parsep0pt
\leftmargin#1\relax}
\raggedright}
{\end{list}}
% From docutils.writers.latex2e
% inline markup (custom roles)
% \DUrole{#1}{#2} tries \DUrole#1{#2}
\providecommand*{\DUrole}[2]{%
\ifcsname DUrole\detokenize{#1}\endcsname
\csname DUrole\detokenize{#1}\endcsname{#2}%
\else% backwards compatibility: try \docutilsrole#1{#2}
\ifcsname docutilsrole\detokenize{#1}\endcsname
\csname docutilsrole\detokenize{#1}\endcsname{#2}%
\else
#2%
\fi
\fi
}
\providecommand*{\DUprovidelength}[2]{%
\ifdefined#1\else\newlength{#1}\setlength{#1}{#2}\fi
}
\DUprovidelength{\DUlineblockindent}{2.5em}
\ifdefined\DUlineblock\else
\newenvironment{DUlineblock}[1]{%
\list{}{\setlength{\partopsep}{\parskip}
\addtolength{\partopsep}{\baselineskip}
\setlength{\topsep}{0pt}
\setlength{\itemsep}{0.15\baselineskip}
\setlength{\parsep}{0pt}
\setlength{\leftmargin}{#1}}
\raggedright
}
{\endlist}
\fi
\endinput

100
sphinxlatexshadowbox.sty Normal file
View File

@ -0,0 +1,100 @@
%% TOPIC AND CONTENTS BOXES
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexshadowbox.sty}[2021/01/27 sphinxShadowBox]
% Provides support for this output mark-up from Sphinx latex writer:
%
% - sphinxShadowBox (environment)
%
% Dependencies (they do not need to be defined at time of loading):
%
% - of course the various colour and dimension options handled via sphinx.sty
% - dimension register \spx@image@maxheight from sphinxlatexgraphics.sty
% - \savenotes/\spewnotes from sphinxpackagefootnote
% - \ifspx@inframed defined in sphinx.sty
%
% Requires:
\RequirePackage{framed}
% Again based on use of "framed.sty", this allows breakable framed boxes.
\long\def\spx@ShadowFBox#1{%
\leavevmode\begingroup
% first we frame the box #1
\setbox\@tempboxa
\hbox{\vrule\@width\sphinxshadowrule
\vbox{\hrule\@height\sphinxshadowrule
\kern\sphinxshadowsep
\hbox{\kern\sphinxshadowsep #1\kern\sphinxshadowsep}%
\kern\sphinxshadowsep
\hrule\@height\sphinxshadowrule}%
\vrule\@width\sphinxshadowrule}%
% Now we add the shadow, like \shadowbox from fancybox.sty would do
\dimen@\dimexpr.5\sphinxshadowrule+\sphinxshadowsize\relax
\hbox{\vbox{\offinterlineskip
\hbox{\copy\@tempboxa\kern-.5\sphinxshadowrule
% add shadow on right side
\lower\sphinxshadowsize
\hbox{\vrule\@height\ht\@tempboxa \@width\dimen@}%
}%
\kern-\dimen@ % shift back vertically to bottom of frame
% and add shadow at bottom
\moveright\sphinxshadowsize
\vbox{\hrule\@width\wd\@tempboxa \@height\dimen@}%
}%
% move left by the size of right shadow so shadow adds no width
\kern-\sphinxshadowsize
}%
\endgroup
}
% use framed.sty to allow page breaks in frame+shadow
% works well inside Lists and Quote-like environments
% produced by ``topic'' directive (or local contents)
% could nest if LaTeX writer authorized it
\newenvironment{sphinxShadowBox}
{\def\FrameCommand {\spx@ShadowFBox }%
\advance\spx@image@maxheight
-\dimexpr2\sphinxshadowrule
+2\sphinxshadowsep
+\sphinxshadowsize
+\baselineskip\relax
% configure framed.sty not to add extra vertical spacing
\ltx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}%
% the \trivlist will add the vertical spacing on top and bottom which is
% typical of center environment as used in Sphinx <= 1.4.1
% the \noindent has the effet of an extra blank line on top, to
% imitate closely the layout from Sphinx <= 1.4.1; the \FrameHeightAdjust
% will put top part of frame on this baseline.
\def\FrameHeightAdjust {\baselineskip}%
% use package footnote to handle footnotes
\savenotes
\trivlist\item\noindent
% use a minipage if we are already inside a framed environment
\ifspx@inframed\begin{minipage}{\linewidth}\fi
\MakeFramed {\spx@inframedtrue
% framed.sty puts into "\width" the added width (=2shadowsep+2shadowrule)
% adjust \hsize to what the contents must use
\advance\hsize-\width
% adjust LaTeX parameters to behave properly in indented/quoted contexts
\FrameRestore
% typeset the contents as in a minipage (Sphinx <= 1.4.1 used a minipage and
% itemize/enumerate are therein typeset more tightly, we want to keep
% that). We copy-paste from LaTeX source code but don't do a real minipage.
\@pboxswfalse
\let\@listdepth\@mplistdepth \@mplistdepth\z@
\@minipagerestore
\@setminipage
}%
}%
{% insert the "endminipage" code
\par\unskip
\@minipagefalse
\endMakeFramed
\ifspx@inframed\end{minipage}\fi
\endtrivlist
% output the stored footnotes
\spewnotes
}
\endinput

View File

@ -0,0 +1,83 @@
%% TITLES
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexstyleheadings.sty}[2021/01/27 headings]
\RequirePackage[nobottomtitles*]{titlesec}
\@ifpackagelater{titlesec}{2016/03/15}%
{\@ifpackagelater{titlesec}{2016/03/21}%
{}%
{\newif\ifsphinx@ttlpatch@ok
\IfFileExists{etoolbox.sty}{%
\RequirePackage{etoolbox}%
\patchcmd{\ttlh@hang}{\parindent\z@}{\parindent\z@\leavevmode}%
{\sphinx@ttlpatch@oktrue}{}%
\ifsphinx@ttlpatch@ok
\patchcmd{\ttlh@hang}{\noindent}{}{}{\sphinx@ttlpatch@okfalse}%
\fi
}{}%
\ifsphinx@ttlpatch@ok
\typeout{^^J Package Sphinx Info: ^^J
**** titlesec 2.10.1 successfully patched for bugfix ****^^J}%
\else
\AtEndDocument{\PackageWarningNoLine{sphinx}{^^J%
******** titlesec 2.10.1 has a bug, (section numbers disappear) ......|^^J%
******** and Sphinx could not patch it, perhaps because your local ...|^^J%
******** copy is already fixed without a changed release date. .......|^^J%
******** If not, you must update titlesec! ...........................|}}%
\fi
}%
}{}
% Augment the sectioning commands used to get our own font family in place,
% and reset some internal data items (\titleformat from titlesec package)
\titleformat{\section}{\Large\py@HeaderFamily}%
{\py@TitleColor\thesection}{0.5em}{\py@TitleColor}
\titleformat{\subsection}{\large\py@HeaderFamily}%
{\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}
\titleformat{\subsubsection}{\py@HeaderFamily}%
{\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}
% By default paragraphs (and subsubsections) will not be numbered because
% sphinxmanual.cls and sphinxhowto.cls set secnumdepth to 2
\titleformat{\paragraph}{\py@HeaderFamily}%
{\py@TitleColor\theparagraph}{0.5em}{\py@TitleColor}
\titleformat{\subparagraph}{\py@HeaderFamily}%
{\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor}
% Since Sphinx 1.5, users should use HeaderFamily key to 'sphinxsetup' rather
% than defining their own \py@HeaderFamily command (which is still possible).
% Memo: \py@HeaderFamily is also used by \maketitle as defined in
% sphinxmanual.cls/sphinxhowto.cls
\newcommand{\py@HeaderFamily}{\spx@opt@HeaderFamily}
% This sets up the fancy chapter headings that make the documents look
% at least a little better than the usual LaTeX output.
\@ifpackagewith{fncychap}{Bjarne}{
\ChNameVar {\raggedleft\normalsize \py@HeaderFamily}
\ChNumVar {\raggedleft\Large \py@HeaderFamily}
\ChTitleVar{\raggedleft\Large \py@HeaderFamily}
% This creates (numbered) chapter heads without the leading \vspace*{}:
\def\@makechapterhead#1{%
{\parindent \z@ \raggedright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\DOCH
\fi
\fi
\interlinepenalty\@M
\if@mainmatter
\DOTI{#1}%
\else%
\DOTIS{#1}%
\fi
}}
}{}% <-- "false" clause of \@ifpackagewith
% fix fncychap's bug which uses prematurely the \textwidth value
\@ifpackagewith{fncychap}{Bjornstrup}
{\AtBeginDocument{\mylen\textwidth\advance\mylen-2\myhi}}%
{}% <-- "false" clause of \@ifpackagewith
\endinput

79
sphinxlatexstylepage.sty Normal file
View File

@ -0,0 +1,79 @@
%% PAGE STYLING
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexstylepage.sty}[2021/01/27 page styling]
% Separate paragraphs by space by default.
\IfFileExists{parskip-2001-04-09.sty}% since September 2018 TeXLive update
% new parskip.sty, but let it rollback to old one.
% hopefully TeX installation not broken and LaTeX kernel not too old
{\RequirePackage{parskip}[=v1]}
% standard one from 1989. Admittedly \section of article/book gives possibly
% anomalous spacing, but we can't require September 2018 release for some time.
{\RequirePackage{parskip}}
% Style parameters and macros used by most documents here
\raggedbottom
\sloppy
\hbadness = 5000 % don't print trivial gripes
% Require package fancyhdr except under memoir class
\@ifclassloaded{memoir}{}{\RequirePackage{fancyhdr}}
% Use \pagestyle{normal} as the primary pagestyle for text.
% Redefine the 'normal' header/footer style when using "fancyhdr" package:
\@ifpackageloaded{fancyhdr}{%
\ltx@ifundefined{c@chapter}
{% no \chapter, "howto" (non-Japanese) docclass
\fancypagestyle{plain}{
\fancyhf{}
\fancyfoot[C]{{\py@HeaderFamily\thepage}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
}
% Same as 'plain', this way we can use it in template
% FIXME: shouldn't this have a running header with Name and Release like 'manual'?
\fancypagestyle{normal}{
\fancyhf{}
\fancyfoot[C]{{\py@HeaderFamily\thepage}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
}
}%
{% classes with \chapter command
\fancypagestyle{normal}{
\fancyhf{}
\fancyfoot[RO]{{\py@HeaderFamily\thepage}}
\fancyfoot[LO]{{\py@HeaderFamily\nouppercase{\rightmark}}}
\fancyhead[RO]{{\py@HeaderFamily \@title\sphinxheadercomma\py@release}}
\if@twoside
\fancyfoot[LE]{{\py@HeaderFamily\thepage}}
\fancyfoot[RE]{{\py@HeaderFamily\nouppercase{\leftmark}}}
\fancyhead[LE]{{\py@HeaderFamily \@title\sphinxheadercomma\py@release}}
\fi
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
% define chaptermark with \@chappos when \@chappos is available for Japanese
\ltx@ifundefined{@chappos}{}
{\def\chaptermark##1{\markboth{\@chapapp\space\thechapter\space\@chappos\space ##1}{}}}
}
% Update the plain style so we get the page number & footer line,
% but not a chapter or section title. This is to keep the first
% page of a chapter `clean.'
\fancypagestyle{plain}{
\fancyhf{}
\fancyfoot[RO]{{\py@HeaderFamily\thepage}}
\if@twoside\fancyfoot[LE]{{\py@HeaderFamily\thepage}}\fi
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0.4pt}
}
}
}
{% no fancyhdr: memoir class
% Provide default for 'normal' style simply as an alias of 'plain' style
% This way we can use \pagestyle{normal} in LaTeX template
\def\ps@normal{\ps@plain}
% Users of memoir class are invited to redefine 'normal' style in preamble
}
\endinput

134
sphinxlatexstyletext.sty Normal file
View File

@ -0,0 +1,134 @@
%% TEXT STYLING
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatexstyletext.sty}[2021/12/06 text styling]
% Basically everything here consists of macros which are part of the latex
% markup produced by the Sphinx latex writer
% Some custom font markup commands.
\protected\def\sphinxstrong#1{\textbf{#1}}
\protected\def\sphinxcode#1{\texttt{#1}}
\protected\def\sphinxbfcode#1{\textbf{\sphinxcode{#1}}}
\protected\def\sphinxemail#1{\textsf{#1}}
\protected\def\sphinxtablecontinued#1{\textsf{#1}}
\protected\def\sphinxtitleref#1{\emph{#1}}
\protected\def\sphinxmenuselection#1{\emph{#1}}
\protected\def\sphinxguilabel#1{\emph{#1}}
\protected\def\sphinxkeyboard#1{\sphinxcode{#1}}
\protected\def\sphinxaccelerator#1{\underline{#1}}
\protected\def\sphinxcrossref#1{\emph{#1}}
\protected\def\sphinxtermref#1{\emph{#1}}
% \optional is used for ``[, arg]``, i.e. desc_optional nodes.
\long\protected\def\sphinxoptional#1{%
{\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}}
% additional customizable styling
\def\sphinxstyleindexentry #1{\texttt{#1}}
\def\sphinxstyleindexextra #1{ (\emph{#1})}
\def\sphinxstyleindexpageref #1{, \pageref{#1}}
\def\sphinxstyleindexpagemain#1{\textbf{#1}}
\def\spxentry{\@backslashchar spxentry}% let to \sphinxstyleindexentry in index
\def\spxextra{\@backslashchar spxextra}% let to \sphinxstyleindexextra in index
\def\sphinxstyleindexlettergroup #1%
{{\Large\sffamily#1}\nopagebreak\vspace{1mm}}
\def\sphinxstyleindexlettergroupDefault #1%
{{\Large\sffamily\sphinxnonalphabeticalgroupname}\nopagebreak\vspace{1mm}}
\protected\def\sphinxstyletopictitle #1{\textbf{#1}\par\medskip}
\let\sphinxstylesidebartitle\sphinxstyletopictitle
\protected\def\sphinxstyleothertitle #1{\textbf{#1}}
\protected\def\sphinxstylesidebarsubtitle #1{~\\\textbf{#1} \smallskip}
% \text.. commands do not allow multiple paragraphs
\protected\def\sphinxstyletheadfamily {\sffamily}
\protected\def\sphinxstyleemphasis #1{\emph{#1}}
\protected\def\sphinxstyleliteralemphasis#1{\emph{\sphinxcode{#1}}}
\protected\def\sphinxstylestrong #1{\textbf{#1}}
\protected\def\sphinxstyleliteralstrong#1{\sphinxbfcode{#1}}
\protected\def\sphinxstyleabbreviation #1{\textsc{#1}}
\protected\def\sphinxstyleliteralintitle#1{\sphinxcode{#1}}
\newcommand*\sphinxstylecodecontinued[1]{\footnotesize(#1)}%
\newcommand*\sphinxstylecodecontinues[1]{\footnotesize(#1)}%
% figure legend comes after caption and may contain arbitrary body elements
\newenvironment{sphinxlegend}{\par\small}{\par}
% reduce hyperref "Token not allowed in a PDF string" warnings on PDF builds
\AtBeginDocument{\pdfstringdefDisableCommands{%
% all "protected" macros possibly ending up in section titles should be here
% TODO: examine if \sphinxhref, \sphinxurl, \sphinnolinkurl should be handled
\let\sphinxstyleemphasis \@firstofone
\let\sphinxstyleliteralemphasis \@firstofone
\let\sphinxstylestrong \@firstofone
\let\sphinxstyleliteralstrong \@firstofone
\let\sphinxstyleabbreviation \@firstofone
\let\sphinxstyleliteralintitle \@firstofone
\let\sphinxupquote \@firstofone
\let\sphinxstrong \@firstofone
\let\sphinxcode \@firstofone
\let\sphinxbfcode \@firstofone
\let\sphinxemail \@firstofone
\let\sphinxcrossref \@firstofone
\let\sphinxtermref \@firstofone
\let\sphinxhyphen\sphinxhyphenforbookmarks
}}
% Special characters
%
% The \kern\z@ is to prevent en-dash and em-dash TeX ligatures.
% A linebreak can occur after the dash in regular text (this is
% normal behaviour of "-" in TeX, it is not related to \kern\z@).
%
% Parsed-literals and inline literals also use the \sphinxhyphen
% but linebreaks there are prevented due to monospace font family.
% (xelatex needs a special addition, cf. sphinxlatexliterals.sty)
%
% Inside code-blocks, dashes are escaped via another macro, from
% Pygments latex output (search for \PYGZhy in sphinxlatexliterals.sty),
% and are configured to allow linebreaks despite the monospace font.
% (the #1 swallows the {} from \sphinxhyphen{} mark-up)
\protected\def\sphinxhyphen#1{-\kern\z@}
\protected\def\sphinxhyphennobreak#1{\mbox{-}}
% The {} from texescape mark-up is kept, else -- gives en-dash in PDF bookmark
\def\sphinxhyphenforbookmarks{-}
% For curly braces inside \index macro
\def\sphinxleftcurlybrace{\{}
\def\sphinxrightcurlybrace{\}}
% Declare Unicode characters used by linux tree command to pdflatex utf8/utf8x
\def\spx@bd#1#2{%
\leavevmode
\begingroup
\ifx\spx@bd@height \@undefined\def\spx@bd@height{\baselineskip}\fi
\ifx\spx@bd@width \@undefined\setbox0\hbox{0}\def\spx@bd@width{\wd0 }\fi
\ifx\spx@bd@thickness\@undefined\def\spx@bd@thickness{.6\p@}\fi
\ifx\spx@bd@lower \@undefined\def\spx@bd@lower{\dp\strutbox}\fi
\lower\spx@bd@lower#1{#2}%
\endgroup
}%
\@namedef{sphinx@u2500}% BOX DRAWINGS LIGHT HORIZONTAL
{\spx@bd{\vbox to\spx@bd@height}
{\vss\hrule\@height\spx@bd@thickness
\@width\spx@bd@width\vss}}%
\@namedef{sphinx@u2502}% BOX DRAWINGS LIGHT VERTICAL
{\spx@bd{\hb@xt@\spx@bd@width}
{\hss\vrule\@height\spx@bd@height
\@width \spx@bd@thickness\hss}}%
\@namedef{sphinx@u2514}% BOX DRAWINGS LIGHT UP AND RIGHT
{\spx@bd{\hb@xt@\spx@bd@width}
{\hss\raise.5\spx@bd@height
\hb@xt@\z@{\hss\vrule\@height.5\spx@bd@height
\@width \spx@bd@thickness\hss}%
\vbox to\spx@bd@height{\vss\hrule\@height\spx@bd@thickness
\@width.5\spx@bd@width\vss}}}%
\@namedef{sphinx@u251C}% BOX DRAWINGS LIGHT VERTICAL AND RIGHT
{\spx@bd{\hb@xt@\spx@bd@width}
{\hss
\hb@xt@\z@{\hss\vrule\@height\spx@bd@height
\@width \spx@bd@thickness\hss}%
\vbox to\spx@bd@height{\vss\hrule\@height\spx@bd@thickness
\@width.5\spx@bd@width\vss}}}%
\protected\def\sphinxunichar#1{\@nameuse{sphinx@u#1}}%
% Tell TeX about pathological hyphenation cases:
\hyphenation{Base-HTTP-Re-quest-Hand-ler}
\endinput

481
sphinxlatextables.sty Normal file
View File

@ -0,0 +1,481 @@
%% TABLES (WITH SUPPORT FOR MERGED CELLS OF GENERAL CONTENTS)
%
% change this info string if making any custom modification
\ProvidesFile{sphinxlatextables.sty}[2021/01/27 tables]%
% Provides support for this output mark-up from Sphinx latex writer
% and table templates:
%
% - the tabulary and longtable environments from the eponymous packages
% - the varwidth environment
% - the >{} etc mark-up possible in tabularcolumns is from array package
% which is loaded by longtable and tabulary
% - \X, \Y, T column types; others (L, C, R, J) are from tabulary package
% - \sphinxaftertopcaption
% - \sphinxatlongtableend
% - \sphinxatlongtablestart
% - \sphinxattableend
% - \sphinxattablestart
% - \sphinxcapstartof
% - \sphinxcolwidth
% - \sphinxlongtablecapskipadjust
% - \sphinxmultirow
% - \sphinxstartmulticolumn
% - \sphinxstopmulticolumn
% - \sphinxtablestrut
% - \sphinxthecaptionisattop
% - \sphinxthelongtablecaptionisattop
%
% Executes \RequirePackage for:
%
% - tabulary
% - longtable
% - varwidth
%
% Extends tabulary and longtable via patches and custom macros to support
% merged cells possibly containing code-blocks in complex tables
\RequirePackage{tabulary}
% tabulary has a bug with its re-definition of \multicolumn in its first pass
% which is not \long. But now Sphinx does not use LaTeX's \multicolumn but its
% own macro. Hence we don't even need to patch tabulary. See
% sphinxpackagemulticell.sty
% X or S (Sphinx) may have meanings if some table package is loaded hence
% \X was chosen to avoid possibility of conflict
\newcolumntype{\X}[2]{p{\dimexpr
(\linewidth-\arrayrulewidth)*#1/#2-\tw@\tabcolsep-\arrayrulewidth\relax}}
\newcolumntype{\Y}[1]{p{\dimexpr
#1\dimexpr\linewidth-\arrayrulewidth\relax-\tw@\tabcolsep-\arrayrulewidth\relax}}
% using here T (for Tabulary) feels less of a problem than the X could be
\newcolumntype{T}{J}%
% For tables allowing pagebreaks
\RequirePackage{longtable}
% User interface to set-up whitespace before and after tables:
\newcommand*\sphinxtablepre {0pt}%
\newcommand*\sphinxtablepost{\medskipamount}%
% Space from caption baseline to top of table or frame of literal-block
\newcommand*\sphinxbelowcaptionspace{.5\sphinxbaselineskip}%
% as one can not use \baselineskip from inside longtable (it is zero there)
% we need \sphinxbaselineskip, which defaults to \baselineskip
\def\sphinxbaselineskip{\baselineskip}%
% The following is to ensure that, whether tabular(y) or longtable:
% - if a caption is on top of table:
% a) the space between its last baseline and the top rule of table is
% exactly \sphinxbelowcaptionspace
% b) the space from last baseline of previous text to first baseline of
% caption is exactly \parskip+\baselineskip+ height of a strut.
% c) the caption text will wrap at width \LTcapwidth (4in)
% - make sure this works also if "caption" package is loaded by user
% (with its width or margin option taking place of \LTcapwidth role)
% TODO: obtain same for caption of literal block: a) & c) DONE, b) TO BE DONE
%
% To modify space below such top caption, adjust \sphinxbelowcaptionspace
% To add or remove space above such top caption, adjust \sphinxtablepre:
% notice that \abovecaptionskip, \belowcaptionskip, \LTpre are **ignored**
% A. Table with longtable
\def\sphinxatlongtablestart
{\par
\vskip\parskip
\vskip\dimexpr\sphinxtablepre\relax % adjust vertical position
\vbox{}% get correct baseline from above
\LTpre\z@skip\LTpost\z@skip % set to zero longtable's own skips
\edef\sphinxbaselineskip{\dimexpr\the\dimexpr\baselineskip\relax\relax}%
}%
% Compatibility with caption package
\def\sphinxthelongtablecaptionisattop{%
\spx@ifcaptionpackage{\noalign{\vskip-\belowcaptionskip}}{}%
}%
% Achieves exactly \sphinxbelowcaptionspace below longtable caption
\def\sphinxlongtablecapskipadjust
{\dimexpr-\dp\strutbox
-\spx@ifcaptionpackage{\abovecaptionskip}{\sphinxbaselineskip}%
+\sphinxbelowcaptionspace\relax}%
\def\sphinxatlongtableend{\@nobreakfalse % latex3/latex2e#173
\prevdepth\z@\vskip\sphinxtablepost\relax}%
% B. Table with tabular or tabulary
\def\sphinxattablestart{\par\vskip\dimexpr\sphinxtablepre\relax}%
\let\sphinxattableend\sphinxatlongtableend
% This is used by tabular and tabulary templates
\newcommand*\sphinxcapstartof[1]{%
\vskip\parskip
\vbox{}% force baselineskip for good positioning by capstart of hyperanchor
% hyperref puts the anchor 6pt above this baseline; in case of caption
% this baseline will be \ht\strutbox above first baseline of caption
\def\@captype{#1}%
\capstart
% move back vertically, as tabular (or its caption) will compensate
\vskip-\baselineskip\vskip-\parskip
}%
\def\sphinxthecaptionisattop{% locate it after \sphinxcapstartof
\spx@ifcaptionpackage
{\caption@setposition{t}%
\vskip\baselineskip\vskip\parskip % undo those from \sphinxcapstartof
\vskip-\belowcaptionskip % anticipate caption package skip
% caption package uses a \vbox, not a \vtop, so "single line" case
% gives different result from "multi-line" without this:
\nointerlineskip
}%
{}%
}%
\def\sphinxthecaptionisatbottom{% (not finalized; for template usage)
\spx@ifcaptionpackage{\caption@setposition{b}}{}%
}%
% The aim of \sphinxcaption is to apply to tabular(y) the maximal width
% of caption as done by longtable
\def\sphinxtablecapwidth{\LTcapwidth}%
\newcommand\sphinxcaption{\@dblarg\spx@caption}%
\long\def\spx@caption[#1]#2{%
\noindent\hb@xt@\linewidth{\hss
\vtop{\@tempdima\dimexpr\sphinxtablecapwidth\relax
% don't exceed linewidth for the caption width
\ifdim\@tempdima>\linewidth\hsize\linewidth\else\hsize\@tempdima\fi
% longtable ignores \abovecaptionskip/\belowcaptionskip, so do the same here
\abovecaptionskip\sphinxabovecaptionskip % \z@skip
\belowcaptionskip\sphinxbelowcaptionskip % \z@skip
\caption[{#1}]%
{\strut\ignorespaces#2\ifhmode\unskip\@finalstrut\strutbox\fi}%
}\hss}%
\par\prevdepth\dp\strutbox
}%
\def\sphinxabovecaptionskip{\z@skip}% Do not use! Flagged for removal
\def\sphinxbelowcaptionskip{\z@skip}% Do not use! Flagged for removal
% This wrapper of \abovecaptionskip is used in sphinxVerbatim for top
% caption, and with another value in sphinxVerbatimintable
% TODO: To unify space above caption of a code-block with the one above
% caption of a table/longtable, \abovecaptionskip must not be used
% This auxiliary will get renamed and receive a different meaning
% in future.
\def\spx@abovecaptionskip{\abovecaptionskip}%
% Achieve \sphinxbelowcaptionspace below a caption located above a tabular
% or a tabulary
\newcommand\sphinxaftertopcaption
{%
\spx@ifcaptionpackage
{\par\prevdepth\dp\strutbox\nobreak\vskip-\abovecaptionskip}{\nobreak}%
\vskip\dimexpr\sphinxbelowcaptionspace\relax
\vskip-\baselineskip\vskip-\parskip
}%
% varwidth is crucial for our handling of general contents in merged cells
\RequirePackage{varwidth}
% but addition of a compatibility patch with hyperref is needed
% (tested with varwidth v 0.92 Mar 2009)
\AtBeginDocument {%
\let\@@vwid@Hy@raisedlink\Hy@raisedlink
\long\def\@vwid@Hy@raisedlink#1{\@vwid@wrap{\@@vwid@Hy@raisedlink{#1}}}%
\edef\@vwid@setup{%
\let\noexpand\Hy@raisedlink\noexpand\@vwid@Hy@raisedlink % HYPERREF !
\unexpanded\expandafter{\@vwid@setup}}%
}%
%%%%%%%%%%%%%%%%%%%%%
% --- MULTICOLUMN ---
% standard LaTeX's \multicolumn
% 1. does not allow verbatim contents,
% 2. interacts very poorly with tabulary.
%
% It is needed to write own macros for Sphinx: to allow code-blocks in merged
% cells rendered by tabular/longtable, and to allow multi-column cells with
% paragraphs to be taken into account sanely by tabulary algorithm for column
% widths.
%
% This requires quite a bit of hacking. First, in Sphinx, the multi-column
% contents will *always* be wrapped in a varwidth environment. The issue
% becomes to pass it the correct target width. We must trick tabulary into
% believing the multicolumn is simply separate columns, else tabulary does not
% incorporate the contents in its algorithm. But then we must clear the
% vertical rules...
%
% configuration of tabulary
\setlength{\tymin}{3\fontcharwd\font`0 }% minimal width of "squeezed" columns
\setlength{\tymax}{10000pt}% allow enough room for paragraphs to "compete"
% we need access to tabulary's final computed width. \@tempdima is too volatile
% to hope it has kept tabulary's value when \sphinxcolwidth needs it.
\newdimen\sphinx@TY@tablewidth
\def\tabulary{%
\def\TY@final{\sphinx@TY@tablewidth\@tempdima\tabular}%
\let\endTY@final\endtabular
\TY@tabular}%
% next hack is needed only if user has set latex_use_latex_multicolumn to True:
% it fixes tabulary's bug with \multicolumn defined "short" in first pass. (if
% upstream tabulary adds a \long, our extra one causes no harm)
\def\sphinx@tempa #1\def\multicolumn#2#3#4#5#6#7#8#9\sphinx@tempa
{\def\TY@tab{#1\long\def\multicolumn####1####2####3{\multispan####1\relax}#9}}%
\expandafter\sphinx@tempa\TY@tab\sphinx@tempa
%
% TN. 1: as \omit is never executed, Sphinx multicolumn does not need to worry
% like standard multicolumn about |l| vs l|. On the other hand it assumes
% columns are separated by a | ... (if not it will add extraneous
% \arrayrulewidth space for each column separation in its estimate of available
% width).
%
% TN. 1b: as Sphinx multicolumn uses neither \omit nor \span, it can not
% (easily) get rid of extra macros from >{...} or <{...} between columns. At
% least, it has been made compatible with colortbl's \columncolor.
%
% TN. 2: tabulary's second pass is handled like tabular/longtable's single
% pass, with the difference that we hacked \TY@final to set in
% \sphinx@TY@tablewidth the final target width as computed by tabulary. This is
% needed only to handle columns with a "horizontal" specifier: "p" type columns
% (inclusive of tabulary's LJRC) holds the target column width in the
% \linewidth dimension.
%
% TN. 3: use of \begin{sphinxmulticolumn}...\end{sphinxmulticolumn} mark-up
% would need some hacking around the fact that groups can not span across table
% cells (the code does inserts & tokens, see TN1b). It was decided to keep it
% simple with \sphinxstartmulticolumn...\sphinxstopmulticolumn.
%
% MEMO about nesting: if sphinxmulticolumn is encountered in a nested tabular
% inside a tabulary it will think to be at top level in the tabulary. But
% Sphinx generates no nested tables, and if some LaTeX macro uses internally a
% tabular this will not have a \sphinxstartmulticolumn within it!
%
\def\sphinxstartmulticolumn{%
\ifx\equation$% $ tabulary's first pass
\expandafter\sphinx@TYI@start@multicolumn
\else % either not tabulary or tabulary's second pass
\expandafter\sphinx@start@multicolumn
\fi
}%
\def\sphinxstopmulticolumn{%
\ifx\equation$% $ tabulary's first pass
\expandafter\sphinx@TYI@stop@multicolumn
\else % either not tabulary or tabulary's second pass
\ignorespaces
\fi
}%
\def\sphinx@TYI@start@multicolumn#1{%
% use \gdef always to avoid stack space build up
\gdef\sphinx@tempa{#1}\begingroup\setbox\z@\hbox\bgroup
}%
\def\sphinx@TYI@stop@multicolumn{\egroup % varwidth was used with \tymax
\xdef\sphinx@tempb{\the\dimexpr\wd\z@/\sphinx@tempa}% per column width
\endgroup
\expandafter\sphinx@TYI@multispan\expandafter{\sphinx@tempa}%
}%
\def\sphinx@TYI@multispan #1{%
\kern\sphinx@tempb\ignorespaces % the per column occupied width
\ifnum#1>\@ne % repeat, taking into account subtleties of TeX's & ...
\expandafter\sphinx@TYI@multispan@next\expandafter{\the\numexpr#1-\@ne\expandafter}%
\fi
}%
\def\sphinx@TYI@multispan@next{&\relax\sphinx@TYI@multispan}%
%
% Now the branch handling either the second pass of tabulary or the single pass
% of tabular/longtable. This is the delicate part where we gather the
% dimensions from the p columns either set-up by tabulary or by user p column
% or Sphinx \X, \Y columns. The difficulty is that to get the said width, the
% template must be inserted (other hacks would be horribly complicated except
% if we rewrote crucial parts of LaTeX's \@array !) and we can not do
% \omit\span like standard \multicolumn's easy approach. Thus we must cancel
% the \vrule separators. Also, perhaps the column specifier is of the l, c, r
% type, then we attempt an ad hoc rescue to give varwidth a reasonable target
% width.
\def\sphinx@start@multicolumn#1{%
\gdef\sphinx@multiwidth{0pt}\gdef\sphinx@tempa{#1}\sphinx@multispan{#1}%
}%
\def\sphinx@multispan #1{%
\ifnum#1=\@ne\expandafter\sphinx@multispan@end
\else\expandafter\sphinx@multispan@next
\fi {#1}%
}%
\def\sphinx@multispan@next #1{%
% trick to recognize L, C, R, J or p, m, b type columns
\ifdim\baselineskip>\z@
\gdef\sphinx@tempb{\linewidth}%
\else
% if in an l, r, c type column, try and hope for the best
\xdef\sphinx@tempb{\the\dimexpr(\ifx\TY@final\@undefined\linewidth\else
\sphinx@TY@tablewidth\fi-\arrayrulewidth)/\sphinx@tempa
-\tw@\tabcolsep-\arrayrulewidth\relax}%
\fi
\noindent\kern\sphinx@tempb\relax
\xdef\sphinx@multiwidth
{\the\dimexpr\sphinx@multiwidth+\sphinx@tempb+\tw@\tabcolsep+\arrayrulewidth}%
% hack the \vline and the colortbl macros
\sphinx@hack@vline\sphinx@hack@CT&\relax
% repeat
\expandafter\sphinx@multispan\expandafter{\the\numexpr#1-\@ne}%
}%
% packages like colortbl add group levels, we need to "climb back up" to be
% able to hack the \vline and also the colortbl inserted tokens. This creates
% empty space whether or not the columns were | separated:
\def\sphinx@hack@vline{\ifnum\currentgrouptype=6\relax
\kern\arrayrulewidth\arrayrulewidth\z@\else\aftergroup\sphinx@hack@vline\fi}%
\def\sphinx@hack@CT{\ifnum\currentgrouptype=6\relax
\let\CT@setup\sphinx@CT@setup\else\aftergroup\sphinx@hack@CT\fi}%
% It turns out \CT@row@color is not expanded contrarily to \CT@column@color
% during LaTeX+colortbl preamble preparation, hence it would be possible for
% \sphinx@CT@setup to discard only the column color and choose to obey or not
% row color and cell color. It would even be possible to propagate cell color
% to row color for the duration of the Sphinx multicolumn... the (provisional?)
% choice has been made to cancel the colortbl colours for the multicolumn
% duration.
\def\sphinx@CT@setup #1\endgroup{\endgroup}% hack to remove colour commands
\def\sphinx@multispan@end#1{%
% first, trace back our steps horizontally
\noindent\kern-\dimexpr\sphinx@multiwidth\relax
% and now we set the final computed width for the varwidth environment
\ifdim\baselineskip>\z@
\xdef\sphinx@multiwidth{\the\dimexpr\sphinx@multiwidth+\linewidth}%
\else
\xdef\sphinx@multiwidth{\the\dimexpr\sphinx@multiwidth+
(\ifx\TY@final\@undefined\linewidth\else
\sphinx@TY@tablewidth\fi-\arrayrulewidth)/\sphinx@tempa
-\tw@\tabcolsep-\arrayrulewidth\relax}%
\fi
% we need to remove colour set-up also for last cell of the multi-column
\aftergroup\sphinx@hack@CT
}%
\newcommand*\sphinxcolwidth[2]{%
% this dimension will always be used for varwidth, and serves as maximum
% width when cells are merged either via multirow or multicolumn or both,
% as always their contents is wrapped in varwidth environment.
\ifnum#1>\@ne % multi-column (and possibly also multi-row)
% we wrote our own multicolumn code especially to handle that (and allow
% verbatim contents)
\ifx\equation$%$
\tymax % first pass of tabulary (cf MEMO above regarding nesting)
\else % the \@gobble thing is for compatibility with standard \multicolumn
\sphinx@multiwidth\@gobble{#1/#2}%
\fi
\else % single column multirow
\ifx\TY@final\@undefined % not a tabulary.
\ifdim\baselineskip>\z@
% in a p{..} type column, \linewidth is the target box width
\linewidth
\else
% l, c, r columns. Do our best.
\dimexpr(\linewidth-\arrayrulewidth)/#2-
\tw@\tabcolsep-\arrayrulewidth\relax
\fi
\else % in tabulary
\ifx\equation$%$% first pass
\tymax % it is set to a big value so that paragraphs can express themselves
\else
% second pass.
\ifdim\baselineskip>\z@
\linewidth % in a L, R, C, J column or a p, \X, \Y ...
\else
% we have hacked \TY@final to put in \sphinx@TY@tablewidth the table width
\dimexpr(\sphinx@TY@tablewidth-\arrayrulewidth)/#2-
\tw@\tabcolsep-\arrayrulewidth\relax
\fi
\fi
\fi
\fi
}%
% fallback default in case user has set latex_use_latex_multicolumn to True:
% \sphinxcolwidth will use this only inside LaTeX's standard \multicolumn
\def\sphinx@multiwidth #1#2{\dimexpr % #1 to gobble the \@gobble (!)
(\ifx\TY@final\@undefined\linewidth\else\sphinx@TY@tablewidth\fi
-\arrayrulewidth)*#2-\tw@\tabcolsep-\arrayrulewidth\relax}%
%%%%%%%%%%%%%%%%%%
% --- MULTIROW ---
% standard \multirow
% 1. does not allow verbatim contents,
% 2. does not allow blank lines in its argument,
% 3. its * specifier means to typeset "horizontally" which is very
% bad for paragraph content. 2016 version has = specifier but it
% must be used with p type columns only, else results are bad,
% 4. it requires manual intervention if the contents is too long to fit
% in the asked-for number of rows.
% 5. colour panels (either from \rowcolor or \columncolor) will hide
% the bottom part of multirow text, hence manual tuning is needed
% to put the multirow insertion at the _bottom_.
%
% The Sphinx solution consists in always having contents wrapped
% in a varwidth environment so that it makes sense to estimate how many
% lines it will occupy, and then ensure by insertion of suitable struts
% that the table rows have the needed height. The needed mark-up is done
% by LaTeX writer, which has its own id for the merged cells.
%
% The colour issue is solved by clearing colour panels in all cells,
% whether or not the multirow is single-column or multi-column.
%
% In passing we obtain baseline alignements across rows (only if
% \arraystretch is 1, as LaTeX's does not obey \arraystretch in "p"
% multi-line contents, only first and last line...)
%
% TODO: examine the situation with \arraystretch > 1. The \extrarowheight
% is hopeless for multirow anyhow, it makes baseline alignment strictly
% impossible.
\newcommand\sphinxmultirow[2]{\begingroup
% #1 = nb of spanned rows, #2 = Sphinx id of "cell", #3 = contents
% but let's fetch #3 in a way allowing verbatim contents !
\def\sphinx@nbofrows{#1}\def\sphinx@cellid{#2}%
\afterassignment\sphinx@multirow\let\next=
}%
\def\sphinx@multirow {%
\setbox\z@\hbox\bgroup\aftergroup\sphinx@@multirow\strut
}%
\def\sphinx@@multirow {%
% The contents, which is a varwidth environment, has been captured in
% \box0 (a \hbox).
% We have with \sphinx@cellid an assigned unique id. The goal is to give
% about the same height to all the involved rows.
% For this Sphinx will insert a \sphinxtablestrut{cell_id} mark-up
% in LaTeX file and the expansion of the latter will do the suitable thing.
\dimen@\dp\z@
\dimen\tw@\ht\@arstrutbox
\advance\dimen@\dimen\tw@
\advance\dimen\tw@\dp\@arstrutbox
\count@=\dimen@ % type conversion dim -> int
\count\tw@=\dimen\tw@
\divide\count@\count\tw@ % TeX division truncates
\advance\dimen@-\count@\dimen\tw@
% 1300sp is about 0.02pt. For comparison a rule default width is 0.4pt.
% (note that if \count@ holds 0, surely \dimen@>1300sp)
\ifdim\dimen@>1300sp \advance\count@\@ne \fi
% now \count@ holds the count L of needed "lines"
% and \sphinx@nbofrows holds the number N of rows
% we have L >= 1 and N >= 1
% if L is a multiple of N, ... clear what to do !
% else write L = qN + r, 1 <= r < N and we will
% arrange for each row to have enough space for:
% q+1 "lines" in each of the first r rows
% q "lines" in each of the (N-r) bottom rows
% for a total of (q+1) * r + q * (N-r) = q * N + r = L
% It is possible that q == 0.
\count\tw@\count@
% the TeX division truncates
\divide\count\tw@\sphinx@nbofrows\relax
\count4\count\tw@ % q
\multiply\count\tw@\sphinx@nbofrows\relax
\advance\count@-\count\tw@ % r
\expandafter\xdef\csname sphinx@tablestrut_\sphinx@cellid\endcsname
{\noexpand\sphinx@tablestrut{\the\count4}{\the\count@}{\sphinx@cellid}}%
\dp\z@\z@
% this will use the real height if it is >\ht\@arstrutbox
\sphinxtablestrut{\sphinx@cellid}\box\z@
\endgroup % group was opened in \sphinxmultirow
}%
\newcommand*\sphinxtablestrut[1]{%
% #1 is a "cell_id", i.e. the id of a merged group of table cells
\csname sphinx@tablestrut_#1\endcsname
}%
% LaTeX typesets the table row by row, hence each execution can do
% an update for the next row.
\newcommand*\sphinx@tablestrut[3]{\begingroup
% #1 = q, #2 = (initially) r, #3 = cell_id, q+1 lines in first r rows
% if #2 = 0, create space for max(q,1) table lines
% if #2 > 0, create space for q+1 lines and decrement #2
\leavevmode
\count@#1\relax
\ifnum#2=\z@
\ifnum\count@=\z@\count@\@ne\fi
\else
% next row will be with a #2 decremented by one
\expandafter\xdef\csname sphinx@tablestrut_#3\endcsname
{\noexpand\sphinx@tablestrut{#1}{\the\numexpr#2-\@ne}{#3}}%
\advance\count@\@ne
\fi
\vrule\@height\ht\@arstrutbox
\@depth\dimexpr\count@\ht\@arstrutbox+\count@\dp\@arstrutbox-\ht\@arstrutbox\relax
\@width\z@
\endgroup
% we need this to avoid colour panels hiding bottom parts of multirow text
\sphinx@hack@CT
}%
\endinput

128
sphinxmanual.cls Normal file
View File

@ -0,0 +1,128 @@
%
% sphinxmanual.cls for Sphinx (https://www.sphinx-doc.org/)
%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{sphinxmanual}[2019/12/01 v2.3.0 Document class (Sphinx manual)]
% chapters starting at odd pages (overridden by 'openany' document option)
\PassOptionsToClass{openright}{\sphinxdocclass}
% 'oneside' option overriding the 'twoside' default
\newif\if@oneside
\DeclareOption{oneside}{\@onesidetrue}
% Pass remaining document options to the parent class.
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\sphinxdocclass}}
\ProcessOptions\relax
% Defaults two-side document
\if@oneside
% nothing to do (oneside is the default)
\else
\PassOptionsToClass{twoside}{\sphinxdocclass}
\fi
\LoadClass{\sphinxdocclass}
% Set some sane defaults for section numbering depth and TOC depth. You can
% reset these counters in your preamble.
%
\setcounter{secnumdepth}{2}
\setcounter{tocdepth}{1}
% Adapt \and command to the flushright context of \sphinxmaketitle, to
% avoid ragged line endings if author names do not fit all on one single line
\DeclareRobustCommand{\and}{%
\end{tabular}\kern-\tabcolsep
\allowbreak
\hskip\dimexpr1em+\tabcolsep\@plus.17fil\begin{tabular}[t]{c}%
}%
% If it is desired that each author name be on its own line, use in preamble:
%\DeclareRobustCommand{\and}{%
% \end{tabular}\kern-\tabcolsep\\\begin{tabular}[t]{c}%
%}%
% Change the title page to look a bit better, and fit in with the fncychap
% ``Bjarne'' style a bit better.
%
\newcommand{\sphinxmaketitle}{%
\let\sphinxrestorepageanchorsetting\relax
\ifHy@pageanchor\def\sphinxrestorepageanchorsetting{\Hy@pageanchortrue}\fi
\hypersetup{pageanchor=false}% avoid duplicate destination warnings
\begin{titlepage}%
\let\footnotesize\small
\let\footnoterule\relax
\noindent\rule{\textwidth}{1pt}\par
\begingroup % for PDF information dictionary
\def\endgraf{ }\def\and{\& }%
\pdfstringdefDisableCommands{\def\\{, }}% overwrite hyperref setup
\hypersetup{pdfauthor={\@author}, pdftitle={\@title}}%
\endgroup
\begin{flushright}%
\sphinxlogo
\py@HeaderFamily
{\Huge \@title \par}
{\itshape\LARGE \py@release\releaseinfo \par}
\vfill
{\LARGE
\begin{tabular}[t]{c}
\@author
\end{tabular}\kern-\tabcolsep
\par}
\vfill\vfill
{\large
\@date \par
\vfill
\py@authoraddress \par
}%
\end{flushright}%\par
\@thanks
\end{titlepage}%
\setcounter{footnote}{0}%
\let\thanks\relax\let\maketitle\relax
%\gdef\@thanks{}\gdef\@author{}\gdef\@title{}
\clearpage
\ifdefined\sphinxbackoftitlepage\sphinxbackoftitlepage\fi
\if@openright\cleardoublepage\else\clearpage\fi
\sphinxrestorepageanchorsetting
}
\newcommand{\sphinxtableofcontents}{%
\pagenumbering{roman}%
\begingroup
\parskip \z@skip
\sphinxtableofcontentshook
\tableofcontents
\endgroup
% before resetting page counter, let's do the right thing.
\if@openright\cleardoublepage\else\clearpage\fi
\pagenumbering{arabic}%
}
% This is needed to get the width of the section # area wide enough in the
% library reference. Doing it here keeps it the same for all the manuals.
%
\newcommand{\sphinxtableofcontentshook}{%
\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.6em}}%
\renewcommand*\l@subsection{\@dottedtocline{2}{4.1em}{3.5em}}%
}
% Fix the bibliography environment to add an entry to the Table of
% Contents.
% For a report document class this environment is a chapter.
%
\newenvironment{sphinxthebibliography}[1]{%
\if@openright\cleardoublepage\else\clearpage\fi
% \phantomsection % not needed here since TeXLive 2010's hyperref
\begin{thebibliography}{#1}%
\addcontentsline{toc}{chapter}{\bibname}}{\end{thebibliography}}
% Same for the indices.
% The memoir class already does this, so we don't duplicate it in that case.
%
\@ifclassloaded{memoir}
{\newenvironment{sphinxtheindex}{\begin{theindex}}{\end{theindex}}}
{\newenvironment{sphinxtheindex}{%
\if@openright\cleardoublepage\else\clearpage\fi
\phantomsection % needed as no chapter, section, ... created
\begin{theindex}%
\addcontentsline{toc}{chapter}{\indexname}}{\end{theindex}}}

21
sphinxmessages.sty Normal file
View File

@ -0,0 +1,21 @@
%
% sphinxmessages.sty
%
% message resources for Sphinx
%
\ProvidesPackage{sphinxmessages}[2019/01/04 v2.0 Localized LaTeX macros (Sphinx team)]
\renewcommand{\literalblockcontinuedname}{continued from previous page}
\renewcommand{\literalblockcontinuesname}{continues on next page}
\renewcommand{\sphinxnonalphabeticalgroupname}{Non\sphinxhyphen{}alphabetical}
\renewcommand{\sphinxsymbolsname}{Symbols}
\renewcommand{\sphinxnumbersname}{Numbers}
\def\pageautorefname{page}
\addto\captionsenglish{\renewcommand{\figurename}{Fig.\@{} }}
\def\fnum@figure{\figurename\thefigure{}}
\addto\captionsenglish{\renewcommand{\tablename}{Table }}
\def\fnum@table{\tablename\thetable{}}
\addto\captionsenglish{\renewcommand{\literalblockname}{Listing}}

54
sphinxoptionsgeometry.sty Normal file
View File

@ -0,0 +1,54 @@
%% OPTIONS FOR GEOMETRY
%
% change this info string if making any custom modification
\ProvidesFile{sphinxoptionsgeometry.sty}[2021/01/27 geometry]
% geometry
\ifx\kanjiskip\@undefined
\PassOptionsToPackage{%
hmargin={\unexpanded{\spx@opt@hmargin}},%
vmargin={\unexpanded{\spx@opt@vmargin}},%
marginpar=\unexpanded{\spx@opt@marginpar}}
{geometry}
\else
% set text width for Japanese documents to be integer multiple of 1zw
% and text height to be integer multiple of \baselineskip
% the execution is delayed to \sphinxsetup then geometry.sty
\normalsize\normalfont
\newcommand*\sphinxtextwidthja[1]{%
\if@twocolumn\tw@\fi
\dimexpr
\numexpr\dimexpr\paperwidth-\tw@\dimexpr#1\relax\relax/
\dimexpr\if@twocolumn\tw@\else\@ne\fi zw\relax
zw\relax}%
\newcommand*\sphinxmarginparwidthja[1]{%
\dimexpr\numexpr\dimexpr#1\relax/\dimexpr1zw\relax zw\relax}%
\newcommand*\sphinxtextlinesja[1]{%
\numexpr\@ne+\dimexpr\paperheight-\topskip-\tw@\dimexpr#1\relax\relax/
\baselineskip\relax}%
\ifx\@jsc@uplatextrue\@undefined\else
% the way we found in order for the papersize special written by
% geometry in the dvi file to be correct in case of jsbook class
\ifnum\mag=\@m\else % do nothing special if nomag class option or 10pt
\PassOptionsToPackage{truedimen}{geometry}%
\fi
\fi
\PassOptionsToPackage{%
hmarginratio={1:1},%
textwidth=\unexpanded{\sphinxtextwidthja{\spx@opt@hmargin}},%
vmarginratio={1:1},%
lines=\unexpanded{\sphinxtextlinesja{\spx@opt@vmargin}},%
marginpar=\unexpanded{\sphinxmarginparwidthja{\spx@opt@marginpar}},%
footskip=2\baselineskip,%
}{geometry}%
\AtBeginDocument
{% update a dimension used by the jsclasses
\ifx\@jsc@uplatextrue\@undefined\else\fullwidth\textwidth\fi
% for some reason, jreport normalizes all dimensions with \@settopoint
\@ifclassloaded{jreport}
{\@settopoint\textwidth\@settopoint\textheight\@settopoint\marginparwidth}
{}% <-- "false" clause of \@ifclassloaded
}%
\fi
\endinput

35
sphinxoptionshyperref.sty Normal file
View File

@ -0,0 +1,35 @@
%% Bookmarks and hyperlinks
%
% change this info string if making any custom modification
\ProvidesFile{sphinxoptionshyperref.sty}[2021/01/27 hyperref]
% to make pdf with correct encoded bookmarks in Japanese
% this should precede the hyperref package
\ifx\kanjiskip\@undefined
% for non-Japanese: make sure bookmarks are ok also with lualatex
\PassOptionsToPackage{pdfencoding=unicode}{hyperref}
\else
\RequirePackage{atbegshi}
\ifx\ucs\@undefined
\ifnum 42146=\euc"A4A2
\AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}}
\else
\AtBeginShipoutFirst{\special{pdf:tounicode 90ms-RKSJ-UCS2}}
\fi
\else
\AtBeginShipoutFirst{\special{pdf:tounicode UTF8-UCS2}}
\fi
\fi
\ifx\@jsc@uplatextrue\@undefined\else
\PassOptionsToPackage{setpagesize=false}{hyperref}
\fi
% These options can be overridden inside 'hyperref' key
% or by later use of \hypersetup.
\PassOptionsToPackage{colorlinks,breaklinks,%
linkcolor=InnerLinkColor,filecolor=OuterLinkColor,%
menucolor=OuterLinkColor,urlcolor=OuterLinkColor,%
citecolor=InnerLinkColor}{hyperref}
\endinput

55
sphinxpackagecyrillic.sty Normal file
View File

@ -0,0 +1,55 @@
%% CYRILLIC IN NON-CYRILLIC DOCUMENTS (pdflatex only)
%
% refs: https://tex.stackexchange.com/q/460271/
\ProvidesPackage{sphinxpackagecyrillic}%
[2018/11/21 v2.0 support for Cyrillic in non-Cyrillic documents]
\RequirePackage{kvoptions}
\SetupKeyvalOptions{prefix=spx@cyropt@} % use \spx@cyropt@ prefix
\DeclareBoolOption[false]{Xtwo}
\DeclareBoolOption[false]{TtwoA}
\DeclareDefaultOption{\@unknownoptionerror}
\ProcessLocalKeyvalOptions* % ignore class options
\ifspx@cyropt@Xtwo
% original code by tex.sx user egreg (updated 2019/10/28):
% https://tex.stackexchange.com/a/460325/
% 159 Cyrillic glyphs as available in X2 TeX 8bit font encoding
% This assumes inputenc loaded with utf8 option, or LaTeX release
% as recent as 2018/04/01 which does it automatically.
\@tfor\next:=%
{Ё}{Ђ}{Є}{Ѕ}{І}{Ј}{Љ}{Њ}{Ћ}{Ў}{Џ}{А}{Б}{В}{Г}{Д}{Е}{Ж}{З}{И}{Й}%
{К}{Л}{М}{Н}{О}{П}{Р}{С}{Т}{У}{Ф}{Х}{Ц}{Ч}{Ш}{Щ}{Ъ}{Ы}{Ь}{Э}{Ю}%
{Я}{а}{б}{в}{г}{д}{е}{ж}{з}{и}{й}{к}{л}{м}{н}{о}{п}{р}{с}{т}{у}%
{ф}{х}{ц}{ч}{ш}{щ}{ъ}{ы}{ь}{э}{ю}{я}{ё}{ђ}{є}{ѕ}{і}{ј}{љ}{њ}{ћ}%
{ў}{џ}{Ѣ}{ѣ}{Ѫ}{ѫ}{Ѵ}{ѵ}{Ґ}{ґ}{Ғ}{ғ}{Ҕ}{ҕ}{Җ}{җ}{Ҙ}{ҙ}{Қ}{қ}{Ҝ}{ҝ}%
{Ҟ}{ҟ}{Ҡ}{ҡ}{Ң}{ң}{Ҥ}{ҥ}{Ҧ}{ҧ}{Ҩ}{ҩ}{Ҫ}{ҫ}{Ҭ}{ҭ}{Ү}{ү}{Ұ}{ұ}{Ҳ}{ҳ}%
{Ҵ}{ҵ}{Ҷ}{ҷ}{Ҹ}{ҹ}{Һ}{һ}{Ҽ}{ҽ}{Ҿ}{ҿ}{Ӏ}{Ӄ}{ӄ}{Ӆ}{ӆ}{Ӈ}{ӈ}{Ӌ}{ӌ}%
{Ӎ}{ӎ}{Ӕ}{ӕ}{Ә}{ә}{Ӡ}{ӡ}{Ө}{ө}\do
{%
\begingroup\def\IeC{\protect\DeclareTextSymbolDefault}%
\protected@edef\@temp{\endgroup
\@ifl@t@r{\fmtversion}{2019/10/01}{\csname u8:\next\endcsname}{\next}}%
\@temp{X2}%
}%
\else
\ifspx@cyropt@TtwoA
% original code by tex.sx user jfbu:
% https://tex.stackexchange.com/a/460305/
% 63*2+1=127 Cyrillic glyphs as found in T2A 8bit TeX font-encoding
\@tfor\@tempa:=%
{ae}{a}{b}{chrdsc}{chvcrs}{ch}{c}{dje}{dze}{dzhe}{d}{erev}{ery}{e}%
{f}{ghcrs}{gup}{g}{hdsc}{hrdsn}{h}{ie}{ii}{ishrt}{i}{je}%
{kbeak}{kdsc}{kvcrs}{k}{lje}{l}{m}{ndsc}{ng}{nje}{n}{otld}{o}{p}{r}%
{schwa}{sdsc}{sftsn}{shch}{shha}{sh}{s}{tshe}{t}{ushrt}{u}{v}%
{ya}{yhcrs}{yi}{yo}{yu}{y}{zdsc}{zhdsc}{zh}{z}\do
{%
\expandafter\DeclareTextSymbolDefault\expandafter
{\csname cyr\@tempa\endcsname}{T2A}%
\expandafter\uppercase\expandafter{\expandafter
\def\expandafter\@tempa\expandafter{\@tempa}}%
\expandafter\DeclareTextSymbolDefault\expandafter
{\csname CYR\@tempa\endcsname}{T2A}%
}%
\DeclareTextSymbolDefault{\CYRpalochka}{T2A}%
\fi\fi
\endinput

396
sphinxpackagefootnote.sty Normal file
View File

@ -0,0 +1,396 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{sphinxpackagefootnote}%
[2021/02/04 v1.1d footnotehyper adapted to sphinx (Sphinx team)]
% Provides support for this output mark-up from Sphinx latex writer:
% - footnote environment
% - savenotes environment (table templates)
% - \sphinxfootnotemark
%
%%
%% Package: sphinxpackagefootnote
%% Version: based on footnotehyper.sty 2021/02/04 v1.1d
%% as available at https://www.ctan.org/pkg/footnotehyper
%% License: the one applying to Sphinx
%%
%% Refer to the PDF documentation at https://www.ctan.org/pkg/footnotehyper for
%% the code comments.
%%
%% Differences:
%% 1. a partial tabulary compatibility layer added (enough for Sphinx mark-up),
%% 2. use of \spx@opt@BeforeFootnote from sphinx.sty,
%% 3. use of \sphinxunactivateextrasandspace from sphinx.sty,
%% 4. macro definition \sphinxfootnotemark,
%% 5. macro definition \sphinxlongtablepatch
%% 6. replaced some \undefined by \@undefined
\newif\iffootnotehyperparse\footnotehyperparsetrue
\DeclareOption*{\PackageWarning{sphinxpackagefootnote}{Option `\CurrentOption' is unknown}}%
\ProcessOptions\relax
\newbox\FNH@notes
\newtoks\FNH@toks % 1.1c
\newdimen\FNH@width
\let\FNH@colwidth\columnwidth
\newif\ifFNH@savingnotes
\AtBeginDocument {%
\let\FNH@latex@footnote \footnote
\let\FNH@latex@footnotetext\footnotetext
\let\FNH@H@@footnotetext \@footnotetext
\let\FNH@H@@mpfootnotetext \@mpfootnotetext
\newenvironment{savenotes}
{\FNH@savenotes\ignorespaces}{\FNH@spewnotes\ignorespacesafterend}%
\let\spewnotes \FNH@spewnotes
\let\footnote \FNH@footnote
\let\footnotetext \FNH@footnotetext
\let\endfootnote \FNH@endfntext
\let\endfootnotetext\FNH@endfntext
\@ifpackageloaded{hyperref}
{\ifHy@hyperfootnotes
\let\FNH@H@@footnotetext\H@@footnotetext
\let\FNH@H@@mpfootnotetext\H@@mpfootnotetext
\else
\let\FNH@hyper@fntext\FNH@nohyp@fntext
\fi}%
{\let\FNH@hyper@fntext\FNH@nohyp@fntext}%
}%
\def\FNH@hyper@fntext{\FNH@fntext\FNH@hyper@fntext@i}%
\def\FNH@nohyp@fntext{\FNH@fntext\FNH@nohyp@fntext@i}%
\def\FNH@fntext #1{%
\ifx\ifmeasuring@\@undefined
\expandafter\@secondoftwo\else\expandafter\@firstofone\fi
% these two lines modified for Sphinx (tabulary compatibility):
{\ifmeasuring@\expandafter\@gobbletwo\else\expandafter\@firstofone\fi}%
{\ifx\equation$\expandafter\@gobbletwo\fi #1}%$
}%
\long\def\FNH@hyper@fntext@i#1{%
\global\setbox\FNH@notes\vbox
{\unvbox\FNH@notes
\FNH@startnote
\@makefntext
{\rule\z@\footnotesep\ignorespaces
\ifHy@nesting\expandafter\ltx@firstoftwo
\else\expandafter\ltx@secondoftwo
\fi
{\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}{#1}}%
{\Hy@raisedlink
{\expandafter\hyper@@anchor\expandafter{\Hy@footnote@currentHref}%
{\relax}}%
\let\@currentHref\Hy@footnote@currentHref
\let\@currentlabelname\@empty
#1}%
\@finalstrut\strutbox
}%
\FNH@endnote
}%
}%
\long\def\FNH@nohyp@fntext@i#1{%
\global\setbox\FNH@notes\vbox
{\unvbox\FNH@notes
\FNH@startnote
\@makefntext{\rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
\FNH@endnote
}%
}%
\def\FNH@startnote{%
\hsize\FNH@colwidth
\interlinepenalty\interfootnotelinepenalty
\reset@font\footnotesize
\floatingpenalty\@MM
\@parboxrestore
\protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}%
\color@begingroup
}%
\def\FNH@endnote{\color@endgroup}%
\def\FNH@savenotes{%
\begingroup
\ifFNH@savingnotes\else
\FNH@savingnotestrue
\let\@footnotetext \FNH@hyper@fntext
\let\@mpfootnotetext \FNH@hyper@fntext
\let\H@@mpfootnotetext\FNH@nohyp@fntext
\FNH@width\columnwidth
\let\FNH@colwidth\FNH@width
\global\setbox\FNH@notes\box\voidb@x
\let\FNH@thempfn\thempfn
\let\FNH@mpfn\@mpfn
\ifx\@minipagerestore\relax\let\@minipagerestore\@empty\fi
\expandafter\def\expandafter\@minipagerestore\expandafter{%
\@minipagerestore
\let\thempfn\FNH@thempfn
\let\@mpfn\FNH@mpfn
}%
\fi
}%
\def\FNH@spewnotes {%
\if@endpe\ifx\par\@@par\FNH@toks{}\else
\FNH@toks\expandafter{\expandafter
\def\expandafter\par\expandafter{\par}\@endpetrue}%
\expandafter\expandafter\expandafter
\FNH@toks
\expandafter\expandafter\expandafter
{\expandafter\the\expandafter\FNH@toks
\expandafter\def\expandafter\@par\expandafter{\@par}}%
\expandafter\expandafter\expandafter
\FNH@toks
\expandafter\expandafter\expandafter
{\expandafter\the\expandafter\FNH@toks
\expandafter\everypar\expandafter{\the\everypar}}\fi
\else\FNH@toks{}\fi
\expandafter
\endgroup\the\FNH@toks
\ifFNH@savingnotes\else
\ifvoid\FNH@notes\else
\begingroup
\let\@makefntext\@empty
\let\@finalstrut\@gobble
\let\rule\@gobbletwo
\ifx\@footnotetext\@mpfootnotetext
\expandafter\FNH@H@@mpfootnotetext
\else
\expandafter\FNH@H@@footnotetext
\fi{\unvbox\FNH@notes}%
\endgroup
\fi
\fi
}%
\def\FNH@footnote@envname {footnote}%
\def\FNH@footnotetext@envname{footnotetext}%
\def\FNH@footnote{%
% this line added for Sphinx:
\spx@opt@BeforeFootnote
\ifx\@currenvir\FNH@footnote@envname
\expandafter\FNH@footnoteenv
\else
\expandafter\FNH@latex@footnote
\fi
}%
\def\FNH@footnoteenv{%
% this line added for Sphinx (footnotes in parsed literal blocks):
\catcode13=5 \sphinxunactivateextrasandspace
\@ifnextchar[%
\FNH@footnoteenv@i %]
{\stepcounter\@mpfn
\protected@xdef\@thefnmark{\thempfn}%
\@footnotemark
\def\FNH@endfntext@fntext{\@footnotetext}%
\FNH@startfntext}%
}%
\def\FNH@footnoteenv@i[#1]{%
\begingroup
\csname c@\@mpfn\endcsname #1\relax
\unrestored@protected@xdef\@thefnmark{\thempfn}%
\endgroup
\@footnotemark
\def\FNH@endfntext@fntext{\@footnotetext}%
\FNH@startfntext
}%
\def\FNH@footnotetext{%
\ifx\@currenvir\FNH@footnotetext@envname
\expandafter\FNH@footnotetextenv
\else
\expandafter\FNH@latex@footnotetext
\fi
}%
\def\FNH@footnotetextenv{%
\@ifnextchar[%
\FNH@footnotetextenv@i %]
{\protected@xdef\@thefnmark{\thempfn}%
\def\FNH@endfntext@fntext{\@footnotetext}%
\FNH@startfntext}%
}%
\def\FNH@footnotetextenv@i[#1]{%
\begingroup
\csname c@\@mpfn\endcsname #1\relax
\unrestored@protected@xdef\@thefnmark{\thempfn}%
\endgroup
\ifFNH@savingnotes
\def\FNH@endfntext@fntext{\FNH@nohyp@fntext}%
\else
\def\FNH@endfntext@fntext{\FNH@H@@footnotetext}%
\fi
\FNH@startfntext
}%
\def\FNH@startfntext{%
\setbox\z@\vbox\bgroup
\FNH@startnote
\FNH@prefntext
\rule\z@\footnotesep\ignorespaces
}%
\def\FNH@endfntext {%
\@finalstrut\strutbox
\FNH@postfntext
\FNH@endnote
\egroup
\begingroup
\let\@makefntext\@empty\let\@finalstrut\@gobble\let\rule\@gobbletwo
\FNH@endfntext@fntext {\unvbox\z@}%
\endgroup
}%
\let\FNH@prefntext\@empty
\let\FNH@postfntext\@empty
\AtBeginDocument{\iffootnotehyperparse\expandafter\FNH@check\fi}%
\def\FNH@safeif#1{%
\iftrue\csname if#1\endcsname\csname fi\endcsname\expandafter\@firstoftwo
\else\csname fi\endcsname\expandafter\@secondoftwo
\fi
}%
\def\FNH@check{%
\ifx\@makefntextFB\@undefined\expandafter\FNH@check@
\else\expandafter\FNH@frenchb@
\fi
}%
\def\FNH@frenchb@{%
\def\FNH@prefntext{%
\localleftbox{}%
\let\FBeverypar@save\FBeverypar@quote
\let\FBeverypar@quote\relax
\FNH@safeif{FB@koma}%
{\FNH@safeif{FBFrenchFootnotes}%
{\ifx\footnote\thanks
\let\@@makefnmark\@@makefnmarkTH
\@makefntextTH{} % space as in french.ldf
\else
\let\@@makefnmark\@@makefnmarkFB
\@makefntextFB{} % space as in french.ldf
\fi
}{\let\@@makefnmark\@@makefnmarkORI
\@makefntextORI{}% no space as in french.ldf
}%
}%
{\FNH@safeif{FBFrenchFootnotes}%
{\@makefntextFB{}}%
{\@makefntextORI{}}%
}%
}%
\def\FNH@postfntext{%
\let\FBeverypar@quote\FBeverypar@save
\localleftbox{\FBeveryline@quote}%
}%
}%
\def\FNH@check@{%
\expandafter\FNH@check@a\@makefntext{1.2!3?4,}%
\FNH@@@1.2!3?4,\FNH@@@\relax
}%
\long\def\FNH@check@a #11.2!3?4,#2\FNH@@@#3{%
\ifx\relax#3\expandafter\FNH@checkagain@
\else
\def\FNH@prefntext{#1}\def\FNH@postfntext{#2}%
\expandafter\FNH@check@b
\fi
}%
\def\FNH@checkagain@{%
\expandafter\FNH@checkagain@a
\detokenize\expandafter{\@makefntext{1.2!3?4,}}\relax\FNH@@@
}%
\edef\FNH@temp{\noexpand\FNH@checkagain@a ##1\string{1.2!3?4,\string}}%
\expandafter\def\FNH@temp#2#3\FNH@@@{%
\ifx\relax#2%
\def\FNH@prefntext{\@makefntext{}}%
\else\FNH@bad@makefntext@alert
\fi
}%
\def\FNH@check@b #1\relax{%
\expandafter\expandafter\expandafter\FNH@check@c
\expandafter\meaning\expandafter\FNH@prefntext
\meaning\FNH@postfntext1.2!3?4,\FNH@check@c\relax
}%
\def\FNH@check@c #11.2!3?4,#2#3\relax{%
\ifx\FNH@check@c#2\else\FNH@bad@makefntext@alert\fi
}%
% slight reformulation for Sphinx
\def\FNH@bad@makefntext@alert{%
\PackageWarningNoLine{sphinxpackagefootnote}%
{Footnotes will be sub-optimal, sorry. This is due to the document class or^^J
some package modifying macro \string\@makefntext.^^J
You can try to report this incompatibility at^^J
https://github.com/sphinx-doc/sphinx with this info:}%
\typeout{\meaning\@makefntext}%
\let\FNH@prefntext\@empty\let\FNH@postfntext\@empty
}%
% this macro from original footnote.sty is not used anymore by Sphinx
% but for simplicity sake let's just keep it as is
\def\makesavenoteenv{\@ifnextchar[\FNH@msne@ii\FNH@msne@i}%]
\def\FNH@msne@i #1{%
\expandafter\let\csname FNH$#1\expandafter\endcsname %$
\csname #1\endcsname
\expandafter\let\csname endFNH$#1\expandafter\endcsname %$
\csname end#1\endcsname
\FNH@msne@ii[#1]{FNH$#1}%$
}%
\def\FNH@msne@ii[#1]#2{%
\expandafter\edef\csname#1\endcsname{%
\noexpand\savenotes
\expandafter\noexpand\csname#2\endcsname
}%
\expandafter\edef\csname end#1\endcsname{%
\expandafter\noexpand\csname end#2\endcsname
\noexpand\expandafter
\noexpand\spewnotes
\noexpand\if@endpe\noexpand\@endpetrue\noexpand\fi
}%
}%
%
% some extras for Sphinx :
% \sphinxfootnotemark: usable in section titles and silently removed from TOCs.
\def\sphinxfootnotemark [#1]%
{\ifx\thepage\relax\else\sphinxfootref{#1}\fi}%
% \sphinxfootref:
% - \spx@opt@BeforeFootnote is from BeforeFootnote sphinxsetup option
% - \ref:
% the latex.py writer inserts a \phantomsection\label{<scope>.<num>}
% whenever
% - the footnote was explicitly numbered in sources,
% - or it was in restrained context and is rendered using footnotetext
%
% These are the two types of footnotes that \sphinxfootnotemark must
% handle. But for explicitly numbered footnotes the same number
% can be found in document. So a secondary part in <scope> is updated
% at each novel such footnote to know what is the target from then on
% for \sphinxfootnotemark and already encountered [1], or [2],...
%
% LaTeX package varioref is not supported by hyperref (from its doc: "There
% are too many problems with varioref. Nobody has time to sort them out.
% Therefore this package is now unsupported.") So we will simply use our own
% macros to access the page number of footnote text and decide whether to print
% it. \pagename is internationalized by latex-babel.
\def\spx@thefnmark#1#2{%
% #1=label for reference, #2=page where footnote was printed
\ifx\spx@tempa\spx@tempb
% same page
#1%
\else
\sphinxthefootnotemark{#1}{#2}%
\fi
}%
\def\sphinxfootref@get #1#2#3#4#5\relax{%
\def\sphinxfootref@label{#1}%
\def\sphinxfootref@page {#2}%
\def\sphinxfootref@Href {#4}%
}%
\protected\def\sphinxfootref#1{% #1 always explicit number in Sphinx usage
\spx@opt@BeforeFootnote
\ltx@ifundefined{r@\thesphinxscope.#1}%
{\gdef\@thefnmark{?}\H@@footnotemark}%
{\expandafter\expandafter\expandafter\sphinxfootref@get
\csname r@\thesphinxscope.#1\endcsname\relax
\edef\spx@tempa{\thepage}\edef\spx@tempb{\sphinxfootref@page}%
\protected@xdef\@thefnmark{\spx@thefnmark{\sphinxfootref@label}{\sphinxfootref@page}}%
\let\spx@@makefnmark\@makefnmark
\def\@makefnmark{%
\hyper@linkstart{link}{\sphinxfootref@Href}%
\spx@@makefnmark
\hyper@linkend
}%
\H@@footnotemark
\let\@makefnmark\spx@@makefnmark
}%
}%
\AtBeginDocument{%
% let hyperref less complain
\pdfstringdefDisableCommands{\def\sphinxfootnotemark [#1]{}}%
% to obtain hyperlinked footnotes in longtable environment we must replace
% hyperref's patch of longtable's patch of \@footnotetext by our own
\let\LT@p@ftntext\FNH@hyper@fntext
% this *requires* longtable to be used always wrapped in savenotes environment
}%
\endinput
%%
%% End of file `sphinxpackagefootnote.sty'.

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB