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")