185 lines
7.5 KiB
TeX
185 lines
7.5 KiB
TeX
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
|
|
\ProvidesPackage{mznstyle}[2016/12/18 LaTeX package (MiniZinc for Sphinx)]
|
|
|
|
\RequirePackage{trace}
|
|
\RequirePackage[breakable]{tcolorbox}
|
|
\RequirePackage{caption}
|
|
\PassOptionsToPackage{hanging,nooneline}{caption}
|
|
|
|
\RequirePackage{chngcntr}
|
|
|
|
\RequirePackage{inputenc}
|
|
\PassOptionsToPackage{utf8}{inputenc}
|
|
|
|
\counterwithin{chapter}{part}
|
|
\renewcommand{\thepart}{\arabic{part}}
|
|
|
|
%\definecolor{UglyGreen}{rgb}{0,1,0}
|
|
\definecolor{UglyGreen}{rgb}{0.418,0.556,0.137}
|
|
%\definecolor{UglyBlue}{rgb}{0,0,1}
|
|
\definecolor{UglyBlue}{rgb}{0.273,0.508,0.703}
|
|
%\definecolor{UglyRed}{rgb}{0.2,0,0}
|
|
\definecolor{UglyRed}{rgb}{0.801,0.359,0.359}
|
|
%\definecolor{UglyOrange}{rgb}{0.2,0,0}
|
|
\definecolor{UglyOrange}{rgb}{0.930,0.906,0.664}
|
|
|
|
\DeclareCaptionFont{white}{\color{white}}
|
|
|
|
|
|
\RequirePackage{tocloft}
|
|
\PassOptionsToPackage{titles}{tocloft}
|
|
|
|
\setcounter{tocdepth}{4}
|
|
\renewcommand*\cftchapnumwidth{2em}
|
|
\renewcommand*\cftsecnumwidth{3em}
|
|
\renewcommand*\cftsubsecnumwidth{4em}
|
|
|
|
\renewenvironment{sphinxadmonition}[2]{
|
|
\begin{tcolorbox}[colbacktitle=UglyBlue,coltitle=white,colframe=UglyBlue,fonttitle=\bfseries\large,title=#2]
|
|
}{\end{tcolorbox}}
|
|
|
|
\tcbset{boxrule=0.4pt}
|
|
|
|
\newtcolorbox[auto counter,number within=chapter]{codebox}[2][]{%
|
|
title=\textbf{Listing~\thetcbcounter:} #2,#1}
|
|
|
|
\renewcommand\sphinxcaption[2][\linewidth]{%
|
|
\noindent\hb@xt@\linewidth{\hss
|
|
\vtop{\@tempdima\dimexpr#1\relax
|
|
% don't exceed linewidth for the caption width
|
|
\ifdim\@tempdima>\linewidth\hsize\linewidth\else\hsize\@tempdima\fi
|
|
% longtable ignores \abovecaptionskip/\belowcaptionskip, so add hooks here
|
|
% to uniformize control of caption distance to tables
|
|
\abovecaptionskip\sphinxabovecaptionskip
|
|
\belowcaptionskip\sphinxbelowcaptionskip
|
|
\caption[{#2}]%
|
|
{\strut\ignorespaces#2\ifhmode\unskip\@finalstrut\strutbox\fi}%
|
|
}\hss}%
|
|
\par\prevdepth\dp\strutbox
|
|
}%
|
|
|
|
\renewenvironment{sphinxVerbatim}{%
|
|
% first, let's check if there is a caption
|
|
\ifx\sphinxVerbatimTitle\empty
|
|
\sphinxvspacefixafterfrenchlists
|
|
% \parskip\z@skip
|
|
\vskip\sphinxverbatimsmallskipamount
|
|
% there was no caption. Check if nevertheless a label was set.
|
|
\ifx\sphinxLiteralBlockLabel\empty\else
|
|
% we require some space to be sure hyperlink target from \phantomsection
|
|
% will not be separated from upcoming verbatim by a page break
|
|
\needspace{\sphinxliteralblockwithoutcaptionneedspace}%
|
|
\phantomsection\sphinxLiteralBlockLabel
|
|
\fi
|
|
\else
|
|
\parskip\z@skip
|
|
\if t\spx@opt@literalblockcappos
|
|
\vskip\spx@abovecaptionskip
|
|
\def\sphinxVerbatim@Before
|
|
{\sphinxVerbatim@Title\nointerlineskip
|
|
\kern\dimexpr-\dp\strutbox+\sphinxbelowcaptionspace\relax}%
|
|
\else
|
|
\vskip\sphinxverbatimsmallskipamount
|
|
\def\sphinxVerbatim@After
|
|
{\nointerlineskip\kern\dp\strutbox\sphinxVerbatim@Title}%
|
|
\fi
|
|
\def\@captype{literalblock}%
|
|
\capstart
|
|
% \sphinxVerbatimTitle must reset color
|
|
% \setbox\sphinxVerbatim@TitleBox
|
|
% \hbox{\begin{minipage}{\linewidth}%
|
|
% \sphinxVerbatimTitle
|
|
% \end{minipage}}%
|
|
\fi
|
|
\fboxsep\sphinxverbatimsep \fboxrule\sphinxverbatimborder
|
|
\ifspx@opt@verbatimwithframe\else\fboxrule\z@\fi
|
|
\let\FrameCommand \sphinxVerbatim@FrameCommand
|
|
\let\FirstFrameCommand\sphinxVerbatim@FirstFrameCommand
|
|
\let\MidFrameCommand \sphinxVerbatim@MidFrameCommand
|
|
\let\LastFrameCommand \sphinxVerbatim@LastFrameCommand
|
|
\ifspx@opt@verbatimhintsturnover\else
|
|
\let\sphinxVerbatim@Continued\@empty
|
|
\let\sphinxVerbatim@Continues\@empty
|
|
\fi
|
|
\ifspx@opt@verbatimwrapslines
|
|
% fancyvrb's Verbatim puts each input line in (unbreakable) horizontal boxes.
|
|
% This customization wraps each line from the input in a \vtop, thus
|
|
% allowing it to wrap and display on two or more lines in the latex output.
|
|
% - The codeline counter will be increased only once.
|
|
% - The wrapped material will not break across pages, it is impossible
|
|
% to achieve this without extensive rewrite of fancyvrb.
|
|
% - The (not used in sphinx) obeytabs option to Verbatim is
|
|
% broken by this change (showtabs and tabspace work).
|
|
\let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineWrap
|
|
\let\FV@Space\spx@verbatim@space
|
|
% Allow breaks at special characters using \PYG... macros.
|
|
\sphinxbreaksatspecials
|
|
% Breaks at punctuation characters . , ; ? ! and / (needs catcode activation)
|
|
\fvset{codes*=\sphinxbreaksviaactive}%
|
|
\else % end of conditional code for wrapping long code lines
|
|
\let\sphinxVerbatimFormatLine\sphinxVerbatimFormatLineNoWrap
|
|
\fi
|
|
\let\FancyVerbFormatLine\sphinxFancyVerbFormatLine
|
|
% workaround to fancyvrb's check of \@currenvir
|
|
\let\VerbatimEnvironment\sphinxVerbatimEnvironment
|
|
% workaround to fancyvrb's check of current list depth
|
|
\def\@toodeep {\advance\@listdepth\@ne}%
|
|
% The list environment is needed to control perfectly the vertical space.
|
|
% Note: \OuterFrameSep used by framed.sty is later set to \topsep hence 0pt.
|
|
% - if caption: distance from last text baseline to caption baseline is
|
|
% A+(B-F)+\ht\strutbox, A = \abovecaptionskip (default 10pt), B =
|
|
% \baselineskip, F is the framed.sty \FrameHeightAdjust macro, default 6pt.
|
|
% Formula valid for F < 10pt.
|
|
% - distance of baseline of caption to top of frame is like for tables:
|
|
% \sphinxbelowcaptionspace (=0.5\baselineskip)
|
|
% - if no caption: distance of last text baseline to code frame is S+(B-F),
|
|
% with S = \sphinxverbatimtopskip (=\smallskip)
|
|
% - and distance from bottom of frame to next text baseline is
|
|
% \baselineskip+\parskip.
|
|
% The \trivlist is used to avoid possible "too deeply nested" error.
|
|
\itemsep \z@skip
|
|
\topsep \z@skip
|
|
\partopsep \z@skip
|
|
% trivlist will set \parsep to \parskip = zero
|
|
% \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
|
|
\ifx\sphinxVerbatimTitle\empty
|
|
\begin{tcolorbox}[breakable,toprule at break=0pt,bottomrule at break=0pt,pad at break*=2mm]
|
|
\else
|
|
% \show\sphinxVerbatimTitle
|
|
% \begin{codebox}{\sphinxLiteralBlockLabel \sphinxVerbatimTitle}
|
|
\captionsetup{margin=0pt,aboveskip=0pt,belowskip=0pt,justification=raggedright,singlelinecheck=false,font=white}
|
|
% \traceon
|
|
\begin{tcolorbox}[breakable,,toprule at break=0pt,bottomrule at break=0pt,pad at break*=2mm,title={\sphinxVerbatimTitle}]
|
|
% \traceoff
|
|
\fi
|
|
% \MakeFramed {% adapted over from framed.sty's snugshade environment
|
|
% \advance\hsize-\width\@totalleftmargin\z@\linewidth\hsize\@setminipage
|
|
% }%
|
|
% For grid placement from \strut's in \FancyVerbFormatLine
|
|
\lineskip\z@skip
|
|
% active comma should not be overwritten by \@noligs
|
|
\ifspx@opt@verbatimwrapslines
|
|
\let\verbatim@nolig@list \sphinx@verbatim@nolig@list
|
|
\fi
|
|
% will fetch its optional arguments if any
|
|
\OriginalVerbatim
|
|
}
|
|
{%
|
|
\endOriginalVerbatim
|
|
% \par\unskip\@minipagefalse\endMakeFramed % from framed.sty snugshade
|
|
\end{tcolorbox}
|
|
\ifspx@inframed\end{minipage}\fi
|
|
\global\let\sphinxLiteralBlockLabel\empty
|
|
\global\let\sphinxVerbatimTitle\empty
|
|
\endtrivlist
|
|
}
|
|
|
|
\def\theliteralblock{\arabic{part}.\arabic{chapter}.\arabic{literalblock}}
|
|
\def\thefigure{\arabic{part}.\arabic{chapter}.\arabic{figure}}
|