diff --git a/.gitignore b/.gitignore index 39155b9..89d9e7e 100755 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,6 @@ # Project exclude paths -/venv/ \ No newline at end of file +/venv/ +/build/ +/dist/ +/out/ +/docs/ diff --git a/.idea/pytexexam.iml b/.idea/pytexexam.iml index df7a4d4..df9a828 100755 --- a/.idea/pytexexam.iml +++ b/.idea/pytexexam.iml @@ -4,6 +4,7 @@ + diff --git a/README.md b/README.md index 0792851..0b2cd34 100755 --- a/README.md +++ b/README.md @@ -9,64 +9,36 @@ pip install pytexexam ## How to use ```python -from pytexexam import Question, Exam, LatexExam, latexexamutil - -# Create questions, answers and solution. -question = Question("Question 1 ?") -question.answer_a("Answer 1", True) -question.answer_b("Answer 2") -question.answer_c("Answer 3") -question.answer_d("Answer 4") -question.shuffle_answer() -question.solution(""" -This is the detailed answer of the first question. -""") - -# Another way to enter answer options. -question2 = Question("Question 2 ?") -question2.answers(true_answer="A", answer_dict={ - "A": "Answer 1", - "B": "Answer 2", - "C": "Answer 3", - "D": "Answer 4" -}) -question2.solution(""" -This is the detailed answer of the second question. -""") -question2.set_answer_column(2) -question2.shuffle_answer() - -# One more question. -question3 = Question("Question 3 ?") -question3.answer_a("Answer 1", True) -question3.answer_b("Answer 2") -question3.answer_c("Answer 3") -question3.answer_d("Answer 4") -question3.set_answer_column(4) -question3.shuffle_answer() - -# Create a exam from existing questions. -exam = Exam([question, question2, question3]) - -# Shuffle the questions. -exam.shuffle_question() - -# Create a LatexExam object to export a question as a tex or pdf file (with latex pre-installed) -latex_exam = LatexExam("Simple exam", exam) -# Add AMS math packages, if needed. -latex_exam.add_user_preamble(latexexamutil.ams_math_package()) - -# Export exam. -latex_exam.export_tex_exam("test1.tex") -latex_exam.export_pdf_exam("test1.pdf") - -# Export answer keys -latex_exam.export_tex_answer("answer1.tex") -latex_exam.export_pdf_answer("answer1.pdf") - -# Export solutions. -latex_exam.export_tex_solution("solution1.pdf") -latex_exam.export_pdf_solution("solution1.pdf") +import pytexexam.latexexamutil as util +from pytexexam import LatexExamBuilder, ExamExportType + +# Create exam builder +builder = LatexExamBuilder() +# You can add preamble here +builder.preamble = util.ams_math_package() +# Exam header +builder.header = "This is a simple header" +# Exam footer +builder.footer = "This is a simple footer" +# You can export exam in tex file or pdf file (need Latex installed) +builder.export_type = ExamExportType.PDF +# Add question +builder.add_question( + question="This is a simple question", + # Answers: This package auto add A, B, C, D ... in answers + answer=["Answer 1", "Answer 2", "Answer 3", "Answer 4"], + # True answer key + true_answer="A", + # present answer in multiple column + answer_column=4, + # Solution of this question + solution="This is solution for this question", +) + +# Creste exam, answer and solution! +builder.create_exam("exam1") +builder.create_answer("answer1") +builder.create_solution("solution1") ``` ## All package API. diff --git a/docs/_build/.doctrees/environment.pickle b/docs/_build/.doctrees/environment.pickle index f38d952..8f8b5a3 100755 Binary files a/docs/_build/.doctrees/environment.pickle and b/docs/_build/.doctrees/environment.pickle differ diff --git a/docs/_build/.doctrees/index.doctree b/docs/_build/.doctrees/index.doctree index 1a8c905..1a75e78 100755 Binary files a/docs/_build/.doctrees/index.doctree and b/docs/_build/.doctrees/index.doctree differ diff --git a/docs/_build/Makefile b/docs/_build/Makefile index c561680..e4653f2 100755 --- a/docs/_build/Makefile +++ b/docs/_build/Makefile @@ -5,14 +5,13 @@ ALLPDF = $(addsuffix .pdf,$(ALLDOCS)) ALLDVI = $(addsuffix .dvi,$(ALLDOCS)) ALLXDV = ALLPS = $(addsuffix .ps,$(ALLDOCS)) -ALLIMGS = $(wildcard *.png *.gif *.jpg *.jpeg) # Prefix for archive names ARCHIVEPREFIX = # Additional LaTeX options (passed via variables in latexmkrc/latexmkjarc file) -export LATEXOPTS = +export LATEXOPTS ?= # Additional latexmk options -LATEXMKOPTS = +LATEXMKOPTS ?= # format: pdf or dvi (used only by archive targets) FMT = pdf @@ -20,9 +19,6 @@ LATEX = latexmk -dvi PDFLATEX = latexmk -pdf -dvi- -ps- -%.png %.gif %.jpg %.jpeg: FORCE_MAKE - extractbb '$@' - %.dvi: %.tex FORCE_MAKE $(LATEX) $(LATEXMKOPTS) '$<' diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 85e4d4b..0eb7a91 100755 Binary files a/docs/_build/doctrees/environment.pickle and b/docs/_build/doctrees/environment.pickle differ diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index 1a8c905..1a75e78 100755 Binary files a/docs/_build/doctrees/index.doctree and b/docs/_build/doctrees/index.doctree differ diff --git a/docs/_build/footnotehyper-sphinx.sty b/docs/_build/footnotehyper-sphinx.sty index b6692cf..3bba385 100755 --- a/docs/_build/footnotehyper-sphinx.sty +++ b/docs/_build/footnotehyper-sphinx.sty @@ -1,9 +1,9 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{footnotehyper-sphinx}% - [2017/10/27 v1.7 hyperref aware footnote.sty for sphinx (JFB)] + [2021/02/04 v1.1d hyperref aware footnote.sty for sphinx (JFB)] %% %% Package: footnotehyper-sphinx -%% Version: based on footnotehyper.sty 2017/03/07 v1.0 +%% 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 %% @@ -16,10 +16,12 @@ %% 3. use of \sphinxunactivateextrasandspace from sphinx.sty, %% 4. macro definition \sphinxfootnotemark, %% 5. macro definition \sphinxlongtablepatch -%% 6. replaced an \undefined by \@undefined +%% 6. replaced some \undefined by \@undefined +\newif\iffootnotehyperparse\footnotehyperparsetrue \DeclareOption*{\PackageWarning{footnotehyper-sphinx}{Option `\CurrentOption' is unknown}}% \ProcessOptions\relax \newbox\FNH@notes +\newtoks\FNH@toks % 1.1c \newdimen\FNH@width \let\FNH@colwidth\columnwidth \newif\ifFNH@savingnotes @@ -27,6 +29,7 @@ \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 @@ -37,6 +40,7 @@ \@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}% @@ -111,14 +115,33 @@ \fi }% \def\FNH@spewnotes {% - \endgroup + \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 - \FNH@H@@footnotetext{\unvbox\FNH@notes}% + \ifx\@footnotetext\@mpfootnotetext + \expandafter\FNH@H@@mpfootnotetext + \else + \expandafter\FNH@H@@footnotetext + \fi{\unvbox\FNH@notes}% \endgroup \fi \fi @@ -196,19 +219,68 @@ \FNH@endfntext@fntext {\unvbox\z@}% \endgroup }% -\AtBeginDocument{% - \let\FNH@@makefntext\@makefntext - \ifx\@makefntextFB\@undefined - \expandafter\@gobble\else\expandafter\@firstofone\fi - {\ifFBFrenchFootnotes \let\FNH@@makefntext\@makefntextFB \else - \let\FNH@@makefntext\@makefntextORI\fi}% - \expandafter\FNH@check@a\FNH@@makefntext{1.2!3?4,}% - \FNH@@@1.2!3?4,\FNH@@@\relax +\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\@firstoftwo\else\expandafter\@secondoftwo\fi - \FNH@bad@makefntext@alert - {\def\FNH@prefntext{#1}\def\FNH@postfntext{#2}\FNH@check@b}% + \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 @@ -216,7 +288,7 @@ \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\expandafter\@gobble\fi\FNH@bad@makefntext@alert + \ifx\FNH@check@c#2\else\FNH@bad@makefntext@alert\fi }% % slight reformulation for Sphinx \def\FNH@bad@makefntext@alert{% @@ -250,12 +322,61 @@ \noexpand\if@endpe\noexpand\@endpetrue\noexpand\fi }% }% -% end of footnotehyper 2017/02/16 v0.99 % some extras for Sphinx : % \sphinxfootnotemark: usable in section titles and silently removed from TOCs. \def\sphinxfootnotemark [#1]% - {\ifx\thepage\relax\else\protect\spx@opt@BeforeFootnote - \protect\footnotemark[#1]\fi}% + {\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{.} +% 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 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]{}}% diff --git a/docs/_build/latex/Makefile b/docs/_build/latex/Makefile index c561680..e4653f2 100755 --- a/docs/_build/latex/Makefile +++ b/docs/_build/latex/Makefile @@ -5,14 +5,13 @@ ALLPDF = $(addsuffix .pdf,$(ALLDOCS)) ALLDVI = $(addsuffix .dvi,$(ALLDOCS)) ALLXDV = ALLPS = $(addsuffix .ps,$(ALLDOCS)) -ALLIMGS = $(wildcard *.png *.gif *.jpg *.jpeg) # Prefix for archive names ARCHIVEPREFIX = # Additional LaTeX options (passed via variables in latexmkrc/latexmkjarc file) -export LATEXOPTS = +export LATEXOPTS ?= # Additional latexmk options -LATEXMKOPTS = +LATEXMKOPTS ?= # format: pdf or dvi (used only by archive targets) FMT = pdf @@ -20,9 +19,6 @@ LATEX = latexmk -dvi PDFLATEX = latexmk -pdf -dvi- -ps- -%.png %.gif %.jpg %.jpeg: FORCE_MAKE - extractbb '$@' - %.dvi: %.tex FORCE_MAKE $(LATEX) $(LATEXMKOPTS) '$<' diff --git a/docs/_build/latex/footnotehyper-sphinx.sty b/docs/_build/latex/footnotehyper-sphinx.sty index b6692cf..3bba385 100755 --- a/docs/_build/latex/footnotehyper-sphinx.sty +++ b/docs/_build/latex/footnotehyper-sphinx.sty @@ -1,9 +1,9 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{footnotehyper-sphinx}% - [2017/10/27 v1.7 hyperref aware footnote.sty for sphinx (JFB)] + [2021/02/04 v1.1d hyperref aware footnote.sty for sphinx (JFB)] %% %% Package: footnotehyper-sphinx -%% Version: based on footnotehyper.sty 2017/03/07 v1.0 +%% 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 %% @@ -16,10 +16,12 @@ %% 3. use of \sphinxunactivateextrasandspace from sphinx.sty, %% 4. macro definition \sphinxfootnotemark, %% 5. macro definition \sphinxlongtablepatch -%% 6. replaced an \undefined by \@undefined +%% 6. replaced some \undefined by \@undefined +\newif\iffootnotehyperparse\footnotehyperparsetrue \DeclareOption*{\PackageWarning{footnotehyper-sphinx}{Option `\CurrentOption' is unknown}}% \ProcessOptions\relax \newbox\FNH@notes +\newtoks\FNH@toks % 1.1c \newdimen\FNH@width \let\FNH@colwidth\columnwidth \newif\ifFNH@savingnotes @@ -27,6 +29,7 @@ \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 @@ -37,6 +40,7 @@ \@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}% @@ -111,14 +115,33 @@ \fi }% \def\FNH@spewnotes {% - \endgroup + \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 - \FNH@H@@footnotetext{\unvbox\FNH@notes}% + \ifx\@footnotetext\@mpfootnotetext + \expandafter\FNH@H@@mpfootnotetext + \else + \expandafter\FNH@H@@footnotetext + \fi{\unvbox\FNH@notes}% \endgroup \fi \fi @@ -196,19 +219,68 @@ \FNH@endfntext@fntext {\unvbox\z@}% \endgroup }% -\AtBeginDocument{% - \let\FNH@@makefntext\@makefntext - \ifx\@makefntextFB\@undefined - \expandafter\@gobble\else\expandafter\@firstofone\fi - {\ifFBFrenchFootnotes \let\FNH@@makefntext\@makefntextFB \else - \let\FNH@@makefntext\@makefntextORI\fi}% - \expandafter\FNH@check@a\FNH@@makefntext{1.2!3?4,}% - \FNH@@@1.2!3?4,\FNH@@@\relax +\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\@firstoftwo\else\expandafter\@secondoftwo\fi - \FNH@bad@makefntext@alert - {\def\FNH@prefntext{#1}\def\FNH@postfntext{#2}\FNH@check@b}% + \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 @@ -216,7 +288,7 @@ \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\expandafter\@gobble\fi\FNH@bad@makefntext@alert + \ifx\FNH@check@c#2\else\FNH@bad@makefntext@alert\fi }% % slight reformulation for Sphinx \def\FNH@bad@makefntext@alert{% @@ -250,12 +322,61 @@ \noexpand\if@endpe\noexpand\@endpetrue\noexpand\fi }% }% -% end of footnotehyper 2017/02/16 v0.99 % some extras for Sphinx : % \sphinxfootnotemark: usable in section titles and silently removed from TOCs. \def\sphinxfootnotemark [#1]% - {\ifx\thepage\relax\else\protect\spx@opt@BeforeFootnote - \protect\footnotemark[#1]\fi}% + {\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{.} +% 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 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]{}}% diff --git a/docs/_build/latex/latexmkjarc b/docs/_build/latex/latexmkjarc index 5b315d6..6e36b19 100755 --- a/docs/_build/latex/latexmkjarc +++ b/docs/_build/latex/latexmkjarc @@ -1,4 +1,4 @@ -$latex = 'platex ' . $ENV{'LATEXOPTS'} . ' -kanji=utf8 %O %S'; +$latex = 'pdflatex ' . $ENV{'LATEXOPTS'} . ' -kanji=utf8 %O %S'; $dvipdf = 'dvipdfmx %O -o %D %S'; $makeindex = 'internal mendex %S %B %D'; sub mendex { @@ -19,4 +19,4 @@ sub mendex { add_cus_dep( "glo", "gls", 0, "makeglo" ); sub makeglo { return system( "mendex -J -f -s gglo.ist -o '$_[0].gls' '$_[0].glo'" ); -} +} \ No newline at end of file diff --git a/docs/_build/latex/pytexexam.aux b/docs/_build/latex/pytexexam.aux index 74710b9..2b2dcc9 100755 --- a/docs/_build/latex/pytexexam.aux +++ b/docs/_build/latex/pytexexam.aux @@ -1,5 +1,6 @@ \relax \providecommand\hyper@newdestlabel[2]{} +\@nameuse{bbl@beforestart} \providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} \HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined \global\let\oldcontentsline\contentsline @@ -25,42 +26,30 @@ \newlabel{index:pytexexam.answer.Answer}{{1}{1}{Pytexexam main class}{section*.3}{}} \newlabel{index:module-pytexexam.question}{{1}{1}{Pytexexam main class}{section*.4}{}} \newlabel{index:pytexexam.question.Question}{{1}{1}{Pytexexam main class}{section*.5}{}} -\newlabel{index:pytexexam.question.Question.answer_a}{{1}{1}{Pytexexam main class}{section*.6}{}} -\newlabel{index:pytexexam.question.Question.answer_b}{{1}{1}{Pytexexam main class}{section*.7}{}} -\newlabel{index:pytexexam.question.Question.answer_c}{{1}{1}{Pytexexam main class}{section*.8}{}} -\newlabel{index:pytexexam.question.Question.answer_d}{{1}{1}{Pytexexam main class}{section*.9}{}} -\newlabel{index:pytexexam.question.Question.answers}{{1}{1}{Pytexexam main class}{section*.10}{}} -\newlabel{index:pytexexam.question.Question.get_answer}{{1}{1}{Pytexexam main class}{section*.11}{}} -\newlabel{index:pytexexam.question.Question.get_answer_column}{{1}{2}{Pytexexam main class}{section*.12}{}} -\newlabel{index:pytexexam.question.Question.get_true_answer}{{1}{2}{Pytexexam main class}{section*.13}{}} -\newlabel{index:pytexexam.question.Question.question}{{1}{2}{Pytexexam main class}{section*.14}{}} -\newlabel{index:pytexexam.question.Question.set_answer_column}{{1}{2}{Pytexexam main class}{section*.15}{}} -\newlabel{index:pytexexam.question.Question.shuffle_answer}{{1}{2}{Pytexexam main class}{section*.16}{}} -\newlabel{index:pytexexam.question.Question.solution}{{1}{2}{Pytexexam main class}{section*.17}{}} -\newlabel{index:module-pytexexam.exam}{{1}{2}{Pytexexam main class}{section*.18}{}} -\newlabel{index:pytexexam.exam.Exam}{{1}{2}{Pytexexam main class}{section*.19}{}} -\newlabel{index:pytexexam.exam.Exam.question_list}{{1}{2}{Pytexexam main class}{section*.20}{}} -\newlabel{index:pytexexam.exam.Exam.shuffle_question}{{1}{2}{Pytexexam main class}{section*.21}{}} -\newlabel{index:module-pytexexam.latexexam}{{1}{2}{Pytexexam main class}{section*.22}{}} -\newlabel{index:pytexexam.latexexam.LatexExam}{{1}{2}{Pytexexam main class}{section*.23}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.add_user_preamble}{{1}{2}{Pytexexam main class}{section*.24}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.exam_content}{{1}{2}{Pytexexam main class}{section*.25}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.exam_header}{{1}{2}{Pytexexam main class}{section*.26}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.exam_title}{{1}{2}{Pytexexam main class}{section*.27}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.export_pdf_answer}{{1}{2}{Pytexexam main class}{section*.28}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.export_pdf_exam}{{1}{2}{Pytexexam main class}{section*.29}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.export_pdf_solution}{{1}{3}{Pytexexam main class}{section*.30}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.export_tex_answer}{{1}{3}{Pytexexam main class}{section*.31}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.export_tex_exam}{{1}{3}{Pytexexam main class}{section*.32}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.export_tex_solution}{{1}{3}{Pytexexam main class}{section*.33}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.question_theorem}{{1}{3}{Pytexexam main class}{section*.34}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.solution_theorem}{{1}{3}{Pytexexam main class}{section*.35}{}} -\newlabel{index:pytexexam.latexexam.LatexExam.user_preamble}{{1}{3}{Pytexexam main class}{section*.36}{}} -\@writefile{toc}{\contentsline {chapter}{\numberline {2}Pytexexam util class}{5}{chapter.2}\protected@file@percent } +\newlabel{index:pytexexam.question.Question.answer_column}{{1}{1}{Pytexexam main class}{section*.6}{}} +\newlabel{index:pytexexam.question.Question.answers}{{1}{1}{Pytexexam main class}{section*.7}{}} +\newlabel{index:pytexexam.question.Question.get_true_answer_key}{{1}{1}{Pytexexam main class}{section*.8}{}} +\newlabel{index:pytexexam.question.Question.print_question_latex}{{1}{1}{Pytexexam main class}{section*.9}{}} +\newlabel{index:pytexexam.question.Question.print_solution_latex}{{1}{1}{Pytexexam main class}{section*.10}{}} +\newlabel{index:pytexexam.question.Question.question}{{1}{1}{Pytexexam main class}{section*.11}{}} +\newlabel{index:pytexexam.question.Question.shuffle_answer}{{1}{1}{Pytexexam main class}{section*.12}{}} +\newlabel{index:pytexexam.question.Question.solution}{{1}{1}{Pytexexam main class}{section*.13}{}} +\newlabel{index:module-pytexexam.exam}{{1}{1}{Pytexexam main class}{section*.14}{}} +\newlabel{index:pytexexam.exam.Exam}{{1}{1}{Pytexexam main class}{section*.15}{}} +\newlabel{index:pytexexam.exam.Exam.question_list}{{1}{1}{Pytexexam main class}{section*.16}{}} +\newlabel{index:pytexexam.exam.Exam.shuffle_question}{{1}{1}{Pytexexam main class}{section*.17}{}} +\newlabel{index:module-pytexexam.latexexam}{{1}{1}{Pytexexam main class}{section*.18}{}} +\newlabel{index:pytexexam.latexexam.LatexExamAnswer}{{1}{1}{Pytexexam main class}{section*.19}{}} +\newlabel{index:pytexexam.latexexam.LatexExamAnswer.get_latex_string}{{1}{1}{Pytexexam main class}{section*.20}{}} +\newlabel{index:pytexexam.latexexam.LatexExamPaper}{{1}{1}{Pytexexam main class}{section*.21}{}} +\newlabel{index:pytexexam.latexexam.LatexExamPaper.get_latex_string}{{1}{1}{Pytexexam main class}{section*.22}{}} +\newlabel{index:pytexexam.latexexam.LatexExamSolution}{{1}{2}{Pytexexam main class}{section*.23}{}} +\newlabel{index:pytexexam.latexexam.LatexExamSolution.get_latex_string}{{1}{2}{Pytexexam main class}{section*.24}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {2}Pytexexam util class}{3}{chapter.2}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{index:module-pytexexam.latexexamutil}{{2}{5}{Pytexexam util class}{chapter.2}{}} -\newlabel{index:pytexexam-util-class}{{2}{5}{Pytexexam util class}{chapter.2}{}} -\newlabel{index:pytexexam.latexexamutil.ams_math_package}{{2}{5}{Pytexexam util class}{section*.37}{}} -\@writefile{toc}{\contentsline {chapter}{Python Module Index}{7}{section*.38}\protected@file@percent } -\@writefile{toc}{\contentsline {chapter}{Index}{9}{section*.39}\protected@file@percent } +\newlabel{index:module-pytexexam.latexexamutil}{{2}{3}{Pytexexam util class}{chapter.2}{}} +\newlabel{index:pytexexam-util-class}{{2}{3}{Pytexexam util class}{chapter.2}{}} +\newlabel{index:pytexexam.latexexamutil.ams_math_package}{{2}{3}{Pytexexam util class}{section*.25}{}} +\@writefile{toc}{\contentsline {chapter}{Python Module Index}{5}{section*.26}\protected@file@percent } +\@writefile{toc}{\contentsline {chapter}{Index}{7}{section*.27}\protected@file@percent } diff --git a/docs/_build/latex/pytexexam.fdb_latexmk b/docs/_build/latex/pytexexam.fdb_latexmk index 4723474..d3bf4f3 100755 --- a/docs/_build/latex/pytexexam.fdb_latexmk +++ b/docs/_build/latex/pytexexam.fdb_latexmk @@ -1,13 +1,13 @@ # Fdb version 3 -["makeindex pytexexam.idx"] 1578498507 "pytexexam.idx" "pytexexam.ind" "pytexexam" 1578498507 - "pytexexam.idx" 1578498489 5226 821a86412e8b80ccc742988521f2f1fc "pdflatex" +["makeindex pytexexam.idx"] 1615969248 "pytexexam.idx" "pytexexam.ind" "pytexexam" 1615969249 + "pytexexam.idx" 1615969249 3790 99e619ee27d7f25c8b2f586437f29e30 "pdflatex" (generated) "pytexexam.ilg" "pytexexam.ind" -["pdflatex"] 1578498507 "pytexexam.tex" "pytexexam.pdf" "pytexexam" 1578498507 - "/etc/texmf/web2c/texmf.cnf" 1572078632 475 c0e671620eb5563b2130f56340a5fde8 "" +["pdflatex"] 1615969248 "pytexexam.tex" "pytexexam.pdf" "pytexexam" 1615969249 + "/etc/texmf/web2c/texmf.cnf" 1599396789 475 c0e671620eb5563b2130f56340a5fde8 "" "/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc" 1165713224 4850 80dc9bab7f31fb78a000ccfed0e27cab "" - "/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1511824771 3332 103109f5612ad95229751940c61aada0 "" + "/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 "" "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrb8r.tfm" 1136768653 1292 3059476c50a24578715759f22652f3d0 "" "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrb8t.tfm" 1136768653 1384 87406e4336af44af883a035f17f319d9 "" "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8r.tfm" 1136768653 1292 bd42be2f344128bff6d35d98474adfe3 "" @@ -20,7 +20,6 @@ "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8t.tfm" 1136768653 7040 b2bd27e2bfe6f6948cbc3239cae7444f "" "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmb8r.tfm" 1136768653 4524 6bce29db5bc272ba5f332261583fee9c "" "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmb8t.tfm" 1136768653 6880 f19b8995b61c334d78fc734065f6b4d4 "" - "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8c.tfm" 1136768653 1352 fa28a7e6d323c65ce7d13d5342ff6be2 "" "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8r.tfm" 1136768653 4408 25b74d011a4c66b7f212c0cc3c90061b "" "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm" 1136768653 6672 e3ab9e37e925f3045c9005e6d1473d56 "" "/usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmri8r.tfm" 1136768653 4640 532ca3305aad10cc01d769f3f91f1029 "" @@ -53,115 +52,117 @@ "/usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvbo8t.vf" 1136768653 2344 88834f8322177295b0266ecc4b0754c3 "" "/usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvr8t.vf" 1136768653 2344 44ff28c9ef2fc97180cd884f900fee71 "" "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmb8t.vf" 1136768653 2340 df9c920cc5688ebbf16a93f45ce7bdd3 "" - "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8c.vf" 1136768653 3556 8a9a6dcbcd146ef985683f677f4758a6 "" "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8t.vf" 1136768653 2348 91706c542228501c410c266421fbe30c "" "/usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmri8t.vf" 1136768653 2328 6cd7df782b09b29cfc4d93e55b6b9a59 "" "/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii" 1461363279 71627 94eb9990bed73c364d7f53f960cc8c5b "" + "/usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty" 1575674566 24708 5584a51a7101caf7e6bbf1fc27d8f7b1 "" "/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf" 1496785618 7008 9ff5fdcc865b01beca2b0fe4a46231d4 "" - "/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def" 1559597743 78957 8ccc8f076dc1f8731a32705ec45dbe16 "" - "/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty" 1559597743 18663 65edfad510bf35b984c9a04cea039b73 "" - "/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def" 1559597743 14454 aa00ca21bfc3aea36987a00dd6acf23f "" - "/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def" 1559597743 5178 5b21c28f495420030a8aa1a19d21f35f "" - "/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty" 1284331290 1458 43ab4710dc82f3edeabecd0d099626b2 "" - "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty" 1463608860 7612 729a8cc22a1ee0029997c7f74717ae05 "" - "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty" 1463608860 8237 3b62ef1f7e2c23a328c814b3893bc11f "" - "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty" 1536701967 185392 b99a6d53180e04300c35e18725f31231 "" - "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty" 1465595255 70864 bcd5b216757bd619ae692a151d90085d "" - "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty" 1463608860 7324 2310d1247db0114eb4726807c8837a0e "" - "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty" 1536443070 1300 96620a7d94bc0ceb261d968770ce8315 "" - "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty" 1463608860 6797 90b7f83b0ad46826bc16058b1e3d48df "" - "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty" 1463608860 8253 473e0e41f9adadb1977e8631b8f72ea6 "" - "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty" 1463608860 14040 ac8866aac45982ac84021584b0abb252 "" - "/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty" 1463608860 18425 5b3c0c59d76fac78978b5558e83c1f36 "" + "/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def" 1581719732 87344 ec128793fb5196bbcc1741e5366ddac1 "" + "/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty" 1581719732 18844 909add1631725af40d27125357ea816e "" + "/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def" 1581719732 15529 e761dc130df77f0ce9717a25d1b52a95 "" + "/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def" 1580769195 5220 42a6518b499d20676051f269c61f4d9a "" + "/usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty" 1576625341 40635 c40361e206be584d448876bba8a64a3b "" + "/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty" 1576016050 33961 6b5c75130e435b2bfdb9f480a09a39f9 "" + "/usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty" 1576625273 7734 b98cbb34c81f667027c1e3ebdbfce34b "" + "/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty" 1576625223 8371 9d55b8bd010bc717624922fb3477d92e "" + "/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty" 1573336935 6902 30fdaf7dc5636b8e3afa306210c45cae "" + "/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty" 1572645307 1057 525c2192b5febbd8c1f662c9468335bb "" + "/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty" 1575499628 8356 7bbb2c2373aa810be568c29e333da8ed "" + "/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty" 1576625065 31769 002a487f55041f8e805cfbf6385ffd97 "" + "/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty" 1576878844 5412 d5a2436094cd7be85769db90f29250a6 "" + "/usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty" 1576624944 13807 952b0226d4efca026f0e19dd266dcc22 "" + "/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty" 1576624883 18552 1e1cc7b75da0dfaacce7cdcb27d306bf "" + "/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty" 1576015897 19007 15924f7228aca6c6d184b115f4baa231 "" + "/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty" 1576624663 7008 f92eaa0a3872ed622bbf538217cd2ab7 "" "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty" 1359763108 5949 3f3fd50a8cc94c3d4cbf4fc66cd3df1c "" "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty" 1359763108 13829 94730e64147574077f8ecfea9bb69af4 "" "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd" 1359763108 961 6518c6525a34feb5e8250ffa91731cff "" "/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd" 1359763108 961 d02606146ba5601b5645f987c92e6193 "" "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty" 1523134290 2211 ca7ce284ab93c8eecdc6029dc5ccbd73 "" "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty" 1523134290 4161 7f6eb9092061a11f87d08ed13515b48d "" - "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty" 1544567569 85093 77cfa18ddbae4d9b74ade33d843686d3 "" + "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty" 1580683321 85660 baee036978c7a91f4e2bba43f05e5945 "" "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty" 1523134290 4116 32e6abd27229755a83a8b7f18e583890 "" "/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty" 1523134290 2432 8ff93b1137020e8f21930562a874ae66 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty" 1523050425 3142 41d54e810bb4bed45b915ab99f1df119 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty" 1544567569 4573 e9e01f5b11821a77b916dad378cb86b8 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty" 1544567569 5052 b64c57f4a38aae0d2745f8298fa50814 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty" 1523050425 1942 125bdb0eb122d38c47905721b0682b1e "" - "/usr/share/texlive/texmf-dist/tex/latex/base/report.cls" 1544567569 22992 ac205d2578ad3f18cf73b50579632d1c "" - "/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo" 1544567569 8294 6d6e23d5169c0d89d173f6c7e08a005a "" - "/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def" 1544567569 10689 ce0f2353f9a1f42b29f591f3fe8e040a "" - "/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty" 1544567569 16156 a293f9cfd4f8552bb5d1028389f53e72 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd" 1523050425 2433 cdefd2509a12ba58001f2024f63aae9a "" - "/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def" 1523050425 7769 97b639552068544f7c98d557abb19f41 "" - "/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu" 1544567569 4973 923be56c54607ca99f7cc085a8c7e52b "" + "/usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty" 1576191570 19336 ce7ae9438967282886b3b036cfad1e4d "" + "/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty" 1576625391 3935 57aa3c3e203a5c2effb4d2bd2efbc323 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty" 1580683321 3140 3b501b609b11ff7320ce1a19dbac0e3b "" + "/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty" 1581632200 4947 0c2888dd88121ae675fc6e82213623ba "" + "/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty" 1580683321 5050 8933a39ad74377accd18991c5eb90c58 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty" 1580683321 1940 dd4f2aa11c89855a3c47d09758782ba5 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/report.cls" 1580683321 23082 a0e9a5941c744eda6abe56770037a201 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo" 1580683321 8446 9874cccac5fee462272c582807dbbf56 "" + "/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty" 1581112666 2821 2c0928feafd5527387e29a1af774d030 "" "/usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty" 1264379041 1311 063f8536a047a2d9cb1803321f793f37 "" "/usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty" 1215522782 2883 427a7f7cb58418a0394dbd85c80668f6 "" "/usr/share/texlive/texmf-dist/tex/latex/cmap/ot1.cmap" 1177721415 1207 4e0d96772f0d338847cbfb4eca683c81 "" "/usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap" 1215522782 1938 beaa4a8467aa0074076e0e19f2992e29 "" + "/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty" 1579991033 13886 d1306dcf79a944f6988e688c1785f9ce "" "/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty" 1548974385 11128 a53805799bebfed6358fc1658a18e41f "" - "/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty" 1547588382 42733 79eb4d8b9f10bca9c5d3796630226536 "" + "/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty" 1578950756 43158 eb6545ca94a288335910480ca6755b55 "" "/usr/share/texlive/texmf-dist/tex/latex/float/float.sty" 1137110151 6749 16d2656a1984957e674b149555f1ea1d "" "/usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty" 1292029257 19488 fdd52eb173b3197d748e1ec25acb042f "" "/usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty" 1338588508 22449 7ec15c16d0d66790f28e90343c5434a3 "" - "/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty" 1525727744 41645 0653033a985e06c69a2a9cea9a95e31a "" + "/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty" 1578002852 41601 9cf6c5257b1bc7af01a58859749dd37a "" "/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg" 1459978653 1213 620bba36b25224fa9b7e1ccb4ecb76fd "" "/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg" 1465944070 1224 978390e9c2234eab29404bc21b268d1e "" "/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def" 1515537368 17334 520b9b85ad8a2a48eda3f643e27a5179 "" - "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty" 1523134385 15272 5a97061616e0c8b2aa79c6615ff769f4 "" - "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty" 1523134385 9063 d0a305975932762117cd1f06a582f896 "" - "/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty" 1523134385 2591 6404d0c7d28505fb38ce0d86c2e28ae7 "" - "/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty" 1523134385 3977 cb9221976ed8a183afad65b59aa8629a "" - "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def" 1543704539 51744 477aad43ad6a7ba8c462d20c3e0808e0 "" - "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty" 1543704539 236074 d994150943d35d6af0d586a60cc78dd1 "" - "/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty" 1465687530 12949 81e4e808884a8f0e276b69410e234656 "" - "/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def" 1543704539 14098 b4e1ecab4699a0341b8e1349e4c53fb1 "" - "/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def" 1543704539 122411 537c1e113664b098b6572dbc27a726af "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty" 1580683321 16932 04729abe63b66ec59ea56edcd722b058 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty" 1580683321 9067 1b996612394a52e1efe89c8bfe8a5892 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty" 1580683321 2590 e3b24ff953e5b58d924f163d25380312 "" + "/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty" 1580683321 3976 d7fa7d81d2870d509d25b17d0245e735 "" + "/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty" 1580250785 17914 4c28a13fc3d975e6e81c9bea1d697276 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def" 1579642962 50630 3d9728faf8630190cf601ce2cbe470d9 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty" 1579642962 238752 60dd338d71b6a4ab2192131f73dc908b "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty" 1579642962 13244 0070bcab7b5a88187847128d22faf4d8 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def" 1579642962 14134 32b36577d311ddb6522413c7581ee968 "" + "/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def" 1579642962 122447 2f3bff59bea0a0fa94e11cc69e0f3066 "" + "/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty" 1575152344 22520 c4c2dab203104295e1e618be7e5c0f5b "" + "/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def" 1580854751 25404 9d60f463a00d154207ec0048dee27cf0 "" "/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg" 1279039959 678 4792914a8f45be57bb98413425e4c7af "" - "/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg" 1254097189 235 6031e5765137be07eed51a510b2b8fb7 "" + "/usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty" 1575499565 5766 13a9e8766c47f30327caf893ece86ac8 "" "/usr/share/texlive/texmf-dist/tex/latex/mmap/oml.cmap" 1215649417 1866 c1c12138091b4a8edd4a24a940e6f792 "" "/usr/share/texlive/texmf-dist/tex/latex/mmap/oms.cmap" 1215649417 2370 3b1f71b14b974f07cef532db09ae9ee0 "" "/usr/share/texlive/texmf-dist/tex/latex/mmap/omx.cmap" 1215649417 3001 252c8ca42b06a22cb1a11c0e47790c6e "" "/usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty" 1364856750 852 0e34dbb72efc69fa07602405ad95585e "" - "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty" 1463608860 3834 4363110eb0ef1eb2b71c8fcbcdb6c357 "" - "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty" 1463608860 12095 5337833c991d80788a43d3ce26bd1c46 "" - "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty" 1463608860 7075 2fe3d848bba95f139de11ded085e74aa "" - "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty" 1463608860 3720 63669daeb0b67d5fbec899824e2f1491 "" - "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty" 1463608860 22417 1d9df1eb66848aa31b18a593099cf45c "" - "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty" 1463608860 9581 023642318cef9f4677efe364de1e2a27 "" + "/usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty" 1575152444 3822 b53c749cd81352b4679a35b0dafefb95 "" "/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip-2001-04-09.sty" 1536789184 2757 ea00cb4f4e9abc702916f74d3812ef67 "" - "/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty" 1547677674 4152 3f6e512e6999979e82f39978a3e61b9e "" + "/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty" 1579802043 4151 bd592f37b856f80e699388b77e72d753 "" + "/usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty" 1574631863 19963 36fd8e818f9f0f32e2db8413d4970122 "" "/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1pcr.fd" 1137110629 798 d5895e9edc628f2be019beb2c0ec66df "" "/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1phv.fd" 1137110629 1488 9a55ac1cde6b4798a7f56844bb75a553 "" "/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd" 1137110629 774 61d7da1e9f9e74989b196d147e623736 "" "/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty" 1156702453 857 6c716f26c5eadfb81029fcd6ce2d45e6 "" - "/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd" 1137110629 619 96f56dc5d1ef1fe1121f1cfeec70ee0c "" + "/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty" 1576624809 9878 9e94e8fa600d95f9c7731bb21dfb67a4 "" + "/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty" 1575674187 9715 b051d5b493d9fe5f4bc251462d039e5f "" "/usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty" 1403566480 13791 8c83287d79183c3bf58fd70871e8a70b "" - "/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty" 1458858524 37387 afa86533e532701faf233f3f592c61e0 "" - "/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty" 1546812253 12527 31ab547f6520657998ecf91709f950ac "" - "/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty" 1546812253 12131 6791c5e94fb3ca8579d185a449d8b41e "" + "/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty" 1571259403 48596 2b6a95da931c07a430b1a61904aaa42d "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty" 1580683321 12560 ce3f59ceae9d9a27bfe037d6bf1d903c "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty" 1580683321 12133 b1e3e65b69714dbfcc5e6c0b19d66b50 "" + "/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty" 1580683321 31532 04852e45d7c17cb384689d2f83b628d3 "" "/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty" 1334873510 1048 517e01cde97c1c0baf72e69d43aa5a2e "" "/usr/share/texlive/texmf-dist/tex/latex/url/url.sty" 1388531844 12796 8edb7d69a20b857904dd0ea757c14ec9 "" "/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty" 1238697683 10894 d359a13923460b2a73d4312d613554c8 "" "/usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty" 1137111090 26220 3701aebf80ccdef248c0c20dd062fea9 "" "/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty" 1463002160 55589 34128738f682d033422ca125f82e5d62 "" - "/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1562720991 35073 2a40cfca74fcd5e2568b569ccaadf3f1 "" - "/usr/share/texmf/web2c/texmf.cnf" 1562720991 35073 2a40cfca74fcd5e2568b569ccaadf3f1 "" - "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1572079330 181146 288b41b0e055fcdf16cfc31e9d36ec50 "" - "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1575944287 1289389 878bbe82fae4cda38e9dd8ecc6731082 "" - "footnotehyper-sphinx.sty" 1574604546 8888 1bbd7bdeae8c8bed1d10d551bddb1cc9 "" - "pytexexam.aux" 1578498489 5088 389863301983b32f8959532c63f1f154 "pdflatex" - "pytexexam.ind" 1578498507 3776 c8e73896faf2d75f4f525f5ab8daa7bd "makeindex pytexexam.idx" - "pytexexam.out" 1578498489 514 6a62b5a35d2dc34207f518c9b1b5da50 "pdflatex" - "pytexexam.tex" 1578498484 21069 8a320efd55872dd7445b162040efd92a "" - "pytexexam.toc" 1578498489 289 d095198db3bc2ec47df9ed447f70db7e "pdflatex" - "sphinx.sty" 1574604546 77684 8fb97306ac83d50d8517c97072345a1d "" - "sphinxhighlight.sty" 1578498507 8137 38a433148fcb7611515a989ff1750dd5 "" - "sphinxmanual.cls" 1574604546 3764 e7c0a8da02dc45450256dd4cfdafb426 "" - "sphinxmessages.sty" 1578498507 731 4c7a75a0ce6092b44bece19aa46febe9 "" - "sphinxmulticell.sty" 1574604546 14618 0defbdc8536ad2e67f1eac6a1431bc55 "" + "/usr/share/texlive/texmf-dist/web2c/texmf.cnf" 1581979058 38841 ce3692aa899bb693b90b87eaa5d4d84e "" + "/usr/share/texmf/web2c/texmf.cnf" 1581979058 38841 ce3692aa899bb693b90b87eaa5d4d84e "" + "/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map" 1599396816 144194 e6c7723c5e81944dd71c3bb963662fa8 "" + "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1599396818 5067498 da53da32b8ffa5e240725cf5a2fc0f00 "" + "footnotehyper-sphinx.sty" 1615969033 13076 494d8d655f805dc10b53008469c289a2 "" + "pytexexam.aux" 1615969249 3875 8038fac2a69d93d93b1e312b626a2617 "pdflatex" + "pytexexam.ind" 1615969248 2925 6588c37668cbff5841565ce5874d7caf "makeindex pytexexam.idx" + "pytexexam.out" 1615969249 514 fa7ed81a6029e6460152d0d572e04853 "pdflatex" + "pytexexam.tex" 1615969247 13112 3ecb404f45a69492df4f25b8340144a8 "" + "pytexexam.toc" 1615969249 285 bbdba5e2e140d3286930073d553b7378 "pdflatex" + "sphinx.sty" 1615969033 91458 532cd893425be1ee8212ce283449999c "" + "sphinxhighlight.sty" 1615969247 8137 38a433148fcb7611515a989ff1750dd5 "" + "sphinxmanual.cls" 1615969033 4236 124cd90deb92742b5d3922bfc2cd70c0 "" + "sphinxmessages.sty" 1615969247 745 3f5fcd6cdd7964ed608767954a8ced6f "" + "sphinxmulticell.sty" 1615969033 14606 0b6edc2b1a83546ed92026d1f6a311b5 "" (generated) - "pytexexam.pdf" "pytexexam.idx" + "pytexexam.pdf" "pytexexam.out" "pytexexam.aux" - "pytexexam.log" "pytexexam.toc" + "pytexexam.log" diff --git a/docs/_build/latex/pytexexam.fls b/docs/_build/latex/pytexexam.fls index 21f1f5e..0313ac4 100755 --- a/docs/_build/latex/pytexexam.fls +++ b/docs/_build/latex/pytexexam.fls @@ -1,4 +1,4 @@ -PWD /home/binh/PycharmProjects/pytexexam/docs/_build/latex +PWD /home/binh/Data/PycharmProjects/pytexexam/docs/_build/latex INPUT /etc/texmf/web2c/texmf.cnf INPUT /usr/share/texmf/web2c/texmf.cnf INPUT /usr/share/texlive/texmf-dist/web2c/texmf.cnf @@ -17,8 +17,6 @@ INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def INPUT /usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map INPUT /usr/share/texlive/texmf-dist/fonts/tfm/jknappen/ec/ecrm1000.tfm INPUT /usr/share/texlive/texmf-dist/tex/latex/cmap/t1.cmap @@ -52,8 +50,8 @@ INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty INPUT sphinx.sty INPUT sphinx.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty @@ -70,10 +68,6 @@ INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty @@ -115,72 +109,85 @@ INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty INPUT sphinxhighlight.sty INPUT sphinxhighlight.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg -INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg +INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/url/url.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty INPUT sphinxmessages.sty INPUT sphinxmessages.sty OUTPUT pytexexam.idx +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def +INPUT /usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def INPUT pytexexam.aux INPUT pytexexam.aux OUTPUT pytexexam.aux -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd -INPUT /usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8t.tfm INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii INPUT /usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty -INPUT /usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg INPUT /usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty INPUT /usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty -INPUT /usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty +INPUT /usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +INPUT /usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty INPUT pytexexam.out INPUT pytexexam.out INPUT pytexexam.out @@ -250,9 +257,6 @@ INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/t1pcr.fd INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrb8t.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/courier/pcrr8t.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmri8t.tfm -INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd -INPUT /usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd -INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8c.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm INPUT /usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/symbols/msam7.tfm @@ -267,7 +271,6 @@ INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmri8t.vf INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmri8r.tfm INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8t.vf INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/times/ptmr8r.tfm -INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/times/ptmr8c.vf INPUT /usr/share/texlive/texmf-dist/fonts/vf/adobe/helvetic/phvr8t.vf INPUT /usr/share/texlive/texmf-dist/fonts/tfm/adobe/helvetic/phvr8r.tfm INPUT pytexexam.ind diff --git a/docs/_build/latex/pytexexam.idx b/docs/_build/latex/pytexexam.idx index 91da208..177c989 100755 --- a/docs/_build/latex/pytexexam.idx +++ b/docs/_build/latex/pytexexam.idx @@ -1,36 +1,28 @@ \indexentry{Answer (class in pytexexam.answer)@\spxentry{Answer}\spxextra{class in pytexexam.answer}|hyperpage}{1} -\indexentry{pytexexam.question (module)@\spxentry{pytexexam.question}\spxextra{module}|hyperpage}{1} +\indexentry{module@\spxentry{module}!pytexexam.question@\spxentry{pytexexam.question}|hyperpage}{1} +\indexentry{pytexexam.question@\spxentry{pytexexam.question}!module@\spxentry{module}|hyperpage}{1} \indexentry{Question (class in pytexexam.question)@\spxentry{Question}\spxextra{class in pytexexam.question}|hyperpage}{1} -\indexentry{answer\_a() (pytexexam.question.Question method)@\spxentry{answer\_a()}\spxextra{pytexexam.question.Question method}|hyperpage}{1} -\indexentry{answer\_b() (pytexexam.question.Question method)@\spxentry{answer\_b()}\spxextra{pytexexam.question.Question method}|hyperpage}{1} -\indexentry{answer\_c() (pytexexam.question.Question method)@\spxentry{answer\_c()}\spxextra{pytexexam.question.Question method}|hyperpage}{1} -\indexentry{answer\_d() (pytexexam.question.Question method)@\spxentry{answer\_d()}\spxextra{pytexexam.question.Question method}|hyperpage}{1} -\indexentry{answers() (pytexexam.question.Question method)@\spxentry{answers()}\spxextra{pytexexam.question.Question method}|hyperpage}{1} -\indexentry{get\_answer() (pytexexam.question.Question method)@\spxentry{get\_answer()}\spxextra{pytexexam.question.Question method}|hyperpage}{1} -\indexentry{get\_answer\_column() (pytexexam.question.Question method)@\spxentry{get\_answer\_column()}\spxextra{pytexexam.question.Question method}|hyperpage}{2} -\indexentry{get\_true\_answer() (pytexexam.question.Question method)@\spxentry{get\_true\_answer()}\spxextra{pytexexam.question.Question method}|hyperpage}{2} -\indexentry{question (pytexexam.question.Question attribute)@\spxentry{question}\spxextra{pytexexam.question.Question attribute}|hyperpage}{2} -\indexentry{set\_answer\_column() (pytexexam.question.Question method)@\spxentry{set\_answer\_column()}\spxextra{pytexexam.question.Question method}|hyperpage}{2} -\indexentry{shuffle\_answer() (pytexexam.question.Question method)@\spxentry{shuffle\_answer()}\spxextra{pytexexam.question.Question method}|hyperpage}{2} -\indexentry{solution() (pytexexam.question.Question method)@\spxentry{solution()}\spxextra{pytexexam.question.Question method}|hyperpage}{2} -\indexentry{pytexexam.exam (module)@\spxentry{pytexexam.exam}\spxextra{module}|hyperpage}{2} -\indexentry{Exam (class in pytexexam.exam)@\spxentry{Exam}\spxextra{class in pytexexam.exam}|hyperpage}{2} -\indexentry{question\_list (pytexexam.exam.Exam attribute)@\spxentry{question\_list}\spxextra{pytexexam.exam.Exam attribute}|hyperpage}{2} -\indexentry{shuffle\_question() (pytexexam.exam.Exam method)@\spxentry{shuffle\_question()}\spxextra{pytexexam.exam.Exam method}|hyperpage}{2} -\indexentry{pytexexam.latexexam (module)@\spxentry{pytexexam.latexexam}\spxextra{module}|hyperpage}{2} -\indexentry{LatexExam (class in pytexexam.latexexam)@\spxentry{LatexExam}\spxextra{class in pytexexam.latexexam}|hyperpage}{2} -\indexentry{add\_user\_preamble() (pytexexam.latexexam.LatexExam method)@\spxentry{add\_user\_preamble()}\spxextra{pytexexam.latexexam.LatexExam method}|hyperpage}{2} -\indexentry{exam\_content (pytexexam.latexexam.LatexExam attribute)@\spxentry{exam\_content}\spxextra{pytexexam.latexexam.LatexExam attribute}|hyperpage}{2} -\indexentry{exam\_header (pytexexam.latexexam.LatexExam attribute)@\spxentry{exam\_header}\spxextra{pytexexam.latexexam.LatexExam attribute}|hyperpage}{2} -\indexentry{exam\_title (pytexexam.latexexam.LatexExam attribute)@\spxentry{exam\_title}\spxextra{pytexexam.latexexam.LatexExam attribute}|hyperpage}{2} -\indexentry{export\_pdf\_answer() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_pdf\_answer()}\spxextra{pytexexam.latexexam.LatexExam method}|hyperpage}{2} -\indexentry{export\_pdf\_exam() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_pdf\_exam()}\spxextra{pytexexam.latexexam.LatexExam method}|hyperpage}{2} -\indexentry{export\_pdf\_solution() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_pdf\_solution()}\spxextra{pytexexam.latexexam.LatexExam method}|hyperpage}{3} -\indexentry{export\_tex\_answer() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_tex\_answer()}\spxextra{pytexexam.latexexam.LatexExam method}|hyperpage}{3} -\indexentry{export\_tex\_exam() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_tex\_exam()}\spxextra{pytexexam.latexexam.LatexExam method}|hyperpage}{3} -\indexentry{export\_tex\_solution() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_tex\_solution()}\spxextra{pytexexam.latexexam.LatexExam method}|hyperpage}{3} -\indexentry{question\_theorem (pytexexam.latexexam.LatexExam attribute)@\spxentry{question\_theorem}\spxextra{pytexexam.latexexam.LatexExam attribute}|hyperpage}{3} -\indexentry{solution\_theorem (pytexexam.latexexam.LatexExam attribute)@\spxentry{solution\_theorem}\spxextra{pytexexam.latexexam.LatexExam attribute}|hyperpage}{3} -\indexentry{user\_preamble (pytexexam.latexexam.LatexExam attribute)@\spxentry{user\_preamble}\spxextra{pytexexam.latexexam.LatexExam attribute}|hyperpage}{3} -\indexentry{pytexexam.latexexamutil (module)@\spxentry{pytexexam.latexexamutil}\spxextra{module}|hyperpage}{5} -\indexentry{ams\_math\_package() (in module pytexexam.latexexamutil)@\spxentry{ams\_math\_package()}\spxextra{in module pytexexam.latexexamutil}|hyperpage}{5} +\indexentry{answer\_column (pytexexam.question.Question attribute)@\spxentry{answer\_column}\spxextra{pytexexam.question.Question attribute}|hyperpage}{1} +\indexentry{answers (pytexexam.question.Question attribute)@\spxentry{answers}\spxextra{pytexexam.question.Question attribute}|hyperpage}{1} +\indexentry{get\_true\_answer\_key() (pytexexam.question.Question method)@\spxentry{get\_true\_answer\_key()}\spxextra{pytexexam.question.Question method}|hyperpage}{1} +\indexentry{print\_question\_latex() (pytexexam.question.Question method)@\spxentry{print\_question\_latex()}\spxextra{pytexexam.question.Question method}|hyperpage}{1} +\indexentry{print\_solution\_latex() (pytexexam.question.Question method)@\spxentry{print\_solution\_latex()}\spxextra{pytexexam.question.Question method}|hyperpage}{1} +\indexentry{question (pytexexam.question.Question attribute)@\spxentry{question}\spxextra{pytexexam.question.Question attribute}|hyperpage}{1} +\indexentry{shuffle\_answer() (pytexexam.question.Question method)@\spxentry{shuffle\_answer()}\spxextra{pytexexam.question.Question method}|hyperpage}{1} +\indexentry{solution (pytexexam.question.Question attribute)@\spxentry{solution}\spxextra{pytexexam.question.Question attribute}|hyperpage}{1} +\indexentry{module@\spxentry{module}!pytexexam.exam@\spxentry{pytexexam.exam}|hyperpage}{1} +\indexentry{pytexexam.exam@\spxentry{pytexexam.exam}!module@\spxentry{module}|hyperpage}{1} +\indexentry{Exam (class in pytexexam.exam)@\spxentry{Exam}\spxextra{class in pytexexam.exam}|hyperpage}{1} +\indexentry{question\_list (pytexexam.exam.Exam attribute)@\spxentry{question\_list}\spxextra{pytexexam.exam.Exam attribute}|hyperpage}{1} +\indexentry{shuffle\_question() (pytexexam.exam.Exam method)@\spxentry{shuffle\_question()}\spxextra{pytexexam.exam.Exam method}|hyperpage}{1} +\indexentry{module@\spxentry{module}!pytexexam.latexexam@\spxentry{pytexexam.latexexam}|hyperpage}{1} +\indexentry{pytexexam.latexexam@\spxentry{pytexexam.latexexam}!module@\spxentry{module}|hyperpage}{1} +\indexentry{LatexExamAnswer (class in pytexexam.latexexam)@\spxentry{LatexExamAnswer}\spxextra{class in pytexexam.latexexam}|hyperpage}{1} +\indexentry{get\_latex\_string() (pytexexam.latexexam.LatexExamAnswer method)@\spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamAnswer method}|hyperpage}{1} +\indexentry{LatexExamPaper (class in pytexexam.latexexam)@\spxentry{LatexExamPaper}\spxextra{class in pytexexam.latexexam}|hyperpage}{1} +\indexentry{get\_latex\_string() (pytexexam.latexexam.LatexExamPaper method)@\spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamPaper method}|hyperpage}{1} +\indexentry{LatexExamSolution (class in pytexexam.latexexam)@\spxentry{LatexExamSolution}\spxextra{class in pytexexam.latexexam}|hyperpage}{2} +\indexentry{get\_latex\_string() (pytexexam.latexexam.LatexExamSolution method)@\spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamSolution method}|hyperpage}{2} +\indexentry{module@\spxentry{module}!pytexexam.latexexamutil@\spxentry{pytexexam.latexexamutil}|hyperpage}{3} +\indexentry{pytexexam.latexexamutil@\spxentry{pytexexam.latexexamutil}!module@\spxentry{module}|hyperpage}{3} +\indexentry{ams\_math\_package() (in module pytexexam.latexexamutil)@\spxentry{ams\_math\_package()}\spxextra{in module pytexexam.latexexamutil}|hyperpage}{3} diff --git a/docs/_build/latex/pytexexam.ilg b/docs/_build/latex/pytexexam.ilg index e5a365f..3321471 100755 --- a/docs/_build/latex/pytexexam.ilg +++ b/docs/_build/latex/pytexexam.ilg @@ -1,7 +1,7 @@ This is makeindex, version 2.15 [TeX Live 2019] (kpathsea + Thai support). Scanning style file ./python.ist.......done (7 attributes redefined, 0 ignored). -Scanning input file pytexexam.idx....done (36 entries accepted, 0 rejected). -Sorting entries....done (206 comparisons). -Generating output file pytexexam.ind....done (77 lines written, 0 warnings). +Scanning input file pytexexam.idx....done (28 entries accepted, 0 rejected). +Sorting entries....done (163 comparisons). +Generating output file pytexexam.ind....done (69 lines written, 0 warnings). Output written in pytexexam.ind. Transcript written in pytexexam.ilg. diff --git a/docs/_build/latex/pytexexam.ind b/docs/_build/latex/pytexexam.ind index 6d2ab51..37433d7 100755 --- a/docs/_build/latex/pytexexam.ind +++ b/docs/_build/latex/pytexexam.ind @@ -5,73 +5,65 @@ \let\spxextra \sphinxstyleindexextra \bigletter A - \item \spxentry{add\_user\_preamble()}\spxextra{pytexexam.latexexam.LatexExam method}, - \hyperpage{2} - \item \spxentry{ams\_math\_package()}\spxextra{in module pytexexam.latexexamutil}, \hyperpage{5} + \item \spxentry{ams\_math\_package()}\spxextra{in module pytexexam.latexexamutil}, \hyperpage{3} \item \spxentry{Answer}\spxextra{class in pytexexam.answer}, \hyperpage{1} - \item \spxentry{answer\_a()}\spxextra{pytexexam.question.Question method}, \hyperpage{1} - \item \spxentry{answer\_b()}\spxextra{pytexexam.question.Question method}, \hyperpage{1} - \item \spxentry{answer\_c()}\spxextra{pytexexam.question.Question method}, \hyperpage{1} - \item \spxentry{answer\_d()}\spxextra{pytexexam.question.Question method}, \hyperpage{1} - \item \spxentry{answers()}\spxextra{pytexexam.question.Question method}, \hyperpage{1} + \item \spxentry{answer\_column}\spxextra{pytexexam.question.Question attribute}, \hyperpage{1} + \item \spxentry{answers}\spxextra{pytexexam.question.Question attribute}, \hyperpage{1} \indexspace \bigletter E - \item \spxentry{Exam}\spxextra{class in pytexexam.exam}, \hyperpage{2} - \item \spxentry{exam\_content}\spxextra{pytexexam.latexexam.LatexExam attribute}, \hyperpage{2} - \item \spxentry{exam\_header}\spxextra{pytexexam.latexexam.LatexExam attribute}, \hyperpage{2} - \item \spxentry{exam\_title}\spxextra{pytexexam.latexexam.LatexExam attribute}, \hyperpage{2} - \item \spxentry{export\_pdf\_answer()}\spxextra{pytexexam.latexexam.LatexExam method}, - \hyperpage{2} - \item \spxentry{export\_pdf\_exam()}\spxextra{pytexexam.latexexam.LatexExam method}, - \hyperpage{2} - \item \spxentry{export\_pdf\_solution()}\spxextra{pytexexam.latexexam.LatexExam method}, - \hyperpage{3} - \item \spxentry{export\_tex\_answer()}\spxextra{pytexexam.latexexam.LatexExam method}, - \hyperpage{3} - \item \spxentry{export\_tex\_exam()}\spxextra{pytexexam.latexexam.LatexExam method}, - \hyperpage{3} - \item \spxentry{export\_tex\_solution()}\spxextra{pytexexam.latexexam.LatexExam method}, - \hyperpage{3} + \item \spxentry{Exam}\spxextra{class in pytexexam.exam}, \hyperpage{1} \indexspace \bigletter G - \item \spxentry{get\_answer()}\spxextra{pytexexam.question.Question method}, \hyperpage{1} - \item \spxentry{get\_answer\_column()}\spxextra{pytexexam.question.Question method}, + \item \spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamAnswer method}, + \hyperpage{1} + \item \spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamPaper method}, + \hyperpage{1} + \item \spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamSolution method}, \hyperpage{2} - \item \spxentry{get\_true\_answer()}\spxextra{pytexexam.question.Question method}, \hyperpage{2} + \item \spxentry{get\_true\_answer\_key()}\spxextra{pytexexam.question.Question method}, + \hyperpage{1} \indexspace \bigletter L - \item \spxentry{LatexExam}\spxextra{class in pytexexam.latexexam}, \hyperpage{2} + \item \spxentry{LatexExamAnswer}\spxextra{class in pytexexam.latexexam}, \hyperpage{1} + \item \spxentry{LatexExamPaper}\spxextra{class in pytexexam.latexexam}, \hyperpage{1} + \item \spxentry{LatexExamSolution}\spxextra{class in pytexexam.latexexam}, \hyperpage{2} + + \indexspace + \bigletter M + \item \spxentry{module} + \subitem \spxentry{pytexexam.exam}, \hyperpage{1} + \subitem \spxentry{pytexexam.latexexam}, \hyperpage{1} + \subitem \spxentry{pytexexam.latexexamutil}, \hyperpage{3} + \subitem \spxentry{pytexexam.question}, \hyperpage{1} \indexspace \bigletter P - \item \spxentry{pytexexam.exam}\spxextra{module}, \hyperpage{2} - \item \spxentry{pytexexam.latexexam}\spxextra{module}, \hyperpage{2} - \item \spxentry{pytexexam.latexexamutil}\spxextra{module}, \hyperpage{5} - \item \spxentry{pytexexam.question}\spxextra{module}, \hyperpage{1} + \item \spxentry{print\_question\_latex()}\spxextra{pytexexam.question.Question method}, + \hyperpage{1} + \item \spxentry{print\_solution\_latex()}\spxextra{pytexexam.question.Question method}, + \hyperpage{1} + \item \spxentry{pytexexam.exam} + \subitem \spxentry{module}, \hyperpage{1} + \item \spxentry{pytexexam.latexexam} + \subitem \spxentry{module}, \hyperpage{1} + \item \spxentry{pytexexam.latexexamutil} + \subitem \spxentry{module}, \hyperpage{3} + \item \spxentry{pytexexam.question} + \subitem \spxentry{module}, \hyperpage{1} \indexspace \bigletter Q \item \spxentry{Question}\spxextra{class in pytexexam.question}, \hyperpage{1} - \item \spxentry{question}\spxextra{pytexexam.question.Question attribute}, \hyperpage{2} - \item \spxentry{question\_list}\spxextra{pytexexam.exam.Exam attribute}, \hyperpage{2} - \item \spxentry{question\_theorem}\spxextra{pytexexam.latexexam.LatexExam attribute}, - \hyperpage{3} + \item \spxentry{question}\spxextra{pytexexam.question.Question attribute}, \hyperpage{1} + \item \spxentry{question\_list}\spxextra{pytexexam.exam.Exam attribute}, \hyperpage{1} \indexspace \bigletter S - \item \spxentry{set\_answer\_column()}\spxextra{pytexexam.question.Question method}, - \hyperpage{2} - \item \spxentry{shuffle\_answer()}\spxextra{pytexexam.question.Question method}, \hyperpage{2} - \item \spxentry{shuffle\_question()}\spxextra{pytexexam.exam.Exam method}, \hyperpage{2} - \item \spxentry{solution()}\spxextra{pytexexam.question.Question method}, \hyperpage{2} - \item \spxentry{solution\_theorem}\spxextra{pytexexam.latexexam.LatexExam attribute}, - \hyperpage{3} - - \indexspace - \bigletter U - \item \spxentry{user\_preamble}\spxextra{pytexexam.latexexam.LatexExam attribute}, \hyperpage{3} + \item \spxentry{shuffle\_answer()}\spxextra{pytexexam.question.Question method}, \hyperpage{1} + \item \spxentry{shuffle\_question()}\spxextra{pytexexam.exam.Exam method}, \hyperpage{1} + \item \spxentry{solution}\spxextra{pytexexam.question.Question attribute}, \hyperpage{1} \end{sphinxtheindex} diff --git a/docs/_build/latex/pytexexam.log b/docs/_build/latex/pytexexam.log index 5482419..9d6e008 100755 --- a/docs/_build/latex/pytexexam.log +++ b/docs/_build/latex/pytexexam.log @@ -1,30 +1,32 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2019.12.10) 8 JAN 2020 22:48 +This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2020.9.6) 17 MAR 2021 15:20 entering extended mode restricted \write18 enabled. %&-line parsing enabled. **pytexexam.tex (./pytexexam.tex -LaTeX2e <2018-12-01> -(./sphinxmanual.cls -Document Class: sphinxmanual 2018/12/23 v2.0 Document class (Sphinx manual) +LaTeX2e <2020-02-02> patch level 2 +L3 programming layer <2020-02-14> (./sphinxmanual.cls +Document Class: sphinxmanual 2019/12/01 v2.3.0 Document class (Sphinx manual) (/usr/share/texlive/texmf-dist/tex/latex/base/report.cls -Document Class: report 2018/09/03 v1.4i Standard LaTeX document class +Document Class: report 2019/12/20 v1.4l Standard LaTeX document class (/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo -File: size10.clo 2018/09/03 v1.4i Standard LaTeX file (size option) -) -\c@part=\count80 -\c@chapter=\count81 -\c@section=\count82 -\c@subsection=\count83 -\c@subsubsection=\count84 -\c@paragraph=\count85 -\c@subparagraph=\count86 -\c@figure=\count87 -\c@table=\count88 -\abovecaptionskip=\skip41 -\belowcaptionskip=\skip42 -\bibindent=\dimen102 -)) +File: size10.clo 2019/12/20 v1.4l Standard LaTeX file (size option) +) +\c@part=\count167 +\c@chapter=\count168 +\c@section=\count169 +\c@subsection=\count170 +\c@subsubsection=\count171 +\c@paragraph=\count172 +\c@subparagraph=\count173 +\c@figure=\count174 +\c@table=\count175 +\abovecaptionskip=\skip47 +\belowcaptionskip=\skip48 +\bibindent=\dimen134 +) +LaTeX Info: Redefining \and on input line 35. +) (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty Package: inputenc 2018/08/11 v1.3c Input encoding file \inpenc@prehook=\toks14 @@ -41,15 +43,11 @@ Package: inputenc 2018/08/11 v1.3c Input encoding file Package: cmap 2008/03/06 v1.0h CMap support: searchable PDF ) (/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty -Package: fontenc 2018/08/11 v2.0j Standard LaTeX package - -(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def -File: t1enc.def 2018/08/11 v2.0j Standard LaTeX file -LaTeX Font Info: Redeclaring font encoding T1 on input line 48. -)<>) +Package: fontenc 2020/02/11 v2.0o Standard LaTeX package +<>) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2018/12/01 v2.17b AMS math features -\@mathmargin=\skip43 +Package: amsmath 2020/01/20 v2.17e AMS math features +\@mathmargin=\skip49 For additional information on amsmath, use the `?' option. (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty @@ -58,52 +56,52 @@ Package: amstext 2000/06/29 v2.01 AMS text (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty File: amsgen.sty 1999/11/30 v2.0 generic functions \@emptytoks=\toks16 -\ex@=\dimen103 +\ex@=\dimen135 )) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen104 +\pmbraise@=\dimen136 ) (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty Package: amsopn 2016/03/08 v2.02 operator names ) -\inf@bad=\count89 -LaTeX Info: Redefining \frac on input line 223. -\uproot@=\count90 -\leftroot@=\count91 -LaTeX Info: Redefining \overline on input line 385. -\classnum@=\count92 -\DOTSCASE@=\count93 -LaTeX Info: Redefining \ldots on input line 482. -LaTeX Info: Redefining \dots on input line 485. -LaTeX Info: Redefining \cdots on input line 606. -\Mathstrutbox@=\box27 -\strutbox@=\box28 -\big@size=\dimen105 -LaTeX Font Info: Redeclaring font encoding OML on input line 729. -LaTeX Font Info: Redeclaring font encoding OMS on input line 730. -\macc@depth=\count94 -\c@MaxMatrixCols=\count95 -\dotsspace@=\muskip10 -\c@parentequation=\count96 -\dspbrk@lvl=\count97 +\inf@bad=\count176 +LaTeX Info: Redefining \frac on input line 227. +\uproot@=\count177 +\leftroot@=\count178 +LaTeX Info: Redefining \overline on input line 389. +\classnum@=\count179 +\DOTSCASE@=\count180 +LaTeX Info: Redefining \ldots on input line 486. +LaTeX Info: Redefining \dots on input line 489. +LaTeX Info: Redefining \cdots on input line 610. +\Mathstrutbox@=\box45 +\strutbox@=\box46 +\big@size=\dimen137 +LaTeX Font Info: Redeclaring font encoding OML on input line 733. +LaTeX Font Info: Redeclaring font encoding OMS on input line 734. +\macc@depth=\count181 +\c@MaxMatrixCols=\count182 +\dotsspace@=\muskip16 +\c@parentequation=\count183 +\dspbrk@lvl=\count184 \tag@help=\toks17 -\row@=\count98 -\column@=\count99 -\maxfields@=\count100 +\row@=\count185 +\column@=\count186 +\maxfields@=\count187 \andhelp@=\toks18 -\eqnshift@=\dimen106 -\alignsep@=\dimen107 -\tagshift@=\dimen108 -\tagwidth@=\dimen109 -\totwidth@=\dimen110 -\lineht@=\dimen111 +\eqnshift@=\dimen138 +\alignsep@=\dimen139 +\tagshift@=\dimen140 +\tagwidth@=\dimen141 +\totwidth@=\dimen142 +\lineht@=\dimen143 \@envbody=\toks19 -\multlinegap=\skip44 -\multlinetaggap=\skip45 +\multlinegap=\skip50 +\multlinetaggap=\skip51 \mathdisplay@stack=\toks20 -LaTeX Info: Redefining \[ on input line 2844. -LaTeX Info: Redefining \] on input line 2845. +LaTeX Info: Redefining \[ on input line 2859. +LaTeX Info: Redefining \] on input line 2860. ) (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty Package: amssymb 2013/01/14 v3.01 AMS font symbols @@ -112,59 +110,68 @@ Package: amssymb 2013/01/14 v3.01 AMS font symbols Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support \symAMSa=\mathgroup4 \symAMSb=\mathgroup5 +LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' (Font) U/euf/m/n --> U/euf/b/n on input line 106. )) (/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty -Package: babel 2019/06/03 3.32 The Babel package +Package: babel 2020/02/14 3.40 The Babel package (/usr/share/texlive/texmf-dist/tex/generic/babel/switch.def -File: switch.def 2019/06/03 3.32 Babel switching mechanism +File: switch.def 2020/02/14 3.40 Babel switching mechanism ) (/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf Language: english 2017/06/06 v3.3r English support from the babel system (/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def -File: babel.def 2019/06/03 3.32 Babel common definitions -\babel@savecnt=\count101 -\U@D=\dimen112 +File: babel.def 2020/02/14 3.40 Babel common definitions +\babel@savecnt=\count188 +\U@D=\dimen144 (/usr/share/texlive/texmf-dist/tex/generic/babel/txtbabel.def) -\bbl@dirlevel=\count102 -) -\l@canadian = a dialect from \language\l@american -\l@australian = a dialect from \language\l@british -\l@newzealand = a dialect from \language\l@british +\bbl@readstream=\read2 +\bbl@dirlevel=\count189 +) +Package babel Info: \l@british = using hyphenrules for english +(babel) (\language0) on input line 82. +Package babel Info: \l@UKenglish = using hyphenrules for english +(babel) (\language0) on input line 83. +Package babel Info: \l@canadian = using hyphenrules for english +(babel) (\language0) on input line 102. +Package babel Info: \l@australian = using hyphenrules for english +(babel) (\language0) on input line 105. +Package babel Info: \l@newzealand = using hyphenrules for english +(babel) (\language0) on input line 108. )) (/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty Package: times 2005/04/12 PSNFSS-v9.2a (SPQR) ) (/usr/share/texlive/texmf-dist/tex/latex/fncychap/fncychap.sty Package: fncychap 2007/07/30 v1.34 LaTeX package (Revised chapters) -\RW=\skip46 -\mylen=\skip47 -\myhi=\skip48 -\px=\skip49 -\py=\skip50 -\pyy=\skip51 -\pxx=\skip52 -\c@AlphaCnt=\count103 -\c@AlphaDecCnt=\count104 +\RW=\skip52 +\mylen=\skip53 +\myhi=\skip54 +\px=\skip55 +\py=\skip56 +\pyy=\skip57 +\pxx=\skip58 +\c@AlphaCnt=\count190 +\c@AlphaDecCnt=\count191 ) (./sphinx.sty -Package: sphinx 2019/09/02 v2.2.1 LaTeX package (Sphinx markup) +Package: sphinx 2021/01/23 v3.5.0 LaTeX package (Sphinx markup) -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty -Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO) +(/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +Package: ltxcmds 2019/12/15 v1.24 LaTeX kernel commands for general use (HO) ) (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR) +Package: graphicx 2019/11/30 v1.2a Enhanced LaTeX Graphics (DPC,SPQR) (/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty Package: keyval 2014/10/28 v1.15 key=value parser (DPC) \KV@toks@=\toks21 ) (/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR) +Package: graphics 2019/11/30 v1.4a Standard LaTeX Graphics (DPC,SPQR) (/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty Package: trig 2016/01/03 v1.10 sin cos tan (DPC) @@ -172,255 +179,101 @@ Package: trig 2016/01/03 v1.10 sin cos tan (DPC) (/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration ) -Package graphics Info: Driver file: pdftex.def on input line 99. +Package graphics Info: Driver file: pdftex.def on input line 105. (/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def File: pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex )) -\Gin@req@height=\dimen113 -\Gin@req@width=\dimen114 +\Gin@req@height=\dimen145 +\Gin@req@width=\dimen146 ) (/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty Package: fancyhdr 2019/01/31 v3.10 Extensive control of page headers and footer s -\f@nch@headwidth=\skip53 -\f@nch@O@elh=\skip54 -\f@nch@O@erh=\skip55 -\f@nch@O@olh=\skip56 -\f@nch@O@orh=\skip57 -\f@nch@O@elf=\skip58 -\f@nch@O@erf=\skip59 -\f@nch@O@olf=\skip60 -\f@nch@O@orf=\skip61 +\f@nch@headwidth=\skip59 +\f@nch@O@elh=\skip60 +\f@nch@O@erh=\skip61 +\f@nch@O@olh=\skip62 +\f@nch@O@orh=\skip63 +\f@nch@O@elf=\skip64 +\f@nch@O@erf=\skip65 +\f@nch@O@olf=\skip66 +\f@nch@O@orf=\skip67 ) (/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty -Package: textcomp 2018/08/11 v2.0j Standard LaTeX package -Package textcomp Info: Sub-encoding information: -(textcomp) 5 = only ISO-Adobe without \textcurrency -(textcomp) 4 = 5 + \texteuro -(textcomp) 3 = 4 + \textohm -(textcomp) 2 = 3 + \textestimated + \textcurrency -(textcomp) 1 = TS1 - \textcircled - \t -(textcomp) 0 = TS1 (full) -(textcomp) Font families with sub-encoding setting implement -(textcomp) only a restricted character set as indicated. -(textcomp) Family '?' is the default used for unknown fonts. -(textcomp) See the documentation for details. -Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 79. - -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def -File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file -Now handling font encoding TS1 ... -... processing UTF-8 mapping file for font encoding TS1 - -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu -File: ts1enc.dfu 2018/10/05 v1.2f UTF-8 support for inputenc - defining Unicode char U+00A2 (decimal 162) - defining Unicode char U+00A3 (decimal 163) - defining Unicode char U+00A4 (decimal 164) - defining Unicode char U+00A5 (decimal 165) - defining Unicode char U+00A6 (decimal 166) - defining Unicode char U+00A7 (decimal 167) - defining Unicode char U+00A8 (decimal 168) - defining Unicode char U+00A9 (decimal 169) - defining Unicode char U+00AA (decimal 170) - defining Unicode char U+00AC (decimal 172) - defining Unicode char U+00AE (decimal 174) - defining Unicode char U+00AF (decimal 175) - defining Unicode char U+00B0 (decimal 176) - defining Unicode char U+00B1 (decimal 177) - defining Unicode char U+00B2 (decimal 178) - defining Unicode char U+00B3 (decimal 179) - defining Unicode char U+00B4 (decimal 180) - defining Unicode char U+00B5 (decimal 181) - defining Unicode char U+00B6 (decimal 182) - defining Unicode char U+00B7 (decimal 183) - defining Unicode char U+00B9 (decimal 185) - defining Unicode char U+00BA (decimal 186) - defining Unicode char U+00BC (decimal 188) - defining Unicode char U+00BD (decimal 189) - defining Unicode char U+00BE (decimal 190) - defining Unicode char U+00D7 (decimal 215) - defining Unicode char U+00F7 (decimal 247) - defining Unicode char U+0192 (decimal 402) - defining Unicode char U+02C7 (decimal 711) - defining Unicode char U+02D8 (decimal 728) - defining Unicode char U+02DD (decimal 733) - defining Unicode char U+0E3F (decimal 3647) - defining Unicode char U+2016 (decimal 8214) - defining Unicode char U+2020 (decimal 8224) - defining Unicode char U+2021 (decimal 8225) - defining Unicode char U+2022 (decimal 8226) - defining Unicode char U+2030 (decimal 8240) - defining Unicode char U+2031 (decimal 8241) - defining Unicode char U+203B (decimal 8251) - defining Unicode char U+203D (decimal 8253) - defining Unicode char U+2044 (decimal 8260) - defining Unicode char U+204E (decimal 8270) - defining Unicode char U+2052 (decimal 8274) - defining Unicode char U+20A1 (decimal 8353) - defining Unicode char U+20A4 (decimal 8356) - defining Unicode char U+20A6 (decimal 8358) - defining Unicode char U+20A9 (decimal 8361) - defining Unicode char U+20AB (decimal 8363) - defining Unicode char U+20AC (decimal 8364) - defining Unicode char U+20B1 (decimal 8369) - defining Unicode char U+2103 (decimal 8451) - defining Unicode char U+2116 (decimal 8470) - defining Unicode char U+2117 (decimal 8471) - defining Unicode char U+211E (decimal 8478) - defining Unicode char U+2120 (decimal 8480) - defining Unicode char U+2122 (decimal 8482) - defining Unicode char U+2126 (decimal 8486) - defining Unicode char U+2127 (decimal 8487) - defining Unicode char U+212E (decimal 8494) - defining Unicode char U+2190 (decimal 8592) - defining Unicode char U+2191 (decimal 8593) - defining Unicode char U+2192 (decimal 8594) - defining Unicode char U+2193 (decimal 8595) - defining Unicode char U+2329 (decimal 9001) - defining Unicode char U+232A (decimal 9002) - defining Unicode char U+2422 (decimal 9250) - defining Unicode char U+25E6 (decimal 9702) - defining Unicode char U+25EF (decimal 9711) - defining Unicode char U+266A (decimal 9834) - defining Unicode char U+FEFF (decimal 65279) -)) -LaTeX Info: Redefining \oldstylenums on input line 334. -Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 349. -Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 350. -Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 351. -Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 352. -Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 353. -Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 354. -Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 355. -Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 356. -Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 357. -Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 358. -Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 359. -Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 360. -Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 361. -Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 362. -Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 363. -Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 364. -Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 365. -Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 366. -Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 367. -Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 368. -Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 369. -Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 370. -Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 371. -Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 372. - -Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 373. -Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 374. -Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 375. -Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 376. -Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 377. -Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 378. -Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 379. -Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 380. -Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 381. -Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 382. -Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 383. -Package textcomp Info: Setting lmtt sub-encoding to TS1/0 on input line 384. -Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 385. -Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 386. -Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 387. -Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 388. -Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 389. -Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 390. -Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 391. -Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 392. -Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 393. -Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 394. -Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 395. -Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 396. -Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 397. -Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 398. -Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 399. -Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 400. -Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 401. -Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 402. -Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 403. -Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 404. -Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 405. -Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 406. -Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 407. -Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 408. -Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 409. +Package: textcomp 2020/02/02 v2.0n Standard LaTeX package ) (/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty -Package: titlesec 2016/03/21 v2.10.2 Sectioning titles -\ttl@box=\box29 -\beforetitleunit=\skip62 -\aftertitleunit=\skip63 -\ttl@plus=\dimen115 -\ttl@minus=\dimen116 +Package: titlesec 2019/10/16 v2.13 Sectioning titles +\ttl@box=\box47 +\beforetitleunit=\skip68 +\aftertitleunit=\skip69 +\ttl@plus=\dimen147 +\ttl@minus=\dimen148 \ttl@toksa=\toks22 -\titlewidth=\dimen117 -\titlewidthlast=\dimen118 -\titlewidthfirst=\dimen119 +\titlewidth=\dimen149 +\titlewidthlast=\dimen150 +\titlewidthfirst=\dimen151 ) (/usr/share/texlive/texmf-dist/tex/latex/tabulary/tabulary.sty Package: tabulary 2014/06/11 v0.10 tabulary package (DPC) (/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty -Package: array 2018/12/30 v2.4k Tabular extension package (FMi) -\col@sep=\dimen120 -\ar@mcellbox=\box30 -\extrarowheight=\dimen121 +Package: array 2019/08/31 v2.4l Tabular extension package (FMi) +\col@sep=\dimen152 +\ar@mcellbox=\box48 +\extrarowheight=\dimen153 \NC@list=\toks23 -\extratabsurround=\skip64 -\backup@length=\skip65 -\ar@cellbox=\box31 +\extratabsurround=\skip70 +\backup@length=\skip71 +\ar@cellbox=\box49 ) -\TY@count=\count105 -\TY@linewidth=\dimen122 -\tymin=\dimen123 -\tymax=\dimen124 -\TY@tablewidth=\dimen125 +\TY@count=\count192 +\TY@linewidth=\dimen154 +\tymin=\dimen155 +\tymax=\dimen156 +\TY@tablewidth=\dimen157 ) (/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty -Package: longtable 2014/10/28 v4.11 Multi-page Table package (DPC)+ FMi change -\LTleft=\skip66 -\LTright=\skip67 -\LTpre=\skip68 -\LTpost=\skip69 -\LTchunksize=\count106 -\LTcapwidth=\dimen126 -\LT@head=\box32 -\LT@firsthead=\box33 -\LT@foot=\box34 -\LT@lastfoot=\box35 -\LT@cols=\count107 -\LT@rows=\count108 -\c@LT@tables=\count109 -\c@LT@chunks=\count110 +Package: longtable 2020/01/07 v4.13 Multi-page Table package (DPC) +\LTleft=\skip72 +\LTright=\skip73 +\LTpre=\skip74 +\LTpost=\skip75 +\LTchunksize=\count193 +\LTcapwidth=\dimen158 +\LT@head=\box50 +\LT@firsthead=\box51 +\LT@foot=\box52 +\LT@lastfoot=\box53 +\LT@cols=\count194 +\LT@rows=\count195 +\c@LT@tables=\count196 +\c@LT@chunks=\count197 \LT@p@ftn=\toks24 ) (/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty Package: varwidth 2009/03/30 ver 0.92; Variable-width minipages -\@vwid@box=\box36 -\sift@deathcycles=\count111 -\@vwid@loff=\dimen127 -\@vwid@roff=\dimen128 +\@vwid@box=\box54 +\sift@deathcycles=\count198 +\@vwid@loff=\dimen159 +\@vwid@roff=\dimen160 ) (./sphinxmulticell.sty Package: sphinxmulticell 2017/02/23 v1.6 better span rows and columns of a tabl e (Sphinx team) -\sphinx@TY@tablewidth=\dimen129 +\sphinx@TY@tablewidth=\dimen161 ) (/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty Package: makeidx 2014/09/29 v1.0m Standard LaTeX package ) (/usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks -\OuterFrameSep=\skip70 -\fb@frw=\dimen130 -\fb@frh=\dimen131 -\FrameRule=\dimen132 -\FrameSep=\dimen133 +\OuterFrameSep=\skip76 +\fb@frw=\dimen162 +\fb@frh=\dimen163 +\FrameRule=\dimen164 +\FrameSep=\dimen165 ) (/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty Package: xcolor 2016/05/11 v2.12 LaTeX color extensions (UK) @@ -440,34 +293,35 @@ Package xcolor Info: Model `Gray' substituted by `gray' on input line 1370. Package xcolor Info: Model `wave' substituted by `hsb' on input line 1371. ) (/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty -Package: fancyvrb 2019/01/15 - -Style option: `fancyvrb' v3.2a <2019/01/15> (tvz) -\FV@CodeLineNo=\count112 -\FV@InFile=\read1 -\FV@TabBox=\box37 -\c@FancyVerbLine=\count113 -\FV@StepNumber=\count114 +Package: fancyvrb 2020/01/13 v3.5 verbatim text (tvz,hv) +\FV@CodeLineNo=\count199 +\FV@InFile=\read3 +\FV@TabBox=\box55 +\c@FancyVerbLine=\count266 +\FV@StepNumber=\count267 \FV@OutFile=\write3 -) (./footnotehyper-sphinx.sty -Package: footnotehyper-sphinx 2017/10/27 v1.7 hyperref aware footnote.sty for s -phinx (JFB) -\FNH@notes=\box38 -\FNH@width=\dimen134 -) (/usr/share/texlive/texmf-dist/tex/latex/float/float.sty +) +(./footnotehyper-sphinx.sty +Package: footnotehyper-sphinx 2021/02/04 v1.1d hyperref aware footnote.sty for +sphinx (JFB) +\FNH@notes=\box56 +\FNH@toks=\toks25 +\FNH@width=\dimen166 +) +(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty Package: float 2001/11/08 v1.3d Float enhancements (AL) -\c@float@type=\count115 -\float@exts=\toks25 -\float@box=\box39 -\@float@everytoks=\toks26 -\@floatcapt=\box40 +\c@float@type=\count268 +\float@exts=\toks26 +\float@box=\box57 +\@float@everytoks=\toks27 +\@floatcapt=\box58 ) (/usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty -\wrapoverhang=\dimen135 -\WF@size=\dimen136 -\c@WF@wrappedlines=\count116 -\WF@box=\box41 -\WF@everypar=\toks27 +\wrapoverhang=\dimen167 +\WF@size=\dimen168 +\c@WF@wrappedlines=\count269 +\WF@box=\box59 +\WF@everypar=\toks28 Package: wrapfig 2003/01/31 v 3.6 ) (/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty @@ -490,178 +344,246 @@ Package: capt-of 2009/12/29 v0.2 standard captions outside of floats (/usr/share/texlive/texmf-dist/tex/latex/needspace/needspace.sty Package: needspace 2010/09/12 v1.3d reserve vertical space ) +(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty +Package: multicol 2019/12/09 v1.8y multicolumn formatting (FMi) +\c@tracingmulticols=\count270 +\mult@box=\box60 +\multicol@leftmargin=\dimen169 +\c@unbalance=\count271 +\c@collectmore=\count272 +\doublecol@number=\count273 +\multicoltolerance=\count274 +\multicolpretolerance=\count275 +\full@width=\dimen170 +\page@free=\dimen171 +\premulticols=\dimen172 +\postmulticols=\dimen173 +\multicolsep=\skip77 +\multicolbaselineskip=\skip78 +\partial@page=\box61 +\last@line=\box62 +\maxbalancingoverflow=\dimen174 +\mult@rightbox=\box63 +\mult@grightbox=\box64 +\mult@gfirstbox=\box65 +\mult@firstbox=\box66 +\@tempa=\box67 +\@tempa=\box68 +\@tempa=\box69 +\@tempa=\box70 +\@tempa=\box71 +\@tempa=\box72 +\@tempa=\box73 +\@tempa=\box74 +\@tempa=\box75 +\@tempa=\box76 +\@tempa=\box77 +\@tempa=\box78 +\@tempa=\box79 +\@tempa=\box80 +\@tempa=\box81 +\@tempa=\box82 +\@tempa=\box83 +\@tempa=\box84 +\@tempa=\box85 +\@tempa=\box86 +\@tempa=\box87 +\@tempa=\box88 +\@tempa=\box89 +\@tempa=\box90 +\@tempa=\box91 +\@tempa=\box92 +\@tempa=\box93 +\@tempa=\box94 +\@tempa=\box95 +\@tempa=\box96 +\@tempa=\box97 +\@tempa=\box98 +\@tempa=\box99 +\@tempa=\box100 +\@tempa=\box101 +\@tempa=\box102 +\@tempa=\box103 +\c@minrows=\count276 +\c@columnbadness=\count277 +\c@finalcolumnbadness=\count278 +\last@try=\dimen175 +\multicolovershoot=\dimen176 +\multicolundershoot=\dimen177 +\mult@nat@firstbox=\box104 +\colbreak@box=\box105 +\mc@col@check@num=\count279 +) (./sphinxhighlight.sty Package: sphinxhighlight 2016/05/29 stylesheet for highlighting with pygments ) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty -Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO) - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty -Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO) - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty -Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO) -) -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/etexcmds.sty -Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO) - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifluatex.sty -Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO) -Package ifluatex Info: LuaTeX not detected. -)))) -\sphinxverbatimsep=\dimen137 -\sphinxverbatimborder=\dimen138 -\sphinxshadowsep=\dimen139 -\sphinxshadowsize=\dimen140 -\sphinxshadowrule=\dimen141 -\spx@notice@border=\dimen142 -\spx@image@maxheight=\dimen143 -\spx@image@box=\dimen144 -\c@literalblock=\count117 -\sphinxcontinuationbox=\box42 -\sphinxvisiblespacebox=\box43 -\sphinxVerbatim@TitleBox=\box44 -\py@argswidth=\skip71 -\lineblockindentation=\skip72 -\DUlineblockindent=\skip73 +(/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty +Package: kvoptions 2019/11/29 v3.13 Key value format for package options (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/kvsetkeys/kvsetkeys.sty +Package: kvsetkeys 2019/12/15 v1.18 Key value parser (HO) +)) +\sphinxverbatimsep=\dimen178 +\sphinxverbatimborder=\dimen179 +\sphinxshadowsep=\dimen180 +\sphinxshadowsize=\dimen181 +\sphinxshadowrule=\dimen182 +\spx@notice@border=\dimen183 +\spx@image@maxheight=\dimen184 +\spx@image@box=\box106 +\c@sphinxscope=\count280 +\c@sphinxexplicit=\count281 +\sphinxcontinuationbox=\box107 +\sphinxvisiblespacebox=\box108 +\sphinxVerbatim@TitleBox=\box109 +\sphinxVerbatim@ContentsBox=\box110 +\spx@scratchbox=\box111 +\py@argswidth=\skip79 +\lineblockindentation=\skip80 +\DUlineblockindent=\skip81 ) (/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty -Package: geometry 2018/04/16 v5.8 Page Geometry - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty -Package: ifpdf 2018/09/07 v3.3 Provides the ifpdf switch -) -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty -Package: ifvtex 2016/05/16 v1.6 Detect VTeX and its facilities (HO) -Package ifvtex Info: VTeX not detected. -) -(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty -Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional -) -\Gm@cnth=\count118 -\Gm@cntv=\count119 -\c@Gm@tempcnt=\count120 -\Gm@bindingoffset=\dimen145 -\Gm@wd@mp=\dimen146 -\Gm@odd@mp=\dimen147 -\Gm@even@mp=\dimen148 -\Gm@layoutwidth=\dimen149 -\Gm@layoutheight=\dimen150 -\Gm@layouthoffset=\dimen151 -\Gm@layoutvoffset=\dimen152 -\Gm@dimlist=\toks28 +Package: geometry 2020/01/02 v5.9 Page Geometry + +(/usr/share/texlive/texmf-dist/tex/generic/iftex/ifvtex.sty +Package: ifvtex 2019/10/25 v1.7 ifvtex legacy package. Use iftex instead. + +(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty +Package: iftex 2019/11/07 v1.0c TeX engine tests +)) +\Gm@cnth=\count282 +\Gm@cntv=\count283 +\c@Gm@tempcnt=\count284 +\Gm@bindingoffset=\dimen185 +\Gm@wd@mp=\dimen186 +\Gm@odd@mp=\dimen187 +\Gm@even@mp=\dimen188 +\Gm@layoutwidth=\dimen189 +\Gm@layoutheight=\dimen190 +\Gm@layouthoffset=\dimen191 +\Gm@layoutvoffset=\dimen192 +\Gm@dimlist=\toks29 ) (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -Package: hyperref 2018/11/30 v6.88e Hypertext links for LaTeX - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty -Package: hobsub-hyperref 2016/05/16 v1.14 Bundle oberdiek, subset hyperref (HO) - - -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty -Package: hobsub-generic 2016/05/16 v1.14 Bundle oberdiek, subset generic (HO) -Package: hobsub 2016/05/16 v1.14 Construct package bundles (HO) -Package hobsub Info: Skipping package `infwarerr' (already loaded). -Package hobsub Info: Skipping package `ltxcmds' (already loaded). -Package hobsub Info: Skipping package `ifluatex' (already loaded). -Package hobsub Info: Skipping package `ifvtex' (already loaded). -Package: intcalc 2016/05/16 v1.2 Expandable calculations with integers (HO) -Package hobsub Info: Skipping package `ifpdf' (already loaded). -Package hobsub Info: Skipping package `etexcmds' (already loaded). -Package hobsub Info: Skipping package `kvsetkeys' (already loaded). -Package: kvdefinekeys 2016/05/16 v1.4 Define keys (HO) -Package: pdftexcmds 2018/09/10 v0.29 Utility functions of pdfTeX for LuaTeX (HO -) -Package pdftexcmds Info: LuaTeX not detected. +Package: hyperref 2020/01/14 v7.00d Hypertext links for LaTeX + +(/usr/share/texlive/texmf-dist/tex/latex/pdftexcmds/pdftexcmds.sty +Package: pdftexcmds 2019/11/24 v0.31 Utility functions of pdfTeX for LuaTeX (HO +) + +(/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty +Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) +) Package pdftexcmds Info: \pdf@primitive is available. Package pdftexcmds Info: \pdf@ifprimitive is available. Package pdftexcmds Info: \pdfdraftmode found. -Package: pdfescape 2016/05/16 v1.14 Implements pdfTeX's escape features (HO) -Package: bigintcalc 2016/05/16 v1.4 Expandable calculations on big integers (HO ) -Package: bitset 2016/05/16 v1.2 Handle bit-vector datatype (HO) -Package: uniquecounter 2016/05/16 v1.3 Provide unlimited unique counter (HO) +(/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) ) -Package hobsub Info: Skipping package `hobsub' (already loaded). -Package: letltxmacro 2016/05/16 v1.5 Let assignment for LaTeX macros (HO) -Package: hopatch 2016/05/16 v1.3 Wrapper for package hooks (HO) -Package: xcolor-patch 2016/05/16 xcolor patch -Package: atveryend 2016/05/16 v1.9 Hooks at the very end of document (HO) -Package atveryend Info: \enddocument detected (standard20110627). -Package: atbegshi 2016/06/09 v1.18 At begin shipout hook (HO) -Package: refcount 2016/05/16 v3.5 Data extraction from label references (HO) -Package: hycolor 2016/05/16 v1.8 Color options for hyperref/bookmark (HO) +(/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty +Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) +) +(/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty +Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) +) +(/usr/share/texlive/texmf-dist/tex/latex/letltxmacro/letltxmacro.sty +Package: letltxmacro 2019/12/03 v1.6 Let assignment for LaTeX macros (HO) ) -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty -Package: auxhook 2016/05/16 v1.4 Hooks for auxiliary files (HO) +(/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty +Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) ) -\@linkdim=\dimen153 -\Hy@linkcounter=\count121 -\Hy@pagecounter=\count122 +\@linkdim=\dimen193 +\Hy@linkcounter=\count285 +\Hy@pagecounter=\count286 (/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def -File: pd1enc.def 2018/11/30 v6.88e Hyperref: PDFDocEncoding definition (HO) +File: pd1enc.def 2020/01/14 v7.00d Hyperref: PDFDocEncoding definition (HO) Now handling font encoding PD1 ... ... no UTF-8 mapping file for font encoding PD1 ) -\Hy@SavedSpaceFactor=\count123 - -(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg -File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive +(/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty +Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) +) +(/usr/share/texlive/texmf-dist/tex/generic/etexcmds/etexcmds.sty +Package: etexcmds 2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO) ) -Package hyperref Info: Option `unicode' set `true' on input line 4393. +\Hy@SavedSpaceFactor=\count287 +\pdfmajorversion=\count288 +Package hyperref Info: Option `unicode' set `true' on input line 4421. (/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def -File: puenc.def 2018/11/30 v6.88e Hyperref: PDF Unicode definition (HO) +File: puenc.def 2020/01/14 v7.00d Hyperref: PDF Unicode definition (HO) Now handling font encoding PU ... ... no UTF-8 mapping file for font encoding PU ) -Package hyperref Info: Option `colorlinks' set `true' on input line 4393. -Package hyperref Info: Option `breaklinks' set `true' on input line 4393. -Package hyperref Info: Hyper figures OFF on input line 4519. -Package hyperref Info: Link nesting OFF on input line 4524. -Package hyperref Info: Hyper index ON on input line 4527. -Package hyperref Info: Plain pages OFF on input line 4534. -Package hyperref Info: Backreferencing OFF on input line 4539. +Package hyperref Info: Option `colorlinks' set `true' on input line 4421. +Package hyperref Info: Option `breaklinks' set `true' on input line 4421. +Package hyperref Info: Hyper figures OFF on input line 4547. +Package hyperref Info: Link nesting OFF on input line 4552. +Package hyperref Info: Hyper index ON on input line 4555. +Package hyperref Info: Plain pages OFF on input line 4562. +Package hyperref Info: Backreferencing OFF on input line 4567. Package hyperref Info: Implicit mode ON; LaTeX internals redefined. -Package hyperref Info: Bookmarks ON on input line 4772. -\c@Hy@tempcnt=\count124 +Package hyperref Info: Bookmarks ON on input line 4800. +\c@Hy@tempcnt=\count289 (/usr/share/texlive/texmf-dist/tex/latex/url/url.sty -\Urlmuskip=\muskip11 +\Urlmuskip=\muskip17 Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. ) -LaTeX Info: Redefining \url on input line 5125. -\XeTeXLinkMargin=\dimen154 -\Fld@menulength=\count125 -\Field@Width=\dimen155 -\Fld@charsize=\dimen156 -Package hyperref Info: Hyper figures OFF on input line 6380. -Package hyperref Info: Link nesting OFF on input line 6385. -Package hyperref Info: Hyper index ON on input line 6388. -Package hyperref Info: backreferencing OFF on input line 6395. -Package hyperref Info: Link coloring ON on input line 6398. -Package hyperref Info: Link coloring with OCG OFF on input line 6405. -Package hyperref Info: PDF/A mode OFF on input line 6410. -LaTeX Info: Redefining \ref on input line 6450. -LaTeX Info: Redefining \pageref on input line 6454. -\Hy@abspage=\count126 -\c@Item=\count127 -\c@Hfootnote=\count128 +LaTeX Info: Redefining \url on input line 5159. +\XeTeXLinkMargin=\dimen194 + +(/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty +Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty +Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO +) +)) +\Fld@menulength=\count290 +\Field@Width=\dimen195 +\Fld@charsize=\dimen196 +Package hyperref Info: Hyper figures OFF on input line 6430. +Package hyperref Info: Link nesting OFF on input line 6435. +Package hyperref Info: Hyper index ON on input line 6438. +Package hyperref Info: backreferencing OFF on input line 6445. +Package hyperref Info: Link coloring ON on input line 6448. +Package hyperref Info: Link coloring with OCG OFF on input line 6455. +Package hyperref Info: PDF/A mode OFF on input line 6460. +LaTeX Info: Redefining \ref on input line 6500. +LaTeX Info: Redefining \pageref on input line 6504. + +(/usr/share/texlive/texmf-dist/tex/generic/atbegshi/atbegshi.sty +Package: atbegshi 2019/12/05 v1.19 At begin shipout hook (HO) +) +\Hy@abspage=\count291 +\c@Item=\count292 +\c@Hfootnote=\count293 ) Package hyperref Info: Driver (autodetected): hpdftex. (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def -File: hpdftex.def 2018/11/30 v6.88e Hyperref driver for pdfTeX -\Fld@listcount=\count129 -\c@bookmark@seq@number=\count130 +File: hpdftex.def 2020/01/14 v7.00d Hyperref driver for pdfTeX -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty -Package: rerunfilecheck 2016/05/16 v1.8 Rerun checks for auxiliary files (HO) +(/usr/share/texlive/texmf-dist/tex/latex/atveryend/atveryend.sty +Package: atveryend 2019-12-11 v1.11 Hooks at the very end of document (HO) +Package atveryend Info: \enddocument detected (standard20110627). +) +\Fld@listcount=\count294 +\c@bookmark@seq@number=\count295 + +(/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty +Package: rerunfilecheck 2019/12/05 v1.9 Rerun checks for auxiliary files (HO) + +(/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty +Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) +) Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 -82. +86. ) -\Hy@SectionHShift=\skip74 +\Hy@SectionHShift=\skip82 ) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty Package: hypcap 2016/05/16 v1.12 Adjusting the anchors of captions (HO) @@ -674,66 +596,61 @@ Package: sphinxmessages 2019/01/04 v2.0 Localized LaTeX macros (Sphinx team) Writing index file pytexexam.idx +(/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def +File: l3backend-pdfmode.def 2020-02-03 L3 backend support: PDF mode +\l__kernel_color_stack_int=\count296 +\l__pdf_internal_box=\box112 +) (./pytexexam.aux) \openout1 = `pytexexam.aux'. -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 81. -LaTeX Font Info: ... okay on input line 81. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 81. -LaTeX Font Info: ... okay on input line 81. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 81. -LaTeX Font Info: ... okay on input line 81. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 81. -LaTeX Font Info: ... okay on input line 81. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 81. -LaTeX Font Info: ... okay on input line 81. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 81. -LaTeX Font Info: ... okay on input line 81. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 81. -LaTeX Font Info: Try loading font information for TS1+cmr on input line 81. - (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd -File: ts1cmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions -) -LaTeX Font Info: ... okay on input line 81. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 81. -LaTeX Font Info: ... okay on input line 81. -LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 81. -LaTeX Font Info: ... okay on input line 81. -LaTeX Font Info: Try loading font information for T1+ptm on input line 81. - -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 83. +LaTeX Font Info: ... okay on input line 83. +LaTeX Font Info: Trying to load font information for T1+ptm on input line 83 +. + (/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd File: t1ptm.fd 2001/06/04 font definitions for T1/ptm. ) (/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii [Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count131 -\scratchdimen=\dimen157 -\scratchbox=\box45 -\nofMPsegments=\count132 -\nofMParguments=\count133 -\everyMPshowfont=\toks29 -\MPscratchCnt=\count134 -\MPscratchDim=\dimen158 -\MPnumerator=\count135 -\makeMPintoPDFobject=\count136 -\everyMPtoPDFconversion=\toks30 -) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty -Package: epstopdf-base 2016/05/15 v2.6 Base part for package epstopdf - -(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty -Package: grfext 2016/05/16 v1.2 Manage graphics extensions (HO) -) +\scratchcounter=\count297 +\scratchdimen=\dimen197 +\scratchbox=\box113 +\nofMPsegments=\count298 +\nofMParguments=\count299 +\everyMPshowfont=\toks30 +\MPscratchCnt=\count300 +\MPscratchDim=\dimen198 +\MPnumerator=\count301 +\makeMPintoPDFobject=\count302 +\everyMPtoPDFconversion=\toks31 +) (/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 -38. -Package grfext Info: Graphics extension search list: -(grfext) [.pdf,.png,.jpg,.mps,.jpeg,.jbig2,.jb2,.PDF,.PNG,.JPG,.JPE -G,.JBIG2,.JB2,.eps] -(grfext) \AppendGraphicsExtensions on input line 456. +85. (/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv e )) +\c@literalblock=\count303 + *geometry* driver: auto-detecting *geometry* detected driver: pdftex *geometry* verbose mode - [ preamble ] result: @@ -768,69 +685,56 @@ e * \@reversemarginfalse * (1in=72.27pt=25.4mm, 1cm=28.453pt) -\AtBeginShipoutBox=\box46 -Package hyperref Info: Link coloring ON on input line 81. +\AtBeginShipoutBox=\box114 +Package hyperref Info: Link coloring ON on input line 83. (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -Package: nameref 2016/05/21 v2.44 Cross-referencing by name of section +Package: nameref 2019/09/16 v2.46 Cross-referencing by name of section -(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty -Package: gettitlestring 2016/05/16 v1.5 Cleanup title references (HO) +(/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty +Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) +) +(/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty +Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) ) -\c@section@level=\count137 +\c@section@level=\count304 ) -LaTeX Info: Redefining \ref on input line 81. -LaTeX Info: Redefining \pageref on input line 81. -LaTeX Info: Redefining \nameref on input line 81. +LaTeX Info: Redefining \ref on input line 83. +LaTeX Info: Redefining \pageref on input line 83. +LaTeX Info: Redefining \nameref on input line 83. (./pytexexam.out) (./pytexexam.out) \@outlinefile=\write5 \openout5 = `pytexexam.out'. -Package hyperref Info: Option `pageanchor' set `false' on input line 84. -LaTeX Font Info: Try loading font information for T1+phv on input line 84. +Package hyperref Info: Option `pageanchor' set `false' on input line 86. +LaTeX Font Info: Trying to load font information for T1+phv on input line 86 +. (/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1phv.fd File: t1phv.fd 2001/06/04 scalable font definitions for T1/phv. ) -LaTeX Font Info: Font shape `T1/phv/bx/n' in size <10> not available -(Font) Font shape `T1/phv/b/n' tried instead on input line 84. -LaTeX Font Info: Font shape `T1/phv/bx/n' in size <24.88> not available -(Font) Font shape `T1/phv/b/n' tried instead on input line 84. -LaTeX Font Info: Font shape `T1/phv/bx/it' in size <10> not available -(Font) Font shape `T1/phv/b/it' tried instead on input line 84. LaTeX Font Info: Font shape `T1/phv/b/it' in size <10> not available -(Font) Font shape `T1/phv/b/sl' tried instead on input line 84. -LaTeX Font Info: Font shape `T1/phv/bx/it' in size <17.28> not available -(Font) Font shape `T1/phv/b/it' tried instead on input line 84. +(Font) Font shape `T1/phv/b/sl' tried instead on input line 86. LaTeX Font Info: Font shape `T1/phv/b/it' in size <17.28> not available -(Font) Font shape `T1/phv/b/sl' tried instead on input line 84. -LaTeX Font Info: Font shape `T1/phv/bx/n' in size <17.28> not available -(Font) Font shape `T1/phv/b/n' tried instead on input line 84. +(Font) Font shape `T1/phv/b/sl' tried instead on input line 86. <><><><> -LaTeX Font Info: Try loading font information for U+msa on input line 84. +LaTeX Font Info: Trying to load font information for U+msa on input line 86. + (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd File: umsa.fd 2013/01/14 v3.01 AMS symbols A ) -LaTeX Font Info: Try loading font information for U+msb on input line 84. +LaTeX Font Info: Trying to load font information for U+msb on input line 86. + (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) -LaTeX Font Info: Font shape `T1/phv/bx/n' in size <12> not available -(Font) Font shape `T1/phv/b/n' tried instead on input line 84. - [1 +) [1 {/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2 -] -LaTeX Font Info: Font shape `T1/phv/bx/n' in size <14.4> not available -(Font) Font shape `T1/phv/b/n' tried instead on input line 86. - (./pytexexam.toc -LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <10> not available -(Font) Font shape `T1/ptm/b/n' tried instead on input line 2. -) +] (./pytexexam.toc) \tf@toc=\write6 \openout6 = `pytexexam.toc'. @@ -840,165 +744,115 @@ LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <10> not available ] Chapter 1. -LaTeX Font Info: Try loading font information for T1+pcr on input line 96. +LaTeX Font Info: Trying to load font information for T1+pcr on input line 98 +. (/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1pcr.fd File: t1pcr.fd 2001/06/04 font definitions for T1/pcr. -) -LaTeX Font Info: Font shape `T1/pcr/bx/n' in size <10> not available -(Font) Font shape `T1/pcr/b/n' tried instead on input line 96. -LaTeX Font Info: Try loading font information for TS1+ptm on input line 113. - - -(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd -File: ts1ptm.fd 2001/06/04 font definitions for TS1/ptm. ) [1 -] - -! Package inputenc Error: Unicode character ​ (U+200B) -(inputenc) not set up for use with LaTeX. - -See the inputenc package documentation for explanation. -Type H for immediate help. - ... - -l.258 ...ing the question. The possible values ​ - ​are 1, 2, 4 -? - -! Package inputenc Error: Unicode character ​ (U+200B) -(inputenc) not set up for use with LaTeX. - -See the inputenc package documentation for explanation. -Type H for immediate help. - ... - -l.258 ... the question. The possible values ​​ - are 1, 2, 4 -? -[2] [3] [4 - -] +] [2] Chapter 2. -[5] [6 +[3 -] [7 +] [4 +] [5 -] (./pytexexam.ind [8 - -] -Underfull \hbox (badness 10000) in paragraph at lines 8--10 -[]\T1/pcr/m/n/10 add_user_preamble() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- - [] +] (./pytexexam.ind [6 -Underfull \hbox (badness 10000) in paragraph at lines 10--11 +] +Underfull \hbox (badness 10000) in paragraph at lines 8--9 []\T1/pcr/m/n/10 ams_math_package() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 in mod-ule py-tex- [] -Underfull \hbox (badness 7595) in paragraph at lines 22--23 -[]\T1/pcr/m/n/10 exam_header \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex-exam.latexe -xam.LatexExam at- +Underfull \hbox (badness 10000) in paragraph at lines 10--11 +[]\T1/pcr/m/n/10 answer_column \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex-exam.ques +tion.Question at- [] -Underfull \hbox (badness 10000) in paragraph at lines 23--24 -[]\T1/pcr/m/n/10 exam_title \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex-exam.latexex -am.LatexExam at- +Underfull \hbox (badness 10000) in paragraph at lines 19--21 +[]\T1/pcr/m/n/10 get_latex_string() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- [] -Underfull \hbox (badness 10000) in paragraph at lines 24--26 -[]\T1/pcr/m/n/10 export_pdf_answer() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- +Underfull \hbox (badness 10000) in paragraph at lines 19--21 +\T1/ptm/m/it/10 exam.latexexam.LatexExamAnswer method\T1/ptm/m/n/10 ), [] -Underfull \hbox (badness 10000) in paragraph at lines 26--28 -[]\T1/pcr/m/n/10 export_pdf_exam() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- +Underfull \hbox (badness 10000) in paragraph at lines 21--23 +[]\T1/pcr/m/n/10 get_latex_string() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- [] -Underfull \hbox (badness 10000) in paragraph at lines 28--30 -[]\T1/pcr/m/n/10 export_pdf_solution() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- +Underfull \hbox (badness 10000) in paragraph at lines 21--23 +\T1/ptm/m/it/10 exam.latexexam.LatexExamPaper method\T1/ptm/m/n/10 ), [] -Underfull \hbox (badness 10000) in paragraph at lines 30--32 -[]\T1/pcr/m/n/10 export_tex_answer() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- +Underfull \hbox (badness 10000) in paragraph at lines 23--25 +[]\T1/pcr/m/n/10 get_latex_string() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- [] -Underfull \hbox (badness 10000) in paragraph at lines 32--34 -[]\T1/pcr/m/n/10 export_tex_exam() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- +Underfull \hbox (badness 10000) in paragraph at lines 23--25 +\T1/ptm/m/it/10 exam.latexexam.LatexExamSolution method\T1/ptm/m/n/10 ), [] -Underfull \hbox (badness 10000) in paragraph at lines 34--36 -[]\T1/pcr/m/n/10 export_tex_solution() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- +Underfull \hbox (badness 10000) in paragraph at lines 25--27 +[]\T1/pcr/m/n/10 get_true_answer_key() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- [] -Underfull \hbox (badness 10000) in paragraph at lines 39--40 -[]\T1/pcr/m/n/10 get_answer() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex-exam.quest -ion.Question - [] - +Underfull \hbox (badness 10000) in paragraph at lines 44--46 +[]\T1/pcr/m/n/10 print_question_latex() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- -Underfull \hbox (badness 10000) in paragraph at lines 40--42 -[]\T1/pcr/m/n/10 get_answer_column() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- [] -Underfull \hbox (badness 10000) in paragraph at lines 60--62 -[]\T1/pcr/m/n/10 question_theorem \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- - [] - +Underfull \hbox (badness 10000) in paragraph at lines 46--48 +[]\T1/pcr/m/n/10 print_solution_latex() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- -Underfull \hbox (badness 10000) in paragraph at lines 65--67 -[]\T1/pcr/m/n/10 set_answer_column() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- [] -Underfull \hbox (badness 10000) in paragraph at lines 67--68 +Underfull \hbox (badness 10000) in paragraph at lines 65--66 []\T1/pcr/m/n/10 shuffle_answer() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex-exam.q uestion.Question [] -Underfull \hbox (badness 10000) in paragraph at lines 68--69 +Underfull \hbox (badness 10000) in paragraph at lines 66--67 []\T1/pcr/m/n/10 shuffle_question() \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex-exam .exam.Exam [] - -Underfull \hbox (badness 10000) in paragraph at lines 70--72 -[]\T1/pcr/m/n/10 solution_theorem \T1/ptm/m/n/10 (\T1/ptm/m/it/10 py-tex- - [] - -[9 +[7 ]) -Package atveryend Info: Empty hook `BeforeClearDocument' on input line 468. -Package atveryend Info: Empty hook `AfterLastShipout' on input line 468. +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 292. +Package atveryend Info: Empty hook `AfterLastShipout' on input line 292. (./pytexexam.aux) -Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 468. -Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 468. +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 292. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 292. Package rerunfilecheck Info: File `pytexexam.out' has not changed. -(rerunfilecheck) Checksum: 6A62B5A35D2DC34207F518C9B1B5DA50;514. -Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 468. +(rerunfilecheck) Checksum: FA7ED81A6029E6460152D0D572E04853;514. +Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 292. ) Here is how much of TeX's memory you used: - 13403 strings out of 493927 - 188206 string characters out of 6164105 - 285903 words of memory out of 5000000 - 16896 multiletter control sequences out of 15000+600000 - 43594 words of font info for 63 fonts, out of 8000000 for 9000 - 332 hyphenation exceptions out of 8191 - 37i,11n,45p,356b,532s stack positions out of 5000i,500n,10000p,200000b,80000s + 13614 strings out of 482671 + 193075 string characters out of 5955619 + 468197 words of memory out of 5000000 + 28424 multiletter control sequences out of 15000+600000 + 571978 words of font info for 72 fonts, out of 8000000 for 9000 + 265 hyphenation exceptions out of 8191 + 38i,11n,49p,593b,506s stack positions out of 5000i,500n,10000p,200000b,80000s {/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc} -Output written on pytexexam.pdf (13 pages, 106012 bytes). +Output written on pytexexam.pdf (11 pages, 101239 bytes). PDF statistics: - 214 PDF objects out of 1000 (max. 8388607) - 183 compressed objects within 2 object streams - 53 named destinations out of 1000 (max. 500000) + 183 PDF objects out of 1000 (max. 8388607) + 154 compressed objects within 2 object streams + 39 named destinations out of 1000 (max. 500000) 53 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/docs/_build/latex/pytexexam.out b/docs/_build/latex/pytexexam.out index 8e8b0db..47a075b 100755 --- a/docs/_build/latex/pytexexam.out +++ b/docs/_build/latex/pytexexam.out @@ -1,4 +1,4 @@ \BOOKMARK [0][-]{chapter.1}{\376\377\000P\000y\000t\000e\000x\000e\000x\000a\000m\000\040\000m\000a\000i\000n\000\040\000c\000l\000a\000s\000s}{}% 1 \BOOKMARK [0][-]{chapter.2}{\376\377\000P\000y\000t\000e\000x\000e\000x\000a\000m\000\040\000u\000t\000i\000l\000\040\000c\000l\000a\000s\000s}{}% 2 -\BOOKMARK [0][-]{section*.38}{\376\377\000P\000y\000t\000h\000o\000n\000\040\000M\000o\000d\000u\000l\000e\000\040\000I\000n\000d\000e\000x}{}% 3 -\BOOKMARK [0][-]{section*.39}{\376\377\000I\000n\000d\000e\000x}{}% 4 +\BOOKMARK [0][-]{section*.26}{\376\377\000P\000y\000t\000h\000o\000n\000\040\000M\000o\000d\000u\000l\000e\000\040\000I\000n\000d\000e\000x}{}% 3 +\BOOKMARK [0][-]{section*.27}{\376\377\000I\000n\000d\000e\000x}{}% 4 diff --git a/docs/_build/latex/pytexexam.pdf b/docs/_build/latex/pytexexam.pdf index 98ea01c..a544dfa 100755 Binary files a/docs/_build/latex/pytexexam.pdf and b/docs/_build/latex/pytexexam.pdf differ diff --git a/docs/_build/latex/pytexexam.tex b/docs/_build/latex/pytexexam.tex index 0e5551a..f0897d4 100755 --- a/docs/_build/latex/pytexexam.tex +++ b/docs/_build/latex/pytexexam.tex @@ -58,12 +58,14 @@ \fvset{fontsize=\small} \usepackage{geometry} + % Include hyperref last. \usepackage{hyperref} % Fix anchor placement for figures with captions. \usepackage{hypcap}% it must be loaded after hyperref. % Set up styles of URL: it should be placed after hyperref. \urlstyle{same} + \addto\captionsenglish{\renewcommand{\contentsname}{Contents:}} \usepackage{sphinxmessages} @@ -72,7 +74,7 @@ \title{pytexexam} -\date{Jan 08, 2020} +\date{Mar 17, 2021} \release{1.3} \author{Vu Ngoc Binh} \newcommand{\sphinxlogo}{\vbox{}} @@ -93,205 +95,104 @@ \chapter{Pytexexam main class} \label{\detokenize{index:pytexexam-main-class}}\index{Answer (class in pytexexam.answer)@\spxentry{Answer}\spxextra{class in pytexexam.answer}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.answer.Answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.answer.}}\sphinxbfcode{\sphinxupquote{Answer}}}{\emph{answer: str = ''}, \emph{is\_true\_answer=False}}{} -This class is used to store 1 answer in a exam question. +\phantomsection\label{\detokenize{index:pytexexam.answer.Answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.answer.}}\sphinxbfcode{\sphinxupquote{Answer}}}{\emph{\DUrole{n}{answer\_key}\DUrole{p}{:} \DUrole{n}{str}}, \emph{\DUrole{n}{answer}\DUrole{p}{:} \DUrole{n}{str}}, \emph{\DUrole{n}{is\_true\_answer}\DUrole{o}{=}\DUrole{default_value}{False}}}{} +\sphinxAtStartPar +This class is used to store 1 answer in a question. \end{fulllineitems} -\phantomsection\label{\detokenize{index:module-pytexexam.question}}\index{pytexexam.question (module)@\spxentry{pytexexam.question}\spxextra{module}}\index{Question (class in pytexexam.question)@\spxentry{Question}\spxextra{class in pytexexam.question}} +\phantomsection\label{\detokenize{index:module-pytexexam.question}}\index{module@\spxentry{module}!pytexexam.question@\spxentry{pytexexam.question}}\index{pytexexam.question@\spxentry{pytexexam.question}!module@\spxentry{module}}\index{Question (class in pytexexam.question)@\spxentry{Question}\spxextra{class in pytexexam.question}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.question.}}\sphinxbfcode{\sphinxupquote{Question}}}{\emph{question: str}}{} +\phantomsection\label{\detokenize{index:pytexexam.question.Question}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.question.}}\sphinxbfcode{\sphinxupquote{Question}}}{\emph{\DUrole{n}{question}\DUrole{p}{:} \DUrole{n}{str}}, \emph{\DUrole{n}{answers}\DUrole{p}{:} \DUrole{n}{List\DUrole{p}{{[}}str\DUrole{p}{{]}}}}, \emph{\DUrole{n}{true\_answer}\DUrole{p}{:} \DUrole{n}{str}}, \emph{\DUrole{n}{solution}\DUrole{p}{:} \DUrole{n}{str}}, \emph{\DUrole{n}{answer\_column}\DUrole{p}{:} \DUrole{n}{int}}}{} +\sphinxAtStartPar This class represents one question on the test. -\index{answer\_a() (pytexexam.question.Question method)@\spxentry{answer\_a()}\spxextra{pytexexam.question.Question method}} +\index{answer\_column (pytexexam.question.Question attribute)@\spxentry{answer\_column}\spxextra{pytexexam.question.Question attribute}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.answer_a}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{answer\_a}}}{\emph{answer: str}, \emph{true\_answer=False}}{} -This method is used to enter answer A for the question. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode\begin{itemize} -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{answer}} \textendash{} Content of the answer A - -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{true\_answer}} \textendash{} If this is the correct answer then enter True. otherwise False - -\end{itemize} - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.answer_column}}\pysigline{\sphinxbfcode{\sphinxupquote{answer\_column}}} +\sphinxAtStartPar +Number of columns for which the answer will be presented. \end{fulllineitems} -\index{answer\_b() (pytexexam.question.Question method)@\spxentry{answer\_b()}\spxextra{pytexexam.question.Question method}} +\index{answers (pytexexam.question.Question attribute)@\spxentry{answers}\spxextra{pytexexam.question.Question attribute}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.answer_b}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{answer\_b}}}{\emph{answer: str}, \emph{true\_answer=False}}{} -This method is used to enter answer B to the question. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode\begin{itemize} -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{answer}} \textendash{} Content of the answer B - -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{true\_answer}} \textendash{} If this is the correct answer then enter True, otherwise False - -\end{itemize} - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.answers}}\pysigline{\sphinxbfcode{\sphinxupquote{answers}}\sphinxbfcode{\sphinxupquote{: List\DUrole{p}{{[}}answer.Answer\DUrole{p}{{]}}}}} +\sphinxAtStartPar +Question answers \end{fulllineitems} -\index{answer\_c() (pytexexam.question.Question method)@\spxentry{answer\_c()}\spxextra{pytexexam.question.Question method}} +\index{get\_true\_answer\_key() (pytexexam.question.Question method)@\spxentry{get\_true\_answer\_key()}\spxextra{pytexexam.question.Question method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.answer_c}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{answer\_c}}}{\emph{answer: str}, \emph{true\_answer=False}}{} -This method is used to enter answer C to the question. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode\begin{itemize} -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{answer}} \textendash{} Content of the answer C - -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{true\_answer}} \textendash{} If this is the correct answer then enter True, otherwise False - -\end{itemize} - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.get_true_answer_key}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_true\_answer\_key}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +Get answer key of true answer \end{fulllineitems} -\index{answer\_d() (pytexexam.question.Question method)@\spxentry{answer\_d()}\spxextra{pytexexam.question.Question method}} +\index{print\_question\_latex() (pytexexam.question.Question method)@\spxentry{print\_question\_latex()}\spxextra{pytexexam.question.Question method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.answer_d}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{answer\_d}}}{\emph{answer: str}, \emph{true\_answer=False}}{} -This method is used to enter answer D for the question. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode\begin{itemize} -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{answer}} \textendash{} Content of the answer D - -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{true\_answer}} \textendash{} If this is the correct answer then enter True, otherwise False - -\end{itemize} - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.print_question_latex}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{print\_question\_latex}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +generate latex code for this question \end{fulllineitems} -\index{answers() (pytexexam.question.Question method)@\spxentry{answers()}\spxextra{pytexexam.question.Question method}} +\index{print\_solution\_latex() (pytexexam.question.Question method)@\spxentry{print\_solution\_latex()}\spxextra{pytexexam.question.Question method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.answers}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{answers}}}{\emph{true\_answer: str, answer\_dict: Dict{[}str, str{]}}}{} -Another way to enter answers to questions. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode\begin{itemize} -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{true\_answer}} \textendash{} The letter that corresponds to the correct answer (A, B, C, D) - -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{answer\_dict}} \textendash{} A dictionary contains the answers to the questions. The corresponding key of this dictionary is A, B, C, D. - -\end{itemize} - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{get\_answer() (pytexexam.question.Question method)@\spxentry{get\_answer()}\spxextra{pytexexam.question.Question method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.get_answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_answer}}}{\emph{answer\_key: str}}{{ $\rightarrow$ str}} -This method is used to get answers to questions. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{answer\_key}} \textendash{} The key corresponding to the answer of the question. - -\item[{Returns}] \leavevmode -The answer corresponds to the selected answer. - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{get\_answer\_column() (pytexexam.question.Question method)@\spxentry{get\_answer\_column()}\spxextra{pytexexam.question.Question method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.get_answer_column}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_answer\_column}}}{}{{ $\rightarrow$ int}} -This method returns the number of columns where the answer will be presented when the -question is printed. The function can return 1, 2, 4. -\begin{quote}\begin{description} -\item[{Returns}] \leavevmode -The number of columns the answer will be displayed when the question is printed - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{get\_true\_answer() (pytexexam.question.Question method)@\spxentry{get\_true\_answer()}\spxextra{pytexexam.question.Question method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.get_true_answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_true\_answer}}}{}{{ $\rightarrow$ str}} -This method returns the character corresponding to the correct answer of the question. -The possible answer are A, B, C, D. -\begin{quote}\begin{description} -\item[{Returns}] \leavevmode -The letter corresponding to the correct answer of the question - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.print_solution_latex}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{print\_solution\_latex}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +Generate latex code to print question and solution \end{fulllineitems} \index{question (pytexexam.question.Question attribute)@\spxentry{question}\spxextra{pytexexam.question.Question attribute}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.question}}\pysigline{\sphinxbfcode{\sphinxupquote{question}}\sphinxbfcode{\sphinxupquote{ = None}}} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.question}}\pysigline{\sphinxbfcode{\sphinxupquote{question}}\sphinxbfcode{\sphinxupquote{: str}}} +\sphinxAtStartPar Content of the question. \end{fulllineitems} -\index{set\_answer\_column() (pytexexam.question.Question method)@\spxentry{set\_answer\_column()}\spxextra{pytexexam.question.Question method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.set_answer_column}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{set\_answer\_column}}}{\emph{answer\_column: int}}{} -This method allows you to enter the number of columns where the answer will be displayed -when printing the question. The possible values ​​are 1, 2, 4 -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{answer\_column}} \textendash{} The number of columns the answer will be displayed when printed. - -\end{description}\end{quote} - -\end{fulllineitems} - \index{shuffle\_answer() (pytexexam.question.Question method)@\spxentry{shuffle\_answer()}\spxextra{pytexexam.question.Question method}} \begin{fulllineitems} \phantomsection\label{\detokenize{index:pytexexam.question.Question.shuffle_answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{shuffle\_answer}}}{}{} -The method that allows the swap answers in question. +\sphinxAtStartPar +Shuffle answer list \end{fulllineitems} -\index{solution() (pytexexam.question.Question method)@\spxentry{solution()}\spxextra{pytexexam.question.Question method}} +\index{solution (pytexexam.question.Question attribute)@\spxentry{solution}\spxextra{pytexexam.question.Question attribute}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.solution}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{solution}}}{\emph{solution: str}}{} -This method is used to enter detailed answer to the question +\phantomsection\label{\detokenize{index:pytexexam.question.Question.solution}}\pysigline{\sphinxbfcode{\sphinxupquote{solution}}} +\sphinxAtStartPar +Solution of the question \end{fulllineitems} \end{fulllineitems} -\phantomsection\label{\detokenize{index:module-pytexexam.exam}}\index{pytexexam.exam (module)@\spxentry{pytexexam.exam}\spxextra{module}}\index{Exam (class in pytexexam.exam)@\spxentry{Exam}\spxextra{class in pytexexam.exam}} +\phantomsection\label{\detokenize{index:module-pytexexam.exam}}\index{module@\spxentry{module}!pytexexam.exam@\spxentry{pytexexam.exam}}\index{pytexexam.exam@\spxentry{pytexexam.exam}!module@\spxentry{module}}\index{Exam (class in pytexexam.exam)@\spxentry{Exam}\spxextra{class in pytexexam.exam}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.exam.Exam}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.exam.}}\sphinxbfcode{\sphinxupquote{Exam}}}{\emph{question\_list: List{[}question.Question{]}}}{} +\phantomsection\label{\detokenize{index:pytexexam.exam.Exam}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.exam.}}\sphinxbfcode{\sphinxupquote{Exam}}}{\emph{\DUrole{n}{question\_list}\DUrole{p}{:} \DUrole{n}{List\DUrole{p}{{[}}question.Question\DUrole{p}{{]}}}}}{} +\sphinxAtStartPar This class represents an exam. \index{question\_list (pytexexam.exam.Exam attribute)@\spxentry{question\_list}\spxextra{pytexexam.exam.Exam attribute}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.exam.Exam.question_list}}\pysigline{\sphinxbfcode{\sphinxupquote{question\_list}}\sphinxbfcode{\sphinxupquote{ = None}}} +\phantomsection\label{\detokenize{index:pytexexam.exam.Exam.question_list}}\pysigline{\sphinxbfcode{\sphinxupquote{question\_list}}} +\sphinxAtStartPar List of questions in the exam \end{fulllineitems} @@ -300,6 +201,7 @@ \chapter{Pytexexam main class} \begin{fulllineitems} \phantomsection\label{\detokenize{index:pytexexam.exam.Exam.shuffle_question}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{shuffle\_question}}}{}{} +\sphinxAtStartPar This method allows to shuffle all the questions in the exam. \end{fulllineitems} @@ -307,133 +209,54 @@ \chapter{Pytexexam main class} \end{fulllineitems} -\phantomsection\label{\detokenize{index:module-pytexexam.latexexam}}\index{pytexexam.latexexam (module)@\spxentry{pytexexam.latexexam}\spxextra{module}}\index{LatexExam (class in pytexexam.latexexam)@\spxentry{LatexExam}\spxextra{class in pytexexam.latexexam}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.latexexam.}}\sphinxbfcode{\sphinxupquote{LatexExam}}}{\emph{exam\_title: str}, \emph{exam: exam.Exam}}{} -This class represents a exam, allowing users to print the exam and answer to a tex file -or pdf (with latex pre-installed) -\index{add\_user\_preamble() (pytexexam.latexexam.LatexExam method)@\spxentry{add\_user\_preamble()}\spxextra{pytexexam.latexexam.LatexExam method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.add_user_preamble}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{add\_user\_preamble}}}{\emph{preamble: str}}{} -Added preamble of latex file - -\end{fulllineitems} - -\index{exam\_content (pytexexam.latexexam.LatexExam attribute)@\spxentry{exam\_content}\spxextra{pytexexam.latexexam.LatexExam attribute}} +\phantomsection\label{\detokenize{index:module-pytexexam.latexexam}}\index{module@\spxentry{module}!pytexexam.latexexam@\spxentry{pytexexam.latexexam}}\index{pytexexam.latexexam@\spxentry{pytexexam.latexexam}!module@\spxentry{module}}\index{LatexExamAnswer (class in pytexexam.latexexam)@\spxentry{LatexExamAnswer}\spxextra{class in pytexexam.latexexam}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.exam_content}}\pysigline{\sphinxbfcode{\sphinxupquote{exam\_content}}\sphinxbfcode{\sphinxupquote{ = None}}} -The content of the exam - -\end{fulllineitems} - -\index{exam\_header (pytexexam.latexexam.LatexExam attribute)@\spxentry{exam\_header}\spxextra{pytexexam.latexexam.LatexExam attribute}} +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamAnswer}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.latexexam.}}\sphinxbfcode{\sphinxupquote{LatexExamAnswer}}} +\sphinxAtStartPar +This class is used to create an answer keys +\index{get\_latex\_string() (pytexexam.latexexam.LatexExamAnswer method)@\spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamAnswer method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.exam_header}}\pysigline{\sphinxbfcode{\sphinxupquote{exam\_header}}\sphinxbfcode{\sphinxupquote{ = None}}} -The presentation of the exam’s header +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamAnswer.get_latex_string}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_latex\_string}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +Generate latex code \end{fulllineitems} -\index{exam\_title (pytexexam.latexexam.LatexExam attribute)@\spxentry{exam\_title}\spxextra{pytexexam.latexexam.LatexExam attribute}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.exam_title}}\pysigline{\sphinxbfcode{\sphinxupquote{exam\_title}}\sphinxbfcode{\sphinxupquote{ = None}}} -Exam name \end{fulllineitems} -\index{export\_pdf\_answer() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_pdf\_answer()}\spxextra{pytexexam.latexexam.LatexExam method}} +\index{LatexExamPaper (class in pytexexam.latexexam)@\spxentry{LatexExamPaper}\spxextra{class in pytexexam.latexexam}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_pdf_answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_pdf\_answer}}}{\emph{file\_name: str}}{} -This method export the answer as a tex file. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{file\_name}} \textendash{} The file name will output. - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{export\_pdf\_exam() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_pdf\_exam()}\spxextra{pytexexam.latexexam.LatexExam method}} +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamPaper}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.latexexam.}}\sphinxbfcode{\sphinxupquote{LatexExamPaper}}} +\sphinxAtStartPar +This class is used to create an exam paper +\index{get\_latex\_string() (pytexexam.latexexam.LatexExamPaper method)@\spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamPaper method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_pdf_exam}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_pdf\_exam}}}{\emph{file\_name: str}}{} -This method export the exam as a pdf file. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{file\_name}} \textendash{} The file name will output. - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamPaper.get_latex_string}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_latex\_string}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +Generate latex code \end{fulllineitems} -\index{export\_pdf\_solution() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_pdf\_solution()}\spxextra{pytexexam.latexexam.LatexExam method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_pdf_solution}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_pdf\_solution}}}{\emph{file\_name: str}}{} -Export a file containing detailed answers for each question in the exam \end{fulllineitems} -\index{export\_tex\_answer() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_tex\_answer()}\spxextra{pytexexam.latexexam.LatexExam method}} +\index{LatexExamSolution (class in pytexexam.latexexam)@\spxentry{LatexExamSolution}\spxextra{class in pytexexam.latexexam}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_tex_answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_tex\_answer}}}{\emph{file\_name: str}}{} -This method export the answer as a tex file. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{file\_name}} \textendash{} The file name will output. - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{export\_tex\_exam() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_tex\_exam()}\spxextra{pytexexam.latexexam.LatexExam method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_tex_exam}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_tex\_exam}}}{\emph{file\_name: str}}{} -This method proposed exam as a tex file. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{file\_name}} \textendash{} The file name will output. - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{export\_tex\_solution() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_tex\_solution()}\spxextra{pytexexam.latexexam.LatexExam method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_tex_solution}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_tex\_solution}}}{\emph{file\_name: str}}{} -Export a file containing detailed answers for each question in the exam - -\end{fulllineitems} - -\index{question\_theorem (pytexexam.latexexam.LatexExam attribute)@\spxentry{question\_theorem}\spxextra{pytexexam.latexexam.LatexExam attribute}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.question_theorem}}\pysigline{\sphinxbfcode{\sphinxupquote{question\_theorem}}\sphinxbfcode{\sphinxupquote{ = None}}} -The content of the beginning of each question will be printed - -\end{fulllineitems} - -\index{solution\_theorem (pytexexam.latexexam.LatexExam attribute)@\spxentry{solution\_theorem}\spxextra{pytexexam.latexexam.LatexExam attribute}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.solution_theorem}}\pysigline{\sphinxbfcode{\sphinxupquote{solution\_theorem}}\sphinxbfcode{\sphinxupquote{ = None}}} -The content of the beginning of each detailed answer will be printed - -\end{fulllineitems} - -\index{user\_preamble (pytexexam.latexexam.LatexExam attribute)@\spxentry{user\_preamble}\spxextra{pytexexam.latexexam.LatexExam attribute}} +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamSolution}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.latexexam.}}\sphinxbfcode{\sphinxupquote{LatexExamSolution}}} +\sphinxAtStartPar +Generate solution paper for this exam +\index{get\_latex\_string() (pytexexam.latexexam.LatexExamSolution method)@\spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamSolution method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.user_preamble}}\pysigline{\sphinxbfcode{\sphinxupquote{user\_preamble}}\sphinxbfcode{\sphinxupquote{ = None}}} -Preamble of the latex file corresponds to the exam +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamSolution.get_latex_string}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_latex\_string}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +Generate latex code \end{fulllineitems} @@ -443,11 +266,12 @@ \chapter{Pytexexam main class} \chapter{Pytexexam util class} -\label{\detokenize{index:module-pytexexam.latexexamutil}}\label{\detokenize{index:pytexexam-util-class}}\index{pytexexam.latexexamutil (module)@\spxentry{pytexexam.latexexamutil}\spxextra{module}}\index{ams\_math\_package() (in module pytexexam.latexexamutil)@\spxentry{ams\_math\_package()}\spxextra{in module pytexexam.latexexamutil}} +\label{\detokenize{index:module-pytexexam.latexexamutil}}\label{\detokenize{index:pytexexam-util-class}}\index{module@\spxentry{module}!pytexexam.latexexamutil@\spxentry{pytexexam.latexexamutil}}\index{pytexexam.latexexamutil@\spxentry{pytexexam.latexexamutil}!module@\spxentry{module}}\index{ams\_math\_package() (in module pytexexam.latexexamutil)@\spxentry{ams\_math\_package()}\spxextra{in module pytexexam.latexexamutil}} \begin{fulllineitems} \phantomsection\label{\detokenize{index:pytexexam.latexexamutil.ams_math_package}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{pytexexam.latexexamutil.}}\sphinxbfcode{\sphinxupquote{ams\_math\_package}}}{}{{ $\rightarrow$ str}} -Returns the command lines needed to type math formula in latex +\sphinxAtStartPar +Returns the code needed to add in preamble to type math formula in latex \end{fulllineitems} diff --git a/docs/_build/latex/pytexexam.toc b/docs/_build/latex/pytexexam.toc index 580cc9d..1b9cfbd 100755 --- a/docs/_build/latex/pytexexam.toc +++ b/docs/_build/latex/pytexexam.toc @@ -1,5 +1,5 @@ \babel@toc {english}{} -\contentsline {chapter}{\numberline {1}Pytexexam main class}{1}{chapter.1}% -\contentsline {chapter}{\numberline {2}Pytexexam util class}{5}{chapter.2}% -\contentsline {chapter}{Python Module Index}{7}{section*.38}% -\contentsline {chapter}{Index}{9}{section*.39}% +\contentsline {chapter}{\numberline {1}Pytexexam main class}{1}{chapter.1}% +\contentsline {chapter}{\numberline {2}Pytexexam util class}{3}{chapter.2}% +\contentsline {chapter}{Python Module Index}{5}{section*.26}% +\contentsline {chapter}{Index}{7}{section*.27}% diff --git a/docs/_build/latex/sphinx.sty b/docs/_build/latex/sphinx.sty index c18e87a..e6c27c1 100755 --- a/docs/_build/latex/sphinx.sty +++ b/docs/_build/latex/sphinx.sty @@ -6,7 +6,7 @@ % \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{sphinx}[2019/09/02 v2.2.1 LaTeX package (Sphinx markup)] +\ProvidesPackage{sphinx}[2021/01/23 v3.5.0 LaTeX package (Sphinx markup)] % provides \ltx@ifundefined % (many packages load ltxcmds: graphicx does for pdftex and lualatex but @@ -40,7 +40,7 @@ % for \text macro and \iffirstchoice@ conditional even if amsmath not loaded \RequirePackage{amstext} \RequirePackage{textcomp}% "warn" option issued from template -\RequirePackage{titlesec} +\RequirePackage[nobottomtitles*]{titlesec} \@ifpackagelater{titlesec}{2016/03/15}% {\@ifpackagelater{titlesec}{2016/03/21}% {}% @@ -119,7 +119,8 @@ {\dimexpr-\dp\strutbox -\spx@ifcaptionpackage{\abovecaptionskip}{\sphinxbaselineskip}% +\sphinxbelowcaptionspace\relax}% -\def\sphinxatlongtableend{\prevdepth\z@\vskip\sphinxtablepost\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 @@ -238,6 +239,8 @@ \ltx@ifundefined{@removefromreset} {\RequirePackage{remreset}} {}% avoid warning +% To support hlist directive +\RequirePackage{multicol} % to make pdf with correct encoded bookmarks in Japanese % this should precede the hyperref package \ifx\kanjiskip\@undefined @@ -331,6 +334,9 @@ % 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} @@ -409,6 +415,11 @@ \DisableKeyvalOption{sphinx}{numfigreset} \DisableKeyvalOption{sphinx}{nonumfigreset} \DisableKeyvalOption{sphinx}{mathnumfig} +% 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}} @@ -587,12 +598,14 @@ {% classes with \chapter command \fancypagestyle{normal}{ \fancyhf{} - % FIXME: this presupposes "twoside". - % If "oneside" class option, there are warnings in LaTeX log. - \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}} + \fancyfoot[RO]{{\py@HeaderFamily\thepage}} \fancyfoot[LO]{{\py@HeaderFamily\nouppercase{\rightmark}}} - \fancyfoot[RE]{{\py@HeaderFamily\nouppercase{\leftmark}}} - \fancyhead[LE,RO]{{\py@HeaderFamily \@title\sphinxheadercomma\py@release}} + \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 @@ -604,7 +617,8 @@ % page of a chapter `clean.' \fancypagestyle{plain}{ \fancyhf{} - \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}} + \fancyfoot[RO]{{\py@HeaderFamily\thepage}} + \if@twoside\fancyfoot[LE]{{\py@HeaderFamily\thepage}}\fi \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0.4pt} } @@ -705,17 +719,17 @@ % 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}{\py@NormalColor} + {\py@TitleColor\thesection}{0.5em}{\py@TitleColor} \titleformat{\subsection}{\large\py@HeaderFamily}% - {\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} + {\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor} \titleformat{\subsubsection}{\py@HeaderFamily}% - {\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} + {\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}{\py@NormalColor} + {\py@TitleColor\theparagraph}{0.5em}{\py@TitleColor} \titleformat{\subparagraph}{\py@HeaderFamily}% - {\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor} + {\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor} %% GRAPHICS @@ -733,7 +747,7 @@ \AtBeginDocument{\spx@image@maxheight\textheight} % box scratch register -\newdimen\spx@image@box +\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}}% @@ -833,6 +847,28 @@ %% FOOTNOTES % +% Support scopes for footnote numbering +\newcounter{sphinxscope} +\newcommand{\sphinxstepscope}{\stepcounter{sphinxscope}} +% Explictly 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 now obsolete due to systematic use of \savenotes/\spewnotes % when minipages are in use in the various macro definitions next. @@ -840,6 +876,12 @@ %% NUMBERING OF FIGURES, TABLES, AND LITERAL BLOCKS + +% 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]% @@ -885,7 +927,7 @@ \@addtoreset{literalblock}{section}% \ifspx@opt@mathnumfig \@addtoreset{equation}{section}% - \fi + \fi% \g@addto@macro\spx@preAthefigure{\ifnum\c@section>\z@\arabic{section}.}% \g@addto@macro\spx@preBthefigure{\fi}% \fi @@ -895,7 +937,7 @@ \@addtoreset{literalblock}{subsection}% \ifspx@opt@mathnumfig \@addtoreset{equation}{subsection}% - \fi + \fi% \g@addto@macro\spx@preAthefigure{\ifnum\c@subsection>\z@\arabic{subsection}.}% \g@addto@macro\spx@preBthefigure{\fi}% \fi @@ -905,7 +947,7 @@ \@addtoreset{literalblock}{subsubsection}% \ifspx@opt@mathnumfig \@addtoreset{equation}{subsubsection}% - \fi + \fi% \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubsection>\z@\arabic{subsubsection}.}% \g@addto@macro\spx@preBthefigure{\fi}% \fi @@ -915,7 +957,7 @@ \@addtoreset{literalblock}{paragraph}% \ifspx@opt@mathnumfig \@addtoreset{equation}{paragraph}% - \fi + \fi% \g@addto@macro\spx@preAthefigure{\ifnum\c@subparagraph>\z@\arabic{subparagraph}.}% \g@addto@macro\spx@preBthefigure{\fi}% \fi @@ -925,7 +967,7 @@ \@addtoreset{literalblock}{subparagraph}% \ifspx@opt@mathnumfig \@addtoreset{equation}{subparagraph}% - \fi + \fi% \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubparagraph>\z@\arabic{subsubparagraph}.}% \g@addto@macro\spx@preBthefigure{\fi}% \fi @@ -942,7 +984,7 @@ \g@addto@macro\theequation{\arabic{equation}}% \fi \fi - +}% end of big \AtBeginDocument %% LITERAL BLOCKS % @@ -952,9 +994,9 @@ % - with possibly of a top caption, non-separable by pagebreak. % - and usable inside tables or footnotes ("footnotehyper-sphinx"). -% For extensions which use \OriginalVerbatim and compatibility with Sphinx < -% 1.5, we define and use these when (unmodified) Verbatim will be needed. But -% Sphinx >= 1.5 does not modify the \Verbatim macro anymore. +% 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 @@ -1053,7 +1095,7 @@ % 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. +% _, }, ^, &, >, -, ~, and \: stay at end of broken line. % Use of \textquotesingle for straight quote. % FIXME: convert this to package options ? \newcommand*\sphinxbreaksbeforelist {% @@ -1065,6 +1107,7 @@ \newcommand*\sphinxbreaksafterlist {% \do\PYGZus\_\do\PYGZcb\}\do\PYGZca\^\do\PYGZam\&% _, }, ^, &, \do\PYGZgt\>\do\PYGZhy\-\do\PYGZti\~% >, -, ~ + \do\PYGZbs\\% \ } \newcommand*\sphinxbreaksatspecials {% \def\do##1##2% @@ -1076,7 +1119,7 @@ } \def\sphinx@verbatim@nolig@list {\do \`}% -% Some characters . , ; ? ! / are not pygmentized. +% 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 @@ -1109,6 +1152,9 @@ \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 % This is a workaround to a "feature" of French lists, when literal block % follows immediately; usable generally (does only \par then), a priori... \newcommand*\sphinxvspacefixafterfrenchlists{% @@ -1150,13 +1196,188 @@ % 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[1]{% - \hsize\linewidth +\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}% }% -\newcommand\sphinxVerbatimFormatLineNoWrap[1]{\hb@xt@\linewidth{\strut #1\hss}}% +% +% 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. +% +% 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@ + \strut #1\strut\@@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 +\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 + \ifdim\spx@verb@minwidth>\wd\spx@scratchbox + \xdef\spx@verb@minwidth{\number\wd\spx@scratchbox sp}% + \fi + \expandafter\spx@verb@getwidths + \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}% @@ -1255,17 +1476,23 @@ \itemsep \z@skip \topsep \z@skip \partopsep \z@skip - % trivlist will set \parsep to \parskip = zero + % 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 - \ifsphinxverbatimwithminipage\spx@inframedtrue\fi - % use a minipage if we are already inside a framed environment - \ifspx@inframed\noindent\begin{minipage}{\linewidth}\fi - \MakeFramed {% adapted over from framed.sty's snugshade environment + \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 @@ -1277,8 +1504,49 @@ } {% \endOriginalVerbatim - \par\unskip\@minipagefalse\endMakeFramed % from framed.sty snugshade - \ifspx@inframed\end{minipage}\fi + \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} @@ -1313,10 +1581,10 @@ {\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 . , ; ? ! / - \do\-% we need also the hyphen character (ends up "as is" in parsed-literal) \lccode`\~`\~ % % update \dospecials as it is used by \url % but deactivation will already have been done hence this is unneeded: @@ -1327,7 +1595,7 @@ \lccode`~32 \lowercase{\let~}\spx@verbatim@space\lccode`\~`\~ } \newcommand*{\sphinxunactivateextras}{\let\do\@makeother - \sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist\do\-}% + \sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist}% % the \catcode13=5\relax (deactivate end of input lines) is left to callers \newcommand*{\sphinxunactivateextrasandspace}{\catcode32=10\relax \sphinxunactivateextras}% @@ -1355,7 +1623,8 @@ % \sphinxcode). Sphinx uses \#, \%, \& ... always inside \sphinxhref. \protected\def\sphinxhref#1#2{{% \sphinxunactivateextrasandspace % never do \scantokens with active space! - \endlinechar\m@ne\everyeof{{#2}}% keep catcode regime for #2 +% 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. @@ -1735,17 +2004,37 @@ % 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. +% 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 % 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 \ifspx@opt@inlineliteralwraps - \sphinxbreaksviaactive\let\sphinxafterbreak\empty + % break at . , ; ? ! / + \sphinxbreaksviaactive + % break also at \ + \let\sphinx@textbackslash\textbackslash + \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 @@ -1753,6 +2042,7 @@ \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 % Some custom font markup commands. \protected\def\sphinxstrong#1{\textbf{#1}} @@ -1763,6 +2053,7 @@ \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}} @@ -1775,8 +2066,8 @@ \def\sphinxstyleindexextra #1{ (\emph{#1})} \def\sphinxstyleindexpageref #1{, \pageref{#1}} \def\sphinxstyleindexpagemain#1{\textbf{#1}} -\protected\def\spxentry#1{#1}% will get \let to \sphinxstyleindexentry in index -\protected\def\spxextra#1{#1}% will get \let to \sphinxstyleindexextra in index +\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% @@ -1800,6 +2091,7 @@ % 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 @@ -1813,8 +2105,20 @@ \let\sphinxemail \@firstofone \let\sphinxcrossref \@firstofone \let\sphinxtermref \@firstofone + \let\sphinxhyphen\sphinxhyphenforbookmarks }} +% Special characters +% +% This definition prevents en-dash and em-dash TeX ligatures. +% +% It inserts a potential breakpoint after the hyphen. This is to keep in sync +% with behavior in code-blocks, parsed and inline literals. For a breakpoint +% before the hyphen use \leavevmode\kern\z@- (within \makeatletter/\makeatother) +\protected\def\sphinxhyphen#1{-\kern\z@} +% 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{\}} diff --git a/docs/_build/latex/sphinx.xdy b/docs/_build/latex/sphinx.xdy index 1c0794c..edca178 100755 --- a/docs/_build/latex/sphinx.xdy +++ b/docs/_build/latex/sphinx.xdy @@ -112,12 +112,14 @@ (merge-rule "\_" "_" :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 "\textasciicircum{}" "^" :string) (merge-rule "\P{}" "¶" :string) (merge-rule "\S{}" "§" :string) (merge-rule "\texteuro{}" "€" :string) diff --git a/docs/_build/latex/sphinxcyrillic.sty b/docs/_build/latex/sphinxcyrillic.sty index 1a14c7b..6747b5e 100755 --- a/docs/_build/latex/sphinxcyrillic.sty +++ b/docs/_build/latex/sphinxcyrillic.sty @@ -11,11 +11,11 @@ \ProcessLocalKeyvalOptions* % ignore class options \ifspx@cyropt@Xtwo -% original code by tex.sx user egreg: +% 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. +% as recent as 2018/04/01 which does it automatically. \@tfor\next:=% {Ё}{Ђ}{Є}{Ѕ}{І}{Ј}{Љ}{Њ}{Ћ}{Ў}{Џ}{А}{Б}{В}{Г}{Д}{Е}{Ж}{З}{И}{Й}% {К}{Л}{М}{Н}{О}{П}{Р}{С}{Т}{У}{Ф}{Х}{Ц}{Ч}{Ш}{Щ}{Ъ}{Ы}{Ь}{Э}{Ю}% @@ -27,7 +27,9 @@ {Ӎ}{ӎ}{Ӕ}{ӕ}{Ә}{ә}{Ӡ}{ӡ}{Ө}{ө}\do {% \begingroup\def\IeC{\protect\DeclareTextSymbolDefault}% - \protected@edef\@temp{\endgroup\next{X2}}\@temp + \protected@edef\@temp{\endgroup + \@ifl@t@r{\fmtversion}{2019/10/01}{\csname u8:\next\endcsname}{\next}}% + \@temp{X2}% }% \else \ifspx@cyropt@TtwoA diff --git a/docs/_build/latex/sphinxhowto.cls b/docs/_build/latex/sphinxhowto.cls index ba5e003..0848a79 100755 --- a/docs/_build/latex/sphinxhowto.cls +++ b/docs/_build/latex/sphinxhowto.cls @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesClass{sphinxhowto}[2018/12/23 v2.0 Document class (Sphinx howto)] +\ProvidesClass{sphinxhowto}[2019/12/01 v2.3.0 Document class (Sphinx howto)] % 'oneside' option overriding the 'twoside' default \newif\if@oneside @@ -27,6 +27,17 @@ \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. % @@ -65,7 +76,7 @@ \endgroup \noindent\rule{\textwidth}{1pt}\par \vspace{12pt}% -} +} \newcommand\sphinxtableofcontentshook{} \pagenumbering{arabic} diff --git a/docs/_build/latex/sphinxmanual.cls b/docs/_build/latex/sphinxmanual.cls index e7c8f41..718189d 100755 --- a/docs/_build/latex/sphinxmanual.cls +++ b/docs/_build/latex/sphinxmanual.cls @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesClass{sphinxmanual}[2018/12/23 v2.0 Document class (Sphinx manual)] +\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} @@ -30,6 +30,17 @@ \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. % diff --git a/docs/_build/latex/sphinxmessages.sty b/docs/_build/latex/sphinxmessages.sty index 121f0af..68ebffa 100755 --- a/docs/_build/latex/sphinxmessages.sty +++ b/docs/_build/latex/sphinxmessages.sty @@ -7,7 +7,7 @@ \renewcommand{\literalblockcontinuedname}{continued from previous page} \renewcommand{\literalblockcontinuesname}{continues on next page} -\renewcommand{\sphinxnonalphabeticalgroupname}{Non-alphabetical} +\renewcommand{\sphinxnonalphabeticalgroupname}{Non\sphinxhyphen{}alphabetical} \renewcommand{\sphinxsymbolsname}{Symbols} \renewcommand{\sphinxnumbersname}{Numbers} \def\pageautorefname{page} diff --git a/docs/_build/latex/sphinxmulticell.sty b/docs/_build/latex/sphinxmulticell.sty index f0d11b1..a645491 100755 --- a/docs/_build/latex/sphinxmulticell.sty +++ b/docs/_build/latex/sphinxmulticell.sty @@ -229,10 +229,10 @@ % whether or not the multirow is single-column or multi-column. % % In passing we obtain baseline alignements across rows (only if -% \arraylinestretch is 1, as LaTeX's does not obey \arraylinestretch in "p" +% \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 \arraylinestretch > 1. The \extrarowheight +% TODO: examine the situation with \arraystretch > 1. The \extrarowheight % is hopeless for multirow anyhow, it makes baseline alignment strictly % impossible. \newcommand\sphinxmultirow[2]{\begingroup diff --git a/docs/_build/latexmkjarc b/docs/_build/latexmkjarc index 5b315d6..6e36b19 100755 --- a/docs/_build/latexmkjarc +++ b/docs/_build/latexmkjarc @@ -1,4 +1,4 @@ -$latex = 'platex ' . $ENV{'LATEXOPTS'} . ' -kanji=utf8 %O %S'; +$latex = 'pdflatex ' . $ENV{'LATEXOPTS'} . ' -kanji=utf8 %O %S'; $dvipdf = 'dvipdfmx %O -o %D %S'; $makeindex = 'internal mendex %S %B %D'; sub mendex { @@ -19,4 +19,4 @@ sub mendex { add_cus_dep( "glo", "gls", 0, "makeglo" ); sub makeglo { return system( "mendex -J -f -s gglo.ist -o '$_[0].gls' '$_[0].glo'" ); -} +} \ No newline at end of file diff --git a/docs/_build/pytexexam.tex b/docs/_build/pytexexam.tex index 0e5551a..f0897d4 100755 --- a/docs/_build/pytexexam.tex +++ b/docs/_build/pytexexam.tex @@ -58,12 +58,14 @@ \fvset{fontsize=\small} \usepackage{geometry} + % Include hyperref last. \usepackage{hyperref} % Fix anchor placement for figures with captions. \usepackage{hypcap}% it must be loaded after hyperref. % Set up styles of URL: it should be placed after hyperref. \urlstyle{same} + \addto\captionsenglish{\renewcommand{\contentsname}{Contents:}} \usepackage{sphinxmessages} @@ -72,7 +74,7 @@ \title{pytexexam} -\date{Jan 08, 2020} +\date{Mar 17, 2021} \release{1.3} \author{Vu Ngoc Binh} \newcommand{\sphinxlogo}{\vbox{}} @@ -93,205 +95,104 @@ \chapter{Pytexexam main class} \label{\detokenize{index:pytexexam-main-class}}\index{Answer (class in pytexexam.answer)@\spxentry{Answer}\spxextra{class in pytexexam.answer}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.answer.Answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.answer.}}\sphinxbfcode{\sphinxupquote{Answer}}}{\emph{answer: str = ''}, \emph{is\_true\_answer=False}}{} -This class is used to store 1 answer in a exam question. +\phantomsection\label{\detokenize{index:pytexexam.answer.Answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.answer.}}\sphinxbfcode{\sphinxupquote{Answer}}}{\emph{\DUrole{n}{answer\_key}\DUrole{p}{:} \DUrole{n}{str}}, \emph{\DUrole{n}{answer}\DUrole{p}{:} \DUrole{n}{str}}, \emph{\DUrole{n}{is\_true\_answer}\DUrole{o}{=}\DUrole{default_value}{False}}}{} +\sphinxAtStartPar +This class is used to store 1 answer in a question. \end{fulllineitems} -\phantomsection\label{\detokenize{index:module-pytexexam.question}}\index{pytexexam.question (module)@\spxentry{pytexexam.question}\spxextra{module}}\index{Question (class in pytexexam.question)@\spxentry{Question}\spxextra{class in pytexexam.question}} +\phantomsection\label{\detokenize{index:module-pytexexam.question}}\index{module@\spxentry{module}!pytexexam.question@\spxentry{pytexexam.question}}\index{pytexexam.question@\spxentry{pytexexam.question}!module@\spxentry{module}}\index{Question (class in pytexexam.question)@\spxentry{Question}\spxextra{class in pytexexam.question}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.question.}}\sphinxbfcode{\sphinxupquote{Question}}}{\emph{question: str}}{} +\phantomsection\label{\detokenize{index:pytexexam.question.Question}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.question.}}\sphinxbfcode{\sphinxupquote{Question}}}{\emph{\DUrole{n}{question}\DUrole{p}{:} \DUrole{n}{str}}, \emph{\DUrole{n}{answers}\DUrole{p}{:} \DUrole{n}{List\DUrole{p}{{[}}str\DUrole{p}{{]}}}}, \emph{\DUrole{n}{true\_answer}\DUrole{p}{:} \DUrole{n}{str}}, \emph{\DUrole{n}{solution}\DUrole{p}{:} \DUrole{n}{str}}, \emph{\DUrole{n}{answer\_column}\DUrole{p}{:} \DUrole{n}{int}}}{} +\sphinxAtStartPar This class represents one question on the test. -\index{answer\_a() (pytexexam.question.Question method)@\spxentry{answer\_a()}\spxextra{pytexexam.question.Question method}} +\index{answer\_column (pytexexam.question.Question attribute)@\spxentry{answer\_column}\spxextra{pytexexam.question.Question attribute}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.answer_a}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{answer\_a}}}{\emph{answer: str}, \emph{true\_answer=False}}{} -This method is used to enter answer A for the question. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode\begin{itemize} -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{answer}} \textendash{} Content of the answer A - -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{true\_answer}} \textendash{} If this is the correct answer then enter True. otherwise False - -\end{itemize} - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.answer_column}}\pysigline{\sphinxbfcode{\sphinxupquote{answer\_column}}} +\sphinxAtStartPar +Number of columns for which the answer will be presented. \end{fulllineitems} -\index{answer\_b() (pytexexam.question.Question method)@\spxentry{answer\_b()}\spxextra{pytexexam.question.Question method}} +\index{answers (pytexexam.question.Question attribute)@\spxentry{answers}\spxextra{pytexexam.question.Question attribute}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.answer_b}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{answer\_b}}}{\emph{answer: str}, \emph{true\_answer=False}}{} -This method is used to enter answer B to the question. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode\begin{itemize} -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{answer}} \textendash{} Content of the answer B - -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{true\_answer}} \textendash{} If this is the correct answer then enter True, otherwise False - -\end{itemize} - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.answers}}\pysigline{\sphinxbfcode{\sphinxupquote{answers}}\sphinxbfcode{\sphinxupquote{: List\DUrole{p}{{[}}answer.Answer\DUrole{p}{{]}}}}} +\sphinxAtStartPar +Question answers \end{fulllineitems} -\index{answer\_c() (pytexexam.question.Question method)@\spxentry{answer\_c()}\spxextra{pytexexam.question.Question method}} +\index{get\_true\_answer\_key() (pytexexam.question.Question method)@\spxentry{get\_true\_answer\_key()}\spxextra{pytexexam.question.Question method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.answer_c}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{answer\_c}}}{\emph{answer: str}, \emph{true\_answer=False}}{} -This method is used to enter answer C to the question. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode\begin{itemize} -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{answer}} \textendash{} Content of the answer C - -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{true\_answer}} \textendash{} If this is the correct answer then enter True, otherwise False - -\end{itemize} - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.get_true_answer_key}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_true\_answer\_key}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +Get answer key of true answer \end{fulllineitems} -\index{answer\_d() (pytexexam.question.Question method)@\spxentry{answer\_d()}\spxextra{pytexexam.question.Question method}} +\index{print\_question\_latex() (pytexexam.question.Question method)@\spxentry{print\_question\_latex()}\spxextra{pytexexam.question.Question method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.answer_d}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{answer\_d}}}{\emph{answer: str}, \emph{true\_answer=False}}{} -This method is used to enter answer D for the question. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode\begin{itemize} -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{answer}} \textendash{} Content of the answer D - -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{true\_answer}} \textendash{} If this is the correct answer then enter True, otherwise False - -\end{itemize} - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.print_question_latex}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{print\_question\_latex}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +generate latex code for this question \end{fulllineitems} -\index{answers() (pytexexam.question.Question method)@\spxentry{answers()}\spxextra{pytexexam.question.Question method}} +\index{print\_solution\_latex() (pytexexam.question.Question method)@\spxentry{print\_solution\_latex()}\spxextra{pytexexam.question.Question method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.answers}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{answers}}}{\emph{true\_answer: str, answer\_dict: Dict{[}str, str{]}}}{} -Another way to enter answers to questions. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode\begin{itemize} -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{true\_answer}} \textendash{} The letter that corresponds to the correct answer (A, B, C, D) - -\item {} -\sphinxstyleliteralstrong{\sphinxupquote{answer\_dict}} \textendash{} A dictionary contains the answers to the questions. The corresponding key of this dictionary is A, B, C, D. - -\end{itemize} - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{get\_answer() (pytexexam.question.Question method)@\spxentry{get\_answer()}\spxextra{pytexexam.question.Question method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.get_answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_answer}}}{\emph{answer\_key: str}}{{ $\rightarrow$ str}} -This method is used to get answers to questions. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{answer\_key}} \textendash{} The key corresponding to the answer of the question. - -\item[{Returns}] \leavevmode -The answer corresponds to the selected answer. - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{get\_answer\_column() (pytexexam.question.Question method)@\spxentry{get\_answer\_column()}\spxextra{pytexexam.question.Question method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.get_answer_column}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_answer\_column}}}{}{{ $\rightarrow$ int}} -This method returns the number of columns where the answer will be presented when the -question is printed. The function can return 1, 2, 4. -\begin{quote}\begin{description} -\item[{Returns}] \leavevmode -The number of columns the answer will be displayed when the question is printed - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{get\_true\_answer() (pytexexam.question.Question method)@\spxentry{get\_true\_answer()}\spxextra{pytexexam.question.Question method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.get_true_answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_true\_answer}}}{}{{ $\rightarrow$ str}} -This method returns the character corresponding to the correct answer of the question. -The possible answer are A, B, C, D. -\begin{quote}\begin{description} -\item[{Returns}] \leavevmode -The letter corresponding to the correct answer of the question - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.print_solution_latex}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{print\_solution\_latex}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +Generate latex code to print question and solution \end{fulllineitems} \index{question (pytexexam.question.Question attribute)@\spxentry{question}\spxextra{pytexexam.question.Question attribute}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.question}}\pysigline{\sphinxbfcode{\sphinxupquote{question}}\sphinxbfcode{\sphinxupquote{ = None}}} +\phantomsection\label{\detokenize{index:pytexexam.question.Question.question}}\pysigline{\sphinxbfcode{\sphinxupquote{question}}\sphinxbfcode{\sphinxupquote{: str}}} +\sphinxAtStartPar Content of the question. \end{fulllineitems} -\index{set\_answer\_column() (pytexexam.question.Question method)@\spxentry{set\_answer\_column()}\spxextra{pytexexam.question.Question method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.set_answer_column}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{set\_answer\_column}}}{\emph{answer\_column: int}}{} -This method allows you to enter the number of columns where the answer will be displayed -when printing the question. The possible values ​​are 1, 2, 4 -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{answer\_column}} \textendash{} The number of columns the answer will be displayed when printed. - -\end{description}\end{quote} - -\end{fulllineitems} - \index{shuffle\_answer() (pytexexam.question.Question method)@\spxentry{shuffle\_answer()}\spxextra{pytexexam.question.Question method}} \begin{fulllineitems} \phantomsection\label{\detokenize{index:pytexexam.question.Question.shuffle_answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{shuffle\_answer}}}{}{} -The method that allows the swap answers in question. +\sphinxAtStartPar +Shuffle answer list \end{fulllineitems} -\index{solution() (pytexexam.question.Question method)@\spxentry{solution()}\spxextra{pytexexam.question.Question method}} +\index{solution (pytexexam.question.Question attribute)@\spxentry{solution}\spxextra{pytexexam.question.Question attribute}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.question.Question.solution}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{solution}}}{\emph{solution: str}}{} -This method is used to enter detailed answer to the question +\phantomsection\label{\detokenize{index:pytexexam.question.Question.solution}}\pysigline{\sphinxbfcode{\sphinxupquote{solution}}} +\sphinxAtStartPar +Solution of the question \end{fulllineitems} \end{fulllineitems} -\phantomsection\label{\detokenize{index:module-pytexexam.exam}}\index{pytexexam.exam (module)@\spxentry{pytexexam.exam}\spxextra{module}}\index{Exam (class in pytexexam.exam)@\spxentry{Exam}\spxextra{class in pytexexam.exam}} +\phantomsection\label{\detokenize{index:module-pytexexam.exam}}\index{module@\spxentry{module}!pytexexam.exam@\spxentry{pytexexam.exam}}\index{pytexexam.exam@\spxentry{pytexexam.exam}!module@\spxentry{module}}\index{Exam (class in pytexexam.exam)@\spxentry{Exam}\spxextra{class in pytexexam.exam}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.exam.Exam}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.exam.}}\sphinxbfcode{\sphinxupquote{Exam}}}{\emph{question\_list: List{[}question.Question{]}}}{} +\phantomsection\label{\detokenize{index:pytexexam.exam.Exam}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.exam.}}\sphinxbfcode{\sphinxupquote{Exam}}}{\emph{\DUrole{n}{question\_list}\DUrole{p}{:} \DUrole{n}{List\DUrole{p}{{[}}question.Question\DUrole{p}{{]}}}}}{} +\sphinxAtStartPar This class represents an exam. \index{question\_list (pytexexam.exam.Exam attribute)@\spxentry{question\_list}\spxextra{pytexexam.exam.Exam attribute}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.exam.Exam.question_list}}\pysigline{\sphinxbfcode{\sphinxupquote{question\_list}}\sphinxbfcode{\sphinxupquote{ = None}}} +\phantomsection\label{\detokenize{index:pytexexam.exam.Exam.question_list}}\pysigline{\sphinxbfcode{\sphinxupquote{question\_list}}} +\sphinxAtStartPar List of questions in the exam \end{fulllineitems} @@ -300,6 +201,7 @@ \chapter{Pytexexam main class} \begin{fulllineitems} \phantomsection\label{\detokenize{index:pytexexam.exam.Exam.shuffle_question}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{shuffle\_question}}}{}{} +\sphinxAtStartPar This method allows to shuffle all the questions in the exam. \end{fulllineitems} @@ -307,133 +209,54 @@ \chapter{Pytexexam main class} \end{fulllineitems} -\phantomsection\label{\detokenize{index:module-pytexexam.latexexam}}\index{pytexexam.latexexam (module)@\spxentry{pytexexam.latexexam}\spxextra{module}}\index{LatexExam (class in pytexexam.latexexam)@\spxentry{LatexExam}\spxextra{class in pytexexam.latexexam}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.latexexam.}}\sphinxbfcode{\sphinxupquote{LatexExam}}}{\emph{exam\_title: str}, \emph{exam: exam.Exam}}{} -This class represents a exam, allowing users to print the exam and answer to a tex file -or pdf (with latex pre-installed) -\index{add\_user\_preamble() (pytexexam.latexexam.LatexExam method)@\spxentry{add\_user\_preamble()}\spxextra{pytexexam.latexexam.LatexExam method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.add_user_preamble}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{add\_user\_preamble}}}{\emph{preamble: str}}{} -Added preamble of latex file - -\end{fulllineitems} - -\index{exam\_content (pytexexam.latexexam.LatexExam attribute)@\spxentry{exam\_content}\spxextra{pytexexam.latexexam.LatexExam attribute}} +\phantomsection\label{\detokenize{index:module-pytexexam.latexexam}}\index{module@\spxentry{module}!pytexexam.latexexam@\spxentry{pytexexam.latexexam}}\index{pytexexam.latexexam@\spxentry{pytexexam.latexexam}!module@\spxentry{module}}\index{LatexExamAnswer (class in pytexexam.latexexam)@\spxentry{LatexExamAnswer}\spxextra{class in pytexexam.latexexam}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.exam_content}}\pysigline{\sphinxbfcode{\sphinxupquote{exam\_content}}\sphinxbfcode{\sphinxupquote{ = None}}} -The content of the exam - -\end{fulllineitems} - -\index{exam\_header (pytexexam.latexexam.LatexExam attribute)@\spxentry{exam\_header}\spxextra{pytexexam.latexexam.LatexExam attribute}} +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamAnswer}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.latexexam.}}\sphinxbfcode{\sphinxupquote{LatexExamAnswer}}} +\sphinxAtStartPar +This class is used to create an answer keys +\index{get\_latex\_string() (pytexexam.latexexam.LatexExamAnswer method)@\spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamAnswer method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.exam_header}}\pysigline{\sphinxbfcode{\sphinxupquote{exam\_header}}\sphinxbfcode{\sphinxupquote{ = None}}} -The presentation of the exam’s header +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamAnswer.get_latex_string}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_latex\_string}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +Generate latex code \end{fulllineitems} -\index{exam\_title (pytexexam.latexexam.LatexExam attribute)@\spxentry{exam\_title}\spxextra{pytexexam.latexexam.LatexExam attribute}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.exam_title}}\pysigline{\sphinxbfcode{\sphinxupquote{exam\_title}}\sphinxbfcode{\sphinxupquote{ = None}}} -Exam name \end{fulllineitems} -\index{export\_pdf\_answer() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_pdf\_answer()}\spxextra{pytexexam.latexexam.LatexExam method}} +\index{LatexExamPaper (class in pytexexam.latexexam)@\spxentry{LatexExamPaper}\spxextra{class in pytexexam.latexexam}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_pdf_answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_pdf\_answer}}}{\emph{file\_name: str}}{} -This method export the answer as a tex file. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{file\_name}} \textendash{} The file name will output. - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{export\_pdf\_exam() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_pdf\_exam()}\spxextra{pytexexam.latexexam.LatexExam method}} +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamPaper}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.latexexam.}}\sphinxbfcode{\sphinxupquote{LatexExamPaper}}} +\sphinxAtStartPar +This class is used to create an exam paper +\index{get\_latex\_string() (pytexexam.latexexam.LatexExamPaper method)@\spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamPaper method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_pdf_exam}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_pdf\_exam}}}{\emph{file\_name: str}}{} -This method export the exam as a pdf file. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{file\_name}} \textendash{} The file name will output. - -\end{description}\end{quote} +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamPaper.get_latex_string}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_latex\_string}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +Generate latex code \end{fulllineitems} -\index{export\_pdf\_solution() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_pdf\_solution()}\spxextra{pytexexam.latexexam.LatexExam method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_pdf_solution}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_pdf\_solution}}}{\emph{file\_name: str}}{} -Export a file containing detailed answers for each question in the exam \end{fulllineitems} -\index{export\_tex\_answer() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_tex\_answer()}\spxextra{pytexexam.latexexam.LatexExam method}} +\index{LatexExamSolution (class in pytexexam.latexexam)@\spxentry{LatexExamSolution}\spxextra{class in pytexexam.latexexam}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_tex_answer}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_tex\_answer}}}{\emph{file\_name: str}}{} -This method export the answer as a tex file. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{file\_name}} \textendash{} The file name will output. - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{export\_tex\_exam() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_tex\_exam()}\spxextra{pytexexam.latexexam.LatexExam method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_tex_exam}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_tex\_exam}}}{\emph{file\_name: str}}{} -This method proposed exam as a tex file. -\begin{quote}\begin{description} -\item[{Parameters}] \leavevmode -\sphinxstyleliteralstrong{\sphinxupquote{file\_name}} \textendash{} The file name will output. - -\end{description}\end{quote} - -\end{fulllineitems} - -\index{export\_tex\_solution() (pytexexam.latexexam.LatexExam method)@\spxentry{export\_tex\_solution()}\spxextra{pytexexam.latexexam.LatexExam method}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.export_tex_solution}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{export\_tex\_solution}}}{\emph{file\_name: str}}{} -Export a file containing detailed answers for each question in the exam - -\end{fulllineitems} - -\index{question\_theorem (pytexexam.latexexam.LatexExam attribute)@\spxentry{question\_theorem}\spxextra{pytexexam.latexexam.LatexExam attribute}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.question_theorem}}\pysigline{\sphinxbfcode{\sphinxupquote{question\_theorem}}\sphinxbfcode{\sphinxupquote{ = None}}} -The content of the beginning of each question will be printed - -\end{fulllineitems} - -\index{solution\_theorem (pytexexam.latexexam.LatexExam attribute)@\spxentry{solution\_theorem}\spxextra{pytexexam.latexexam.LatexExam attribute}} - -\begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.solution_theorem}}\pysigline{\sphinxbfcode{\sphinxupquote{solution\_theorem}}\sphinxbfcode{\sphinxupquote{ = None}}} -The content of the beginning of each detailed answer will be printed - -\end{fulllineitems} - -\index{user\_preamble (pytexexam.latexexam.LatexExam attribute)@\spxentry{user\_preamble}\spxextra{pytexexam.latexexam.LatexExam attribute}} +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamSolution}}\pysigline{\sphinxbfcode{\sphinxupquote{class }}\sphinxcode{\sphinxupquote{pytexexam.latexexam.}}\sphinxbfcode{\sphinxupquote{LatexExamSolution}}} +\sphinxAtStartPar +Generate solution paper for this exam +\index{get\_latex\_string() (pytexexam.latexexam.LatexExamSolution method)@\spxentry{get\_latex\_string()}\spxextra{pytexexam.latexexam.LatexExamSolution method}} \begin{fulllineitems} -\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExam.user_preamble}}\pysigline{\sphinxbfcode{\sphinxupquote{user\_preamble}}\sphinxbfcode{\sphinxupquote{ = None}}} -Preamble of the latex file corresponds to the exam +\phantomsection\label{\detokenize{index:pytexexam.latexexam.LatexExamSolution.get_latex_string}}\pysiglinewithargsret{\sphinxbfcode{\sphinxupquote{get\_latex\_string}}}{}{{ $\rightarrow$ str}} +\sphinxAtStartPar +Generate latex code \end{fulllineitems} @@ -443,11 +266,12 @@ \chapter{Pytexexam main class} \chapter{Pytexexam util class} -\label{\detokenize{index:module-pytexexam.latexexamutil}}\label{\detokenize{index:pytexexam-util-class}}\index{pytexexam.latexexamutil (module)@\spxentry{pytexexam.latexexamutil}\spxextra{module}}\index{ams\_math\_package() (in module pytexexam.latexexamutil)@\spxentry{ams\_math\_package()}\spxextra{in module pytexexam.latexexamutil}} +\label{\detokenize{index:module-pytexexam.latexexamutil}}\label{\detokenize{index:pytexexam-util-class}}\index{module@\spxentry{module}!pytexexam.latexexamutil@\spxentry{pytexexam.latexexamutil}}\index{pytexexam.latexexamutil@\spxentry{pytexexam.latexexamutil}!module@\spxentry{module}}\index{ams\_math\_package() (in module pytexexam.latexexamutil)@\spxentry{ams\_math\_package()}\spxextra{in module pytexexam.latexexamutil}} \begin{fulllineitems} \phantomsection\label{\detokenize{index:pytexexam.latexexamutil.ams_math_package}}\pysiglinewithargsret{\sphinxcode{\sphinxupquote{pytexexam.latexexamutil.}}\sphinxbfcode{\sphinxupquote{ams\_math\_package}}}{}{{ $\rightarrow$ str}} -Returns the command lines needed to type math formula in latex +\sphinxAtStartPar +Returns the code needed to add in preamble to type math formula in latex \end{fulllineitems} diff --git a/docs/_build/sphinx.sty b/docs/_build/sphinx.sty index c18e87a..e6c27c1 100755 --- a/docs/_build/sphinx.sty +++ b/docs/_build/sphinx.sty @@ -6,7 +6,7 @@ % \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{sphinx}[2019/09/02 v2.2.1 LaTeX package (Sphinx markup)] +\ProvidesPackage{sphinx}[2021/01/23 v3.5.0 LaTeX package (Sphinx markup)] % provides \ltx@ifundefined % (many packages load ltxcmds: graphicx does for pdftex and lualatex but @@ -40,7 +40,7 @@ % for \text macro and \iffirstchoice@ conditional even if amsmath not loaded \RequirePackage{amstext} \RequirePackage{textcomp}% "warn" option issued from template -\RequirePackage{titlesec} +\RequirePackage[nobottomtitles*]{titlesec} \@ifpackagelater{titlesec}{2016/03/15}% {\@ifpackagelater{titlesec}{2016/03/21}% {}% @@ -119,7 +119,8 @@ {\dimexpr-\dp\strutbox -\spx@ifcaptionpackage{\abovecaptionskip}{\sphinxbaselineskip}% +\sphinxbelowcaptionspace\relax}% -\def\sphinxatlongtableend{\prevdepth\z@\vskip\sphinxtablepost\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 @@ -238,6 +239,8 @@ \ltx@ifundefined{@removefromreset} {\RequirePackage{remreset}} {}% avoid warning +% To support hlist directive +\RequirePackage{multicol} % to make pdf with correct encoded bookmarks in Japanese % this should precede the hyperref package \ifx\kanjiskip\@undefined @@ -331,6 +334,9 @@ % 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} @@ -409,6 +415,11 @@ \DisableKeyvalOption{sphinx}{numfigreset} \DisableKeyvalOption{sphinx}{nonumfigreset} \DisableKeyvalOption{sphinx}{mathnumfig} +% 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}} @@ -587,12 +598,14 @@ {% classes with \chapter command \fancypagestyle{normal}{ \fancyhf{} - % FIXME: this presupposes "twoside". - % If "oneside" class option, there are warnings in LaTeX log. - \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}} + \fancyfoot[RO]{{\py@HeaderFamily\thepage}} \fancyfoot[LO]{{\py@HeaderFamily\nouppercase{\rightmark}}} - \fancyfoot[RE]{{\py@HeaderFamily\nouppercase{\leftmark}}} - \fancyhead[LE,RO]{{\py@HeaderFamily \@title\sphinxheadercomma\py@release}} + \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 @@ -604,7 +617,8 @@ % page of a chapter `clean.' \fancypagestyle{plain}{ \fancyhf{} - \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}} + \fancyfoot[RO]{{\py@HeaderFamily\thepage}} + \if@twoside\fancyfoot[LE]{{\py@HeaderFamily\thepage}}\fi \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0.4pt} } @@ -705,17 +719,17 @@ % 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}{\py@NormalColor} + {\py@TitleColor\thesection}{0.5em}{\py@TitleColor} \titleformat{\subsection}{\large\py@HeaderFamily}% - {\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} + {\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor} \titleformat{\subsubsection}{\py@HeaderFamily}% - {\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} + {\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}{\py@NormalColor} + {\py@TitleColor\theparagraph}{0.5em}{\py@TitleColor} \titleformat{\subparagraph}{\py@HeaderFamily}% - {\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor} + {\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor} %% GRAPHICS @@ -733,7 +747,7 @@ \AtBeginDocument{\spx@image@maxheight\textheight} % box scratch register -\newdimen\spx@image@box +\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}}% @@ -833,6 +847,28 @@ %% FOOTNOTES % +% Support scopes for footnote numbering +\newcounter{sphinxscope} +\newcommand{\sphinxstepscope}{\stepcounter{sphinxscope}} +% Explictly 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 now obsolete due to systematic use of \savenotes/\spewnotes % when minipages are in use in the various macro definitions next. @@ -840,6 +876,12 @@ %% NUMBERING OF FIGURES, TABLES, AND LITERAL BLOCKS + +% 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]% @@ -885,7 +927,7 @@ \@addtoreset{literalblock}{section}% \ifspx@opt@mathnumfig \@addtoreset{equation}{section}% - \fi + \fi% \g@addto@macro\spx@preAthefigure{\ifnum\c@section>\z@\arabic{section}.}% \g@addto@macro\spx@preBthefigure{\fi}% \fi @@ -895,7 +937,7 @@ \@addtoreset{literalblock}{subsection}% \ifspx@opt@mathnumfig \@addtoreset{equation}{subsection}% - \fi + \fi% \g@addto@macro\spx@preAthefigure{\ifnum\c@subsection>\z@\arabic{subsection}.}% \g@addto@macro\spx@preBthefigure{\fi}% \fi @@ -905,7 +947,7 @@ \@addtoreset{literalblock}{subsubsection}% \ifspx@opt@mathnumfig \@addtoreset{equation}{subsubsection}% - \fi + \fi% \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubsection>\z@\arabic{subsubsection}.}% \g@addto@macro\spx@preBthefigure{\fi}% \fi @@ -915,7 +957,7 @@ \@addtoreset{literalblock}{paragraph}% \ifspx@opt@mathnumfig \@addtoreset{equation}{paragraph}% - \fi + \fi% \g@addto@macro\spx@preAthefigure{\ifnum\c@subparagraph>\z@\arabic{subparagraph}.}% \g@addto@macro\spx@preBthefigure{\fi}% \fi @@ -925,7 +967,7 @@ \@addtoreset{literalblock}{subparagraph}% \ifspx@opt@mathnumfig \@addtoreset{equation}{subparagraph}% - \fi + \fi% \g@addto@macro\spx@preAthefigure{\ifnum\c@subsubparagraph>\z@\arabic{subsubparagraph}.}% \g@addto@macro\spx@preBthefigure{\fi}% \fi @@ -942,7 +984,7 @@ \g@addto@macro\theequation{\arabic{equation}}% \fi \fi - +}% end of big \AtBeginDocument %% LITERAL BLOCKS % @@ -952,9 +994,9 @@ % - with possibly of a top caption, non-separable by pagebreak. % - and usable inside tables or footnotes ("footnotehyper-sphinx"). -% For extensions which use \OriginalVerbatim and compatibility with Sphinx < -% 1.5, we define and use these when (unmodified) Verbatim will be needed. But -% Sphinx >= 1.5 does not modify the \Verbatim macro anymore. +% 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 @@ -1053,7 +1095,7 @@ % 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. +% _, }, ^, &, >, -, ~, and \: stay at end of broken line. % Use of \textquotesingle for straight quote. % FIXME: convert this to package options ? \newcommand*\sphinxbreaksbeforelist {% @@ -1065,6 +1107,7 @@ \newcommand*\sphinxbreaksafterlist {% \do\PYGZus\_\do\PYGZcb\}\do\PYGZca\^\do\PYGZam\&% _, }, ^, &, \do\PYGZgt\>\do\PYGZhy\-\do\PYGZti\~% >, -, ~ + \do\PYGZbs\\% \ } \newcommand*\sphinxbreaksatspecials {% \def\do##1##2% @@ -1076,7 +1119,7 @@ } \def\sphinx@verbatim@nolig@list {\do \`}% -% Some characters . , ; ? ! / are not pygmentized. +% 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 @@ -1109,6 +1152,9 @@ \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 % This is a workaround to a "feature" of French lists, when literal block % follows immediately; usable generally (does only \par then), a priori... \newcommand*\sphinxvspacefixafterfrenchlists{% @@ -1150,13 +1196,188 @@ % 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[1]{% - \hsize\linewidth +\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}% }% -\newcommand\sphinxVerbatimFormatLineNoWrap[1]{\hb@xt@\linewidth{\strut #1\hss}}% +% +% 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. +% +% 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@ + \strut #1\strut\@@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 +\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 + \ifdim\spx@verb@minwidth>\wd\spx@scratchbox + \xdef\spx@verb@minwidth{\number\wd\spx@scratchbox sp}% + \fi + \expandafter\spx@verb@getwidths + \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}% @@ -1255,17 +1476,23 @@ \itemsep \z@skip \topsep \z@skip \partopsep \z@skip - % trivlist will set \parsep to \parskip = zero + % 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 - \ifsphinxverbatimwithminipage\spx@inframedtrue\fi - % use a minipage if we are already inside a framed environment - \ifspx@inframed\noindent\begin{minipage}{\linewidth}\fi - \MakeFramed {% adapted over from framed.sty's snugshade environment + \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 @@ -1277,8 +1504,49 @@ } {% \endOriginalVerbatim - \par\unskip\@minipagefalse\endMakeFramed % from framed.sty snugshade - \ifspx@inframed\end{minipage}\fi + \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} @@ -1313,10 +1581,10 @@ {\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 . , ; ? ! / - \do\-% we need also the hyphen character (ends up "as is" in parsed-literal) \lccode`\~`\~ % % update \dospecials as it is used by \url % but deactivation will already have been done hence this is unneeded: @@ -1327,7 +1595,7 @@ \lccode`~32 \lowercase{\let~}\spx@verbatim@space\lccode`\~`\~ } \newcommand*{\sphinxunactivateextras}{\let\do\@makeother - \sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist\do\-}% + \sphinxbreaksbeforeactivelist\sphinxbreaksafteractivelist}% % the \catcode13=5\relax (deactivate end of input lines) is left to callers \newcommand*{\sphinxunactivateextrasandspace}{\catcode32=10\relax \sphinxunactivateextras}% @@ -1355,7 +1623,8 @@ % \sphinxcode). Sphinx uses \#, \%, \& ... always inside \sphinxhref. \protected\def\sphinxhref#1#2{{% \sphinxunactivateextrasandspace % never do \scantokens with active space! - \endlinechar\m@ne\everyeof{{#2}}% keep catcode regime for #2 +% 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. @@ -1735,17 +2004,37 @@ % 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. +% 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 % 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 \ifspx@opt@inlineliteralwraps - \sphinxbreaksviaactive\let\sphinxafterbreak\empty + % break at . , ; ? ! / + \sphinxbreaksviaactive + % break also at \ + \let\sphinx@textbackslash\textbackslash + \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 @@ -1753,6 +2042,7 @@ \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 % Some custom font markup commands. \protected\def\sphinxstrong#1{\textbf{#1}} @@ -1763,6 +2053,7 @@ \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}} @@ -1775,8 +2066,8 @@ \def\sphinxstyleindexextra #1{ (\emph{#1})} \def\sphinxstyleindexpageref #1{, \pageref{#1}} \def\sphinxstyleindexpagemain#1{\textbf{#1}} -\protected\def\spxentry#1{#1}% will get \let to \sphinxstyleindexentry in index -\protected\def\spxextra#1{#1}% will get \let to \sphinxstyleindexextra in index +\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% @@ -1800,6 +2091,7 @@ % 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 @@ -1813,8 +2105,20 @@ \let\sphinxemail \@firstofone \let\sphinxcrossref \@firstofone \let\sphinxtermref \@firstofone + \let\sphinxhyphen\sphinxhyphenforbookmarks }} +% Special characters +% +% This definition prevents en-dash and em-dash TeX ligatures. +% +% It inserts a potential breakpoint after the hyphen. This is to keep in sync +% with behavior in code-blocks, parsed and inline literals. For a breakpoint +% before the hyphen use \leavevmode\kern\z@- (within \makeatletter/\makeatother) +\protected\def\sphinxhyphen#1{-\kern\z@} +% 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{\}} diff --git a/docs/_build/sphinx.xdy b/docs/_build/sphinx.xdy index 1c0794c..edca178 100755 --- a/docs/_build/sphinx.xdy +++ b/docs/_build/sphinx.xdy @@ -112,12 +112,14 @@ (merge-rule "\_" "_" :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 "\textasciicircum{}" "^" :string) (merge-rule "\P{}" "¶" :string) (merge-rule "\S{}" "§" :string) (merge-rule "\texteuro{}" "€" :string) diff --git a/docs/_build/sphinxcyrillic.sty b/docs/_build/sphinxcyrillic.sty index 1a14c7b..6747b5e 100755 --- a/docs/_build/sphinxcyrillic.sty +++ b/docs/_build/sphinxcyrillic.sty @@ -11,11 +11,11 @@ \ProcessLocalKeyvalOptions* % ignore class options \ifspx@cyropt@Xtwo -% original code by tex.sx user egreg: +% 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. +% as recent as 2018/04/01 which does it automatically. \@tfor\next:=% {Ё}{Ђ}{Є}{Ѕ}{І}{Ј}{Љ}{Њ}{Ћ}{Ў}{Џ}{А}{Б}{В}{Г}{Д}{Е}{Ж}{З}{И}{Й}% {К}{Л}{М}{Н}{О}{П}{Р}{С}{Т}{У}{Ф}{Х}{Ц}{Ч}{Ш}{Щ}{Ъ}{Ы}{Ь}{Э}{Ю}% @@ -27,7 +27,9 @@ {Ӎ}{ӎ}{Ӕ}{ӕ}{Ә}{ә}{Ӡ}{ӡ}{Ө}{ө}\do {% \begingroup\def\IeC{\protect\DeclareTextSymbolDefault}% - \protected@edef\@temp{\endgroup\next{X2}}\@temp + \protected@edef\@temp{\endgroup + \@ifl@t@r{\fmtversion}{2019/10/01}{\csname u8:\next\endcsname}{\next}}% + \@temp{X2}% }% \else \ifspx@cyropt@TtwoA diff --git a/docs/_build/sphinxhowto.cls b/docs/_build/sphinxhowto.cls index ba5e003..0848a79 100755 --- a/docs/_build/sphinxhowto.cls +++ b/docs/_build/sphinxhowto.cls @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesClass{sphinxhowto}[2018/12/23 v2.0 Document class (Sphinx howto)] +\ProvidesClass{sphinxhowto}[2019/12/01 v2.3.0 Document class (Sphinx howto)] % 'oneside' option overriding the 'twoside' default \newif\if@oneside @@ -27,6 +27,17 @@ \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. % @@ -65,7 +76,7 @@ \endgroup \noindent\rule{\textwidth}{1pt}\par \vspace{12pt}% -} +} \newcommand\sphinxtableofcontentshook{} \pagenumbering{arabic} diff --git a/docs/_build/sphinxmanual.cls b/docs/_build/sphinxmanual.cls index e7c8f41..718189d 100755 --- a/docs/_build/sphinxmanual.cls +++ b/docs/_build/sphinxmanual.cls @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesClass{sphinxmanual}[2018/12/23 v2.0 Document class (Sphinx manual)] +\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} @@ -30,6 +30,17 @@ \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. % diff --git a/docs/_build/sphinxmessages.sty b/docs/_build/sphinxmessages.sty index 121f0af..68ebffa 100755 --- a/docs/_build/sphinxmessages.sty +++ b/docs/_build/sphinxmessages.sty @@ -7,7 +7,7 @@ \renewcommand{\literalblockcontinuedname}{continued from previous page} \renewcommand{\literalblockcontinuesname}{continues on next page} -\renewcommand{\sphinxnonalphabeticalgroupname}{Non-alphabetical} +\renewcommand{\sphinxnonalphabeticalgroupname}{Non\sphinxhyphen{}alphabetical} \renewcommand{\sphinxsymbolsname}{Symbols} \renewcommand{\sphinxnumbersname}{Numbers} \def\pageautorefname{page} diff --git a/docs/_build/sphinxmulticell.sty b/docs/_build/sphinxmulticell.sty index f0d11b1..a645491 100755 --- a/docs/_build/sphinxmulticell.sty +++ b/docs/_build/sphinxmulticell.sty @@ -229,10 +229,10 @@ % whether or not the multirow is single-column or multi-column. % % In passing we obtain baseline alignements across rows (only if -% \arraylinestretch is 1, as LaTeX's does not obey \arraylinestretch in "p" +% \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 \arraylinestretch > 1. The \extrarowheight +% TODO: examine the situation with \arraystretch > 1. The \extrarowheight % is hopeless for multirow anyhow, it makes baseline alignment strictly % impossible. \newcommand\sphinxmultirow[2]{\begingroup diff --git a/out/exam1.log b/out/exam1.log index 27ae801..cd15f93 100755 --- a/out/exam1.log +++ b/out/exam1.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2020.9.6) 12 JAN 2021 21:32 +This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) (preloaded format=pdflatex 2020.9.6) 17 MAR 2021 14:51 entering extended mode restricted \write18 enabled. file:line:error style messages enabled. @@ -95,42 +95,111 @@ File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA) \cellspace@firstht=\dimen143 \cellspace@lastdp=\dimen144 ) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2020/01/20 v2.17e AMS math features +\@mathmargin=\skip54 + +For additional information on amsmath, use the `?' option. +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2000/06/29 v2.01 AMS text + +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks18 +\ex@=\dimen145 +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen146 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 2016/03/08 v2.02 operator names +) +\inf@bad=\count180 +LaTeX Info: Redefining \frac on input line 227. +\uproot@=\count181 +\leftroot@=\count182 +LaTeX Info: Redefining \overline on input line 389. +\classnum@=\count183 +\DOTSCASE@=\count184 +LaTeX Info: Redefining \ldots on input line 486. +LaTeX Info: Redefining \dots on input line 489. +LaTeX Info: Redefining \cdots on input line 610. +\Mathstrutbox@=\box47 +\strutbox@=\box48 +\big@size=\dimen147 +LaTeX Font Info: Redeclaring font encoding OML on input line 733. +LaTeX Font Info: Redeclaring font encoding OMS on input line 734. +\macc@depth=\count185 +\c@MaxMatrixCols=\count186 +\dotsspace@=\muskip16 +\c@parentequation=\count187 +\dspbrk@lvl=\count188 +\tag@help=\toks19 +\row@=\count189 +\column@=\count190 +\maxfields@=\count191 +\andhelp@=\toks20 +\eqnshift@=\dimen148 +\alignsep@=\dimen149 +\tagshift@=\dimen150 +\tagwidth@=\dimen151 +\totwidth@=\dimen152 +\lineht@=\dimen153 +\@envbody=\toks21 +\multlinegap=\skip55 +\multlinetaggap=\skip56 +\mathdisplay@stack=\toks22 +LaTeX Info: Redefining \[ on input line 2859. +LaTeX Info: Redefining \] on input line 2860. +) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols +) (/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def File: l3backend-pdfmode.def 2020-02-03 L3 backend support: PDF mode -\l__kernel_color_stack_int=\count180 -\l__pdf_internal_box=\box47 +\l__kernel_color_stack_int=\count192 +\l__pdf_internal_box=\box49 ) (/home/binh/Data/PycharmProjects/pytexexam/out/exam1.aux) \openout1 = `exam1.aux'. -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 10. -LaTeX Font Info: ... okay on input line 10. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 10. -LaTeX Font Info: ... okay on input line 10. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 10. -LaTeX Font Info: ... okay on input line 10. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 10. -LaTeX Font Info: ... okay on input line 10. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 10. -LaTeX Font Info: ... okay on input line 10. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 10. -LaTeX Font Info: ... okay on input line 10. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 10. -LaTeX Font Info: ... okay on input line 10. +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 12. +LaTeX Font Info: ... okay on input line 12. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 12. +LaTeX Font Info: ... okay on input line 12. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 12. +LaTeX Font Info: ... okay on input line 12. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 12. +LaTeX Font Info: ... okay on input line 12. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 12. +LaTeX Font Info: ... okay on input line 12. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 12. +LaTeX Font Info: ... okay on input line 12. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 12. +LaTeX Font Info: ... okay on input line 12. (/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii [Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count181 -\scratchdimen=\dimen145 -\scratchbox=\box48 -\nofMPsegments=\count182 -\nofMParguments=\count183 -\everyMPshowfont=\toks18 -\MPscratchCnt=\count184 -\MPscratchDim=\dimen146 -\MPnumerator=\count185 -\makeMPintoPDFobject=\count186 -\everyMPtoPDFconversion=\toks19 +\scratchcounter=\count193 +\scratchdimen=\dimen154 +\scratchbox=\box50 +\nofMPsegments=\count194 +\nofMParguments=\count195 +\everyMPshowfont=\toks23 +\MPscratchCnt=\count196 +\MPscratchDim=\dimen155 +\MPnumerator=\count197 +\makeMPintoPDFobject=\count198 +\everyMPtoPDFconversion=\toks24 ) (/usr/share/texlive/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 @@ -140,14 +209,19 @@ Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv e )) -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <12> on input line 16. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <8> on input line 16. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <6> on input line 16. - -Overfull \hbox (65.62482pt too wide) in paragraph at lines 16--20 +LaTeX Font Info: Trying to load font information for U+msa on input line 13. + + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Trying to load font information for U+msb on input line 13. + + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +Overfull \hbox (65.62482pt too wide) in paragraph at lines 18--22 [][] [] @@ -156,20 +230,20 @@ Overfull \hbox (65.62482pt too wide) in paragraph at lines 16--20 {/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (/home/binh/Data/PycharmProjects/pytexexam/out/exam1.aux) ) Here is how much of TeX's memory you used: - 1577 strings out of 482671 - 23066 string characters out of 5955619 - 252617 words of memory out of 5000000 - 16758 multiletter control sequences out of 15000+600000 - 536087 words of font info for 36 fonts, out of 8000000 for 9000 + 2698 strings out of 482671 + 35416 string characters out of 5955619 + 264411 words of memory out of 5000000 + 17844 multiletter control sequences out of 15000+600000 + 537996 words of font info for 45 fonts, out of 8000000 for 9000 264 hyphenation exceptions out of 8191 - 30i,9n,35p,200b,212s stack positions out of 5000i,500n,10000p,200000b,80000s + 30i,9n,35p,222b,220s stack positions out of 5000i,500n,10000p,200000b,80000s Output written on /home/binh/Data/PycharmProjects/pytexexam/out/exam1.pdf (1 pa -ge, 39070 bytes). +ge, 39688 bytes). PDF statistics: 24 PDF objects out of 1000 (max. 8388607) 16 compressed objects within 1 object stream diff --git a/out/exam1.pdf b/out/exam1.pdf index a6c709e..3adea59 100755 Binary files a/out/exam1.pdf and b/out/exam1.pdf differ diff --git a/out/exam1.synctex.gz b/out/exam1.synctex.gz index a14320f..02d401e 100755 Binary files a/out/exam1.synctex.gz and b/out/exam1.synctex.gz differ diff --git a/pytexexam/__init__.py b/pytexexam/__init__.py index 8b13789..874982e 100755 --- a/pytexexam/__init__.py +++ b/pytexexam/__init__.py @@ -1 +1 @@ - +from builder import LatexExamBuilder, ExamExportType \ No newline at end of file diff --git a/pytexexam/builder.py b/pytexexam/builder.py index 87c94ee..67de538 100755 --- a/pytexexam/builder.py +++ b/pytexexam/builder.py @@ -1,3 +1,4 @@ +from enum import Enum from typing import List from latexexam import LatexExamPaper, LatexExamAnswer, LatexExamSolution @@ -6,14 +7,16 @@ class LatexExamBuilder: + """Builder class to create exam,answer and solution paper""" def __init__(self): self.preamble = "" self.header = "" self.questions: List[Question] = list() self.footer = "" - self.export_type = "tex" + self.export_type: ExamExportType = ExamExportType.TEX def create_exam(self, file_dir: str): + """Create exam paper""" exam = LatexExamPaper() exam.preamble = self.preamble exam.header = self.header @@ -22,6 +25,7 @@ def create_exam(self, file_dir: str): self.__export(exam, file_dir) def create_answer(self, file_dir: str): + """Create answer key paper""" exam = LatexExamAnswer() exam.preamble = self.preamble exam.header = self.header @@ -30,6 +34,7 @@ def create_answer(self, file_dir: str): self.__export(exam, file_dir) def create_solution(self, file_dir: str): + """Create solution paper""" exam = LatexExamSolution() exam.preamble = self.preamble exam.header = self.header @@ -38,13 +43,21 @@ def create_solution(self, file_dir: str): self.__export(exam, file_dir) def __export(self, paper: LatexPaper, file_dir: str): - if self.export_type == "tex": + """Export exam to .tex file or pdf file""" + if self.export_type == ExamExportType.TEX: paper.export_tex_file(file_dir) - elif self.export_type == "pdf": + elif self.export_type == ExamExportType.PDF: paper.export_pdf_file(file_dir) else: paper.export_tex_file(file_dir) def add_question(self, question: str, answer: List[str], true_answer: str, answer_column: int, solution: str = ""): + """Add question to exam""" question = Question(question, answer, true_answer, solution, answer_column) self.questions.append(question) + + +class ExamExportType(Enum): + """Class present all export exam options""" + PDF = 0 + TEX = 1 diff --git a/pytexexam/jinja2env.py b/pytexexam/jinja2env.py index 75d04fa..4f811d6 100755 --- a/pytexexam/jinja2env.py +++ b/pytexexam/jinja2env.py @@ -1,5 +1,6 @@ from jinja2 import Environment, PackageLoader +# Jinja environment jinja_env = Environment( loader=PackageLoader('pytexexam', 'templates'), autoescape=False diff --git a/pytexexam/latexexam.py b/pytexexam/latexexam.py index bb13028..67c41e2 100755 --- a/pytexexam/latexexam.py +++ b/pytexexam/latexexam.py @@ -6,6 +6,7 @@ class LatexExamPaper(LatexPaper): + """This class is used to create an exam paper""" def __init__(self): self.preamble = "" self.header = "" @@ -14,6 +15,7 @@ def __init__(self): self.question_translation = "Question" def get_latex_string(self) -> str: + """Generate latex code""" question_str = "" for question in self.questions: question_str += (question.print_question_latex() + "\n\n") @@ -28,6 +30,7 @@ def get_latex_string(self) -> str: class LatexExamAnswer(LatexPaper): + """This class is used to create an answer keys""" def __init__(self): self.preamble = "" self.header = "" @@ -35,6 +38,7 @@ def __init__(self): self.footer = "" def get_latex_string(self) -> str: + """Generate latex code""" return jinja_env.get_template("answer.tex").render( user_preamble=self.preamble, exam_header=self.header, @@ -44,6 +48,7 @@ def get_latex_string(self) -> str: class LatexExamSolution(LatexPaper): + """Generate solution paper for this exam""" def __init__(self): self.preamble = "" self.header = "" @@ -52,6 +57,7 @@ def __init__(self): self.question_translation = "Question" def get_latex_string(self) -> str: + """Generate latex code""" solution_str = "" for question in self.questions: solution_str += (question.print_solution_latex() + "\n\n") diff --git a/pytexexam/latexexamutil.py b/pytexexam/latexexamutil.py index 4766bed..8725cec 100755 --- a/pytexexam/latexexamutil.py +++ b/pytexexam/latexexamutil.py @@ -3,7 +3,7 @@ def ams_math_package() -> str: """ - Returns the command lines needed to type math formula in latex + Returns the code needed to add in preamble to type math formula in latex """ return inspect.cleandoc(r""" \usepackage{amsmath} diff --git a/pytexexam/latexpaper.py b/pytexexam/latexpaper.py index 3eff8ee..9d33d58 100755 --- a/pytexexam/latexpaper.py +++ b/pytexexam/latexpaper.py @@ -2,14 +2,17 @@ class LatexPaper: + """This base class is used to export exam in tex and pdf file""" def get_latex_string(self) -> str: pass def export_tex_file(self, file_dir: str): + """Export to .tex file""" file = open(f"{file_dir}.tex", "w") file.write(self.get_latex_string()) file.close() def export_pdf_file(self, file_dir: str): + """Export to pdf file""" self.export_tex_file(file_dir) os.system(f"pdflatex {file_dir}.tex") diff --git a/pytexexam/question.py b/pytexexam/question.py index e83020a..e1cb1e0 100755 --- a/pytexexam/question.py +++ b/pytexexam/question.py @@ -44,9 +44,11 @@ def __get_answer_key() -> List[str]: return list(string.ascii_uppercase) def shuffle_answer(self): + """Shuffle answer list""" SystemRandom().shuffle(self.answers) def get_true_answer_key(self) -> str: + """Get answer key of true answer""" true_answer = "" for answer in self.answers: if answer.is_true_answer: @@ -54,6 +56,7 @@ def get_true_answer_key(self) -> str: return true_answer def print_question_latex(self) -> str: + """generate latex code for this question""" table_column = "" for i in range(0, self.answer_column): column_size = 1 / self.answer_column @@ -71,6 +74,7 @@ def print_question_latex(self) -> str: ) def print_solution_latex(self) -> str: + """Generate latex code to print question and solution""" return jinja_env.get_template("mcqsolution.tex").render( question=self.print_question_latex(), solution=self.solution diff --git a/setup.py b/setup.py index c022caa..f04b1a6 100755 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name='pytexexam', - version='1.4.3', + version='2.0.0', packages=['pytexexam'], include_package_data=True, url='https://github.com/vungocbinh2009/pytexexam', diff --git a/test/example.py b/test/example.py index 9498fba..81567f5 100755 --- a/test/example.py +++ b/test/example.py @@ -1,15 +1,20 @@ -from builder import LatexExamBuilder +import pytexexam.latexexamutil as util +from pytexexam import LatexExamBuilder, ExamExportType + builder = LatexExamBuilder() +builder.preamble = util.ams_math_package() builder.header = "This is a simple header" builder.footer = "This is a simple footer" +builder.export_type = ExamExportType.PDF builder.add_question( - "This is a simple question", - ["Answer 1", "Answer 2", "Answer 3", "Answer 4"], - "A", - 4, - "This is solution for this question", + question="This is a simple question", + answer=["Answer 1", "Answer 2", "Answer 3", "Answer 4"], + true_answer="A", + answer_column=4, + solution="This is solution for this question", ) + builder.create_exam("exam1") builder.create_answer("answer1") builder.create_solution("solution1")