o f'ha@sLdZdZddlZddlZddlZddlZejdkr&ddlmZddl m Z nddl m Z zddl Z Wne yDddlmm Z YnwddlZddlmZmZmZmZmZddlmZdd lmZdd lmZmZejdkrreZGd d d ejZGd ddeZ Gddde!Z"GdddeZ#de#_$de#_%de#_&de#_'de#_(de#_)de#_*de#_+de#_,de#_-ddZ.ej/0e1ej/2e3dZ4ee4d d!2Z5e5D]'Z6e67d"Z6e68d#sqe69d$Z:e:sqe.e5Z;e:d%vre;7Z;eGd*d+d+eZ?Gd,d-d-ej@ZAdS).zLaTeX2e document tree Writer.reStructuredTextN)r)open) url2pathname)frontendnodes languageswritersutils) SafeString) writer_aux)pick_math_environment unichar2texc @szeZdZdZ dZeej e Z d gdZ dZddgdd gd d ifd d gd difddgddgddddfddgddejdfddgddejdfd d!ggd"d#dd$fd%d&gd'd(d)ejd*fd+d,gd(d-ejd.fd/d0gd1dd2fd3d4gddejdfd5d6gd7ejd8gd9fd:d;gd e ifdd?fd@dAgdBdejdfdCdDgdEdejdfdFdGgddejdfdHdIgdJdejdfdKdLgddejdfdMdNgdOdejdfdPdQgddejdfdRdSgd dTifdUdVgd d'ifdWdXgddejdfdYdZgdd[d\fd]d^gddejdfd_d`gddad\fdbdcgddded?fdfdggd d'ifdhdigddejdfdjdkgdlgddmejednfdodpgd d'ifdqdrgd dsifdtdugd d'ifdvdwgd d'ifdxdygdBdejdfdzd{gd|dejdfd}d~gdBdejdfRfZddiZdZdZdZedZdZ ddZddZddZddZdS)Writer)latexlatex2ez default.tex )z% PDF Standard Fontsz\usepackage{mathptmx} % Timesz\usepackage[scaled=.90]{helvet}z\usepackage{courier})standardbooktabsnolines borderlesscolwidths-autocolwidths-givenzLaTeX-Specific OptionsNz1Specify LaTeX documentclass. Default: "article".z--documentclassdefaultarticlezcSpecify document options. Multiple options can be given, separated by commas. Default: "a4paper".z--documentoptionsa4paperz\Format for footnote references: one of "superscript" or "brackets". Default: "superscript".z--footnote-references superscriptbracketsztrim_footnote_reference_space)choicesrmetavar overridesz1Use \cite command for citations. (future default)z--use-latex-citationsF store_true)raction validatorzVUse figure floats for citations (might get mixed with real figures). (current default)z--figure-citationsuse_latex_citations store_false)destr#r$zyFormat for block quote attributions: one of "dash" (em-dash prefix), "parentheses"/"parens", or "none". Default: "dash".z --attributiondash parenthesesparensnoner))rrr zSpecify LaTeX packages/stylesheets. A style is referenced with "\usepackage" if extension is ".sty" or omitted and with "\input" else. Overrides previous --stylesheet and --stylesheet-path settings.z --stylesheetzstylesheet_path)rr r!r$zComma separated list of LaTeX packages/stylesheets. Relative paths are expanded if a matching file is found in the --stylesheet-dirs. With --link-stylesheet, the path is rewritten relative to the output *.tex file. z--stylesheet-path stylesheet)r r!r$z7Link to the stylesheet(s) in the output file. (default)z--link-stylesheetembed_stylesheet)r'r#z^Embed the stylesheet(s) in the output file. Stylesheets must be accessible during processing. z--embed-stylesheetzComma-separated list of directories where stylesheets are found. Used by --stylesheet-path when expanding relative path arguments. Default: ".".z--stylesheet-dirsz.)r r$rzlCustomization by LaTeX code in the preamble. Default: select PDF standard fonts (Times, Helvetica, Courier).z--latex-preamblez)Specify the template file. Default: "%s".z --templatez)rr z%Table of contents by LaTeX. (default)z--use-latex-tocTz5Table of contents by Docutils (without page numbers).z--use-docutils-toc use_latex_tocz*Add parts on top of the section hierarchy.z--use-part-sectionzzdWhen possible, use the specified environment for literal-blocks. Default: "" (fall back to "alltt").z--literal-block-envziWhen possible, use "verbatim" for literal-blocks. Compatibility alias for "--literal-block-env=verbatim".z--use-verbatim-when-possiblezTable style. "standard" with horizontal and vertical lines, "booktabs" (LaTeX booktabs style) only horizontal lines above and below the table and below the header, or "borderless". Default: "standard"z --table-stylerappend)rr r#r$rzLaTeX graphicx package option. Possible values are "dvipdfmx", "dvips", "dvisvgm", "luatex", "pdftex", and "xetex".Default: "".z--graphicx-optionzLaTeX font encoding. Possible values are "", "T1" (default), "OT1", "LGR,T1" or any other combination of options to the `fontenc` package. z--font-encodingT1zPer default the latex-writer puts the reference title into hyperreferences. Specify "ref*" or "pageref*" to get the section number or the page number.z--reference-labelzVSpecify style and database for bibtex, for example "--use-bibtex=mystyle,mydb1,mydb2".z --use-bibtexz]Use legacy functions with class value list for \DUtitle and \DUadmonition (current default). z--legacy-class-functionszqUse \DUrole and "DUclass" wrappers for class values. Place admonition content in an environment (future default).z--new-class-functionslegacy_class_functionszsFootnotes with numbers/symbols by Docutils. (default) (The alternative, --latex-footnotes, is not implemented yet.)z--docutils-footnotes sectnum_depthrzlatex2e writer)r z latex writers) head_prefix requirementslatex_preambler/ fallbackspdfsetup titledata)titlesubtitlebody_pre_docinfodocinfo dedicationabstractbodycCstj|t|_dSN)r r__init__LaTeXTranslatortranslator_classselfrPC/usr/lib/python3/dist-packages/docutils/writers/latex2e/__init__.pyrKs  zWriter.__init__cCstj|tjgSrJ)r rget_transformsr AdmonitionsrNrPrPrQrRs zWriter.get_transformscCs||j}|j||jD] }t||t||qz t|jjjdd}Wnt y>tt j |j |jjjdd}Ynwt|}||||j|_dS)Nutf8encoding)rMdocument walkaboutvisitor_attributessetattrgetattrrsettingstemplateIOErrorospathjoindefault_template_pathstringTemplatereadcloseassemble_parts substitutepartsoutput)rOvisitorpart template_filer]rPrPrQ translates&       zWriter.translatecCs`tj||jD]$}t||}||jvr%|r|dd||j|<q d||j|<q dS)z9Assemble the `self.parts` dictionary of output fragments.r-rN) r rrgrYr[ head_partsr9rari)rOrllinesrPrPrQrgs     zWriter.assemble_parts)__name__ __module__ __qualname__ supporteddefault_templatedocutils_datadirr_r`abspath__file__rbradefault_preambletable_style_valuesrvalidate_booleanvalidate_comma_separated_list settings_specsettings_defaultsconfig_sectionconfig_section_dependenciesrorYrjrKrRrnrgrPrPrPrQr*s #*-29=@DHLPTX\ _ afjorvz $+6 rc@seZdZdZidddddddd d d d d ddddddddddddddddddd d!d"d#id$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;dd?d@dAdBdCdDdEidFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcddd_dedfidgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{drd|dtd}d~ddddddZeddeDZdZdddZdddZ ddZ ddZ ddZ dS)BabelzLanguage specifics for LaTeX.af afrikaansararabicbg bulgarianbrbretoncacatalancsczechcywelshdadanishdengermanzde-1901germanzde-AT naustrianz de-AT-1901austriandsb lowersorbianelgreekz el-polytonpolutonikogreekenenglishzen-AU australianzen-CAcanadianzen-GBbritishzen-NZ newzealandzen-USamericaneo esperantoesspanishetestonianeubasquefifinnishfrfrenchzfr-CAcanadiengairishz grc-ibycusibycusglgalicianhehebrewhrcroatianhsb uppersorbianhumagyaria interlinguaidbahasaiis icelandicititalianjajapanesekkkazakhlalatinlt lithuanianlvlatvianmn mongolianmsbahasamnbnorsknldutchnnnynorsknoplpolishptportugeszpt-BRbrazilroromanianrurussiansesaminzsh-Cyrlserbianczsh-Latnserbianskslovakslslovenesqalbaniansrzsr-Latnsvswedishtrturkishuk ukrainianvivietnamcCsg|] \}}||fqSrP)lower).0kvrPrPrQ szBabel.z,Language "%s" not supported by LaTeX (babel)z.<>)rrNcCs||_|||_i|_dSrJ)reporter language_namelanguageotherlanguages)rO language_coderrPrPrQrKs  zBabel.__init__cstj}|jp ddd|g_g}dfdd|DD] }||vr1||q&|r?jdd|d|vrIjd d |vrUjgd d |vrajgd |ddkr{djvr{jdddjg7_djS)z7Return the babel call with correct options and settingsrz\usepackage[%s]{babel},r-csg|] }j|dqS)r-) active_charsget)rlrNrPrQrz"Babel.__call__..z#\AtBeginDocument{\shorthandoff{%s}}rz)\deactivatetilden % restore ~ in Galicianr) \makeatletterz+ \addto\extrasestonian{\bbl@deactivate{~}} \makeatotherr)rz) \addto\extrasbasque{\bbl@deactivate{~}}rrzE% Prevent side-effects if French hyphenation patterns are not loaded:z\frenchbsetup{StandardLayout}z4\AtBeginDocument{\selectlanguage{%s}\noextrasfrench}r)sortedrkeysr9rrasetupextend)rOr shorthandscrPrNrQ__call__s6    zBabel.__call__c CsRt|D]}z|j|WStyYqw|jdur'|j|j|dS)z,Return TeX language name for `language_code`Nr-)r normalize_language_taglanguage_codesKeyErrorrwarningwarn_msg)rOrtagrPrPrQrs  zBabel.language_namecC|jSrJ)rrNrPrPrQ get_languageszBabel.get_languagerJ) rqrrrs__doc__rdictitemsrrrKrrrrPrPrPrQr(s$       !#$%&'()*+,-./0123456789:;<=>?@ABCDEGHIM ! rc@s eZdZdZddZddZdS) SortableDictzDictionary with additional sorting methods Tip: use key starting with with '_' for sorting before small letters and with '~' for sorting after small letters. cCst|}|S)zReturn sorted list of keys)r r )rOr rPrPrQ sortedkeyss zSortableDict.sortedkeyscsfddDS)z$Return list of values sorted by keyscsg|]}|qSrPrP)rkeyrNrPrQrz-SortableDict.sortedvalues..)rrNrPrNrQ sortedvalueszSortableDict.sortedvaluesN)rqrrrsrrrrPrPrPrQrs rc@seZdZdZdS) PreambleCmdsz'Building blocks for the latex preamble.N)rqrrrsrrPrPrPrQr!sr!z\usepackage{color}zl\usepackage{float} % extended float configuration \floatplacement{figure}{H} % place figures here definitelyz%% hyperlinks: \ifthenelse{\isundefined{\hypersetup}}{ \usepackage[%s]{hyperref} \usepackage{bookmark} \urlstyle{same} %% normal text font (alternatives: tt, rm, sf) }{}z/%% local table of contents \usepackage{minitoc}zz\usepackage{longtable,ltcaption,array} \setlength{\extrarowheight}{2pt} \newlength{\DUtablewidth} % internal use in tablesz*\usepackage{textcomp} % text symbol macroszQ % abstract title \providecommand*{\DUtitleabstract}[1]{\centerline{\textbf{#1}}}a % admonition (specially marked topic) \providecommand{\DUadmonition}[2][class-arg]{% % try \DUadmonition#1{#2}: \ifcsname DUadmonition#1\endcsname% \csname DUadmonition#1\endcsname{#2}% \else \begin{center} \fbox{\parbox{0.9\linewidth}{#2}} \end{center} \fi }zU % error admonition title \providecommand*{\DUtitleerror}[1]{\DUtitle{\color{red}#1}}a % title for topics, admonitions, unsupported section levels, and sidebar \providecommand*{\DUtitle}[2][class-arg]{% % call \DUtitle#1{#2} if it exists: \ifcsname DUtitle#1\endcsname% \csname DUtitle#1\endcsname{#2}% \else \smallskip\noindent\textbf{#2}\smallskip% \fi }cCs8t|g}|D] }|sn||qd|S)Nr-)nextstripr9rarstrip)fpblocklinerPrPrQ _read_block7s  r( docutils.styrTrUz% z:::)colorfloattabletextcompc@s,eZdZdZeddeddeddiZedd ed d ed d eddeddeddeddeddeddeddddi Ziddd d!d"dd#d!d$d%d&d'd(d%d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<Zid=dd>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbZidcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddiddddddddddddddddddddddddddddddddddiddddddddddddddddddddddddddddddddÓddœiddǓddɓdd˓ddaddΓddГddғddԓdd֓ddؓddړddܓddޓddddddddddddddZ dddddZ dS)CharMapsz8LaTeX representations for active and Unicode characters.\z\textbackslash{}{z\{}z\}#\#$z\$%\%&z\&~z\textasciitilde{}_\_^z\textasciicircum{}"z\textquotedbl{}[z{[}]z{]}z\-i z\enskipi z\quadi i i z\,i z \hspace{0pt}i/ i z\hbox{-}i+!z\AAi!z\ensuremath{\Leftrightarrow}i`&z\ensuremath{\spadesuit}ic&z\ensuremath{\clubsuit}iffirifliffiifflz\guillemotleft{}z\guillemotright{}i z\textcompwordmark{}i z \textendash{}i z \textemdash{}i z\textquoteleft{}i z\textquoteright{}i z\quotesinglbase{}i z\textquotedblleft{}i z\textquotedblright{}i z\quotedblbase{}i0 z\textperthousand{}i1 z\textpertenthousand{}i9 z\guilsinglleft{}i: z\guilsinglright{}i#$z\textvisiblespace{}z\dag{}z\ddag{}z\dots{}z\texttrademark{})i i! i& "!z \textcent{}z\textcurrency{}z \textyen{}z\textbrokenbar{}z\textsection{}z\textasciidieresis{}z\textcopyright{}z\textordfeminine{}z \textlnot{}z\textregistered{}z\textasciimacron{}z \textdegree{}z \textpm{}z\texttwosuperior{}z\textthreesuperior{}z\textasciiacute{}z \textmu{}z\textparagraph{}z\textonesuperior{}z\textordmasculine{}z\textonequarter{}z\textonehalf{}z\textthreequarters{}z \texttimes{}z \textdiv{}iz \textflorin{}iiz\textacutedbl{}i z \textbardbl{}i" z \textbullet{}i2 i3 i5 z\textasciigrave{}i6 z\textgravedbl{}i; z\textreferencemark{}i= z\textinterrobang{}iD z\textfractionsolidus{}iE z \textlquill{}iF z \textrquill{}iR z\textdiscount{}i z\textcolonmonetary{}i z\textfrenchfranc{}i z \textlira{}i z \textnaira{}i z \textwon{}i z \textdong{}i z \texteuro{}i z \textpeso{}i z\textguarani{}i!z\textcelsius{}i!z \textnumero{}i!z\textcircledP{}i!z \textrecipe{}i !z\textservicemark{}rHi&!z \textohm{}i'!z \textmho{}i.!z\textestimated{}i!z\textleftarrow{}i!z\textuparrow{}i!z\textrightarrow{}i!z\textdownarrow{}i"z \textminus{}i"z\textasteriskcentered{}i"z \textsurd{}i"$z \textblank{}i%z\textopenbullet{}i%z\textbigcircle{}z\textmusicalnote{}z\textmarried{}z\textdivorced{}z \textlangle{}z \textrangle{})ij&i&i&i'i'z \ding{170}z \ding{169}z \ding{51}z \ding{55})ie&if&i'i'N) rqrrrsrordallttspecialunsupported_unicodeutf8_supported_unicoder.pifontrPrPrPrQr/Us               !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGO r/c@s"eZdZdZdddZddZdS) DocumentClassz"Details of a LaTeX document class.FcCsJ||_||_gd|_|jdvr|jdd|jr#|jdddSdS)N)section subsection subsubsection paragraph subparagraph)bookmemoirreportscrbookscrreprtrchapterrl)document_class _with_partsectionsinsert)rOrt with_partrPrPrQrKs  zDocumentClass.__init__cCs |t|jkr|j|dSdS)zReturn the LaTeX section name for section `level`. The name depends on the specific document class. Level is 1,2,3..., as level 0 is the title. DUtitle)lenrv)rOlevelrPrPrQriszDocumentClass.sectionN)F)rqrrrsrrKrirPrPrPrQrhs  rhc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ d8ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7S)9TableaManage a table while traversing. Maybe change to a mixin defining the visit/departs, but then class Table internal variables are in the Translator. Table style might be :standard: horizontal and vertical lines :booktabs: only horizontal lines (requires "booktabs" LaTeX package) :borderless: no borders around table cells :nolines: alias for borderless :colwidths-auto: column widths determined by LaTeX :colwidths-given: use colum widths from rST source cCs:||_||_d|_i|_g|_g|_g|_d|_d|_dS)NFr) _translator _latex_type_open_attrs _col_width_rowspanstubscolwidths_auto _in_thead)rO translator latex_typerPrPrQrK*s zTable.__init__cCs"d|_g|_g|_i|_d|_dS)NTF)r _col_specscaptionr_in_headrNrPrPrQr6s  z Table.opencCs(d|_d|_g|_i|_g|_d|_dSNF)rrrrrrrNrPrPrQrf<s  z Table.closecCrrJ)rrNrPrPrQis_openDz Table.is_opencCs`dd||D}z|d|_Wn tyd|_Ynwd|vr%d|vp,d|vo,d|v|_dS)NcSs g|] }|dvr|ddqS))rrrrrrreplacerclsrPrPrQrHs  z)Table.set_table_style..rrrr)borders IndexErrorr)rO table_styleclassesrrPrPrQset_table_styleGs  zTable.set_table_stylecCs|jdkr |js dS|jS)N longtable longtable*)rrrNrPrPrQget_latex_typeTszTable.get_latex_typecCs||j|<dSrJr)rOattrvaluerPrPrQsetZz Table.setcCs||jvr |j|SdSrJr)rOrrPrPrQr\s  z Table.getcCs|jdkrdSdS)Nr|r-)rrNrPrPrQget_vertical_baras zTable.get_vertical_bar \linewidthcCsvddddd}||d}|}|r$|dvr$d|fd |fg}nd ||fg}|js6|d d |d |S)Nz[l]z[c]z[r]r-)leftcenterrightNalignrrz"\noindent\makebox[\linewidth]%s{%% \begin{%s}z \begin{%s}%srz\setlength{\DUtablewidth}{%s}%%r)rrrrwra)rOwidth align_maprropeningrPrPrQ get_openinggs  zTable.get_openingcCsTg}|jdkr |d|d||dr%|dvr%|dd|S)Nrz \bottomrule\end{%s}rrr2r)rr9rrra)rOclosingrPrPrQ get_closingxs    zTable.get_closingcCs$|j||j|jddS)Nstub)rr9r attributesrrOnoderPrPrQ visit_colspecs zTable.visit_colspeccCs|}dgt|j|_g|_|jr |dt|j}||Sd}d}|jD]}t|dd|}||7}q'd}|dkrB||}d }|jD] }|t|dd|}|j|d |d ||d f7}qG||S) zReturn column specification for longtable. Assumes reST line length being 80 characters. Table width is hairy. === === ABC DEF === === usually gets to narrow, therefore we add 1 (fiddlefactor). rrPgcolwidthryg(\?g?r-g{Gzt?z%sp{%.3f\DUtablewidth})rr{rrrrr,r9)rOrbarlatex_table_specr total_widthrfactorrPrPrQ get_colspecss(    zTable.get_colspecscCs(z d|j|jWStyYdSw)z4Return columnwidth for current cell (not multicell).z%.2f\DUtablewidth*)r _cell_in_rowrrNrPrPrQget_column_widths  zTable.get_column_widthcsFztddfddt|DD}d|WSty"YdSw)z)Return sum of columnwidths for multicell.cSsg|]}|qSrPrP)rrrPrPrQrsz/Table.get_multicolumn_width..csg|] }j|qSrP)r)rcorOstartrPrQrszp{%.2f\DUtablewidth}r)sumranger)rOrlen_mc_widthrPrrQget_multicolumn_widths   zTable.get_multicolumn_widthcCs4|jsdSd|j}d|jkrd|Sd|S)Nr-ryz\caption{%s}\\ z!\caption[]{%s (... continued)}\\ )rrar~ thead_depth)rOrrPrPrQ get_captions  zTable.get_captioncCs|jdkr d|jkSdS)Nrryr)rr~rrNrPrPrQ need_recurses zTable.need_recursecCs2|jd7_|jdkrdgS|jdkrdgSgS)Nryr\hline rz \toprule )rrrNrPrPrQ visit_theads   zTable.visit_theadcCszg}|jdkr |d|jdkr4d|jkr|dn|d|dt|jd|d |jd8_|S) Nrz \midrule rryz\endfirsthead z \endhead z\multicolumn{%d}{c}z&{\hfill ... continued on next page} \\z \endfoot \endlastfoot )rr9rr~rr{rr)rOarPrPrQ depart_theads      zTable.depart_theadcCs d|_dSNrrrNrPrPrQ visit_rows zTable.visit_rowcsdg}d_ttjD]}j|dkrj|d8<q jdkrdfddttjD}t|tjkrC|d|Sd}| z|}WnYn |d ||f7}qJ|||S) N \\ rryrcs"g|] }j|dkr|dqS)rryr)rirNrPrQrsz$Table.depart_row..rr-Tz\cline{%d-%d} )rrr{rrr9reversepop)rOresrrowspansclinec_startrPrNrQ depart_rows,     zTable.depart_rowcCsz||j|<WdSYdSrJr)rOcellrrPrPrQ set_rowspanszTable.set_rowspancCsz|j|WSYdSrr)rOrrPrPrQ get_rowspans zTable.get_rowspancCrrJrrNrPrPrQget_entry_number rzTable.get_entry_numbercCs|jd7_dSNryrrNrPrPrQ visit_entryzTable.visit_entrycCs t|j|jkr|j|jSdSr)r{rrrNrPrPrQis_stub_columns zTable.is_stub_columnN)r)rqrrrsrrKrrfrrrrrrrrrrrrrrrrrrrrrrrrPrPrPrQr}s8    #  r}c@seZdZdZdZdZdZdZdZdZ dZ dZ dZ dZ dZdZdZefddZddZd d Zd d Zd dZedfddZddZddZdddZddZdddZddZd d!Z d"d#Z!d$d%Z"d&d'Z#d(d)Z$d*d+Z%d,d-Z&d.d/Z'd0d1Z(d2d3Z)d4d5Z*d6d7Z+d8d9Z,d:d;Z-dd?Z/d@dAZ0dBdCZ1dDdEZ2dFdGZ3dHdIZ4dJdKZ5dLdMZ6dNdOZ7dPdQZ8dRdSZ9dTdUZ:dVdWZ;dXdYZd^d_Z?d`daZ@dbdcZAdddeZBdfdgZCdhdiZDdjdkZEdldmZFdndoZGdpdqZHdrdsZIdtduZJdvdwZKdxdyZLdzd{ZMd|d}ZNd~dZOddZPddZQddZRddZSddZTddZUddZVddZWddZXddZYddZZddZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZaddZbddZcddZdddZeddZfddZgddZhddZiddZjddZkddZlddZmddZnddZoddZpddÄZqddńZrddDŽZsddɄZtdd˄Zudd̈́ZvddτZwddфZxddӄZyddՄZzddׄZ{ddلZ|ddۄZ}dd݄Z~dd߄ZddZddZddZddZdddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZdd Zd d Zd d ZddZdddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Zd=d>Zd?d@ZdAdBZdCdDZdEdFZdGdHZdIdJZdKdLZdMdNZdOdPZdQdRZdSdTZdUdVZdWdXdXdYdZZd[d\Zd]d^Zd_d`ZdadbZdcddZdedfZdgdhZdidjZÐdkdlZĐdmdnZŐdodpZƐdqdrZǐdsdtZȐdudvZɐdwdxZʐdydzZːd{d|Z̐d}d~Z͐ddZΐddZϐddZАddZdZҐddZӐddZԐddZՐddZ֐ddZאddZؐddZِddZڐddZېddZܐddZݐddZސddZdS(rLz Generate code for 8-bit LaTeX from a Docutils document tree. See the docstring of docutils.writers._html_base.HTMLTranslator for notes on and examples of safe subclassing. Fr8rc stj|jjj_jjj_|j_} |j _ |j _ |j _ |j_|j_|j_|j_t|dd_|j_|jdd_d_d_|jrbtd|j\}__}n|jrhd_jjrvjjdd_nd_t !|j"|j_#||j"|j_$j#j%d _&jj'g}j$j(d vr|)j$j(d*t+d|_'t,|j-|j._/jj0dkrd _1nd jj0_1|j2_2d j'jj-fg_3t4_5dj5d<|j6g_6t4_7g_8g_9g_:g_;g_g_?g_@g_A g_Bg_Cg_Dg_Eg_Fg_G|j"dkr&jG)d|j"d g_Hg_Id _Jg_Kg_LtMd_Nj@_Og_Pj dkrQdj j5d<jQsjradjj5d<jdD]}|R}|dkrydj5d<qg|dvrdj5d<qg|j-Sddkrj'Sd dksj'Sd!dkrd"j5d#<tTU|}d$|v_VjVrd%d&|D}jjWrd'_Vnd(j7d)<fd*d&|D_Xjd+vrd_Yn d,jjf_Y|jYrjYd|jY7_Y|jZrd-t[_\dS|j]}|dur*t^|t_j/j`}d.j/j`vr|d8}j/j`d d/kr%|d8}d0|t[_\ta|d1rH|jbdkrJd2j/j`d |jbdfj5d1<dSdSdS)3N font_encodingr-r:r;z (\w+)(.*)verbatimrryr)rr-z\usepackage{graphicx}z\usepackage[%s]{graphicx}z\documentclass[%s]{%s}z\usepackage{ifthen}__staticrz pdflang={%s},rasciiz\usepackage[%s]{inputenc} _inputencz\usepackage[%s]{fontenc}_fontencOT1z+\DeclareTextSymbol{\textquotedbl}{OT1}{`\"}_textquotedblOT1)r:T2AT2BT2CT4T5z,\DeclareTextSymbolDefault{\textquotedbl}{T1} _textquotedblscrrDIVBCORz\usepackage{typearea}typearearvcSg|]}|dkr|qS)rvrP)rsheetrPrPrQrz,LaTeXTranslator.__init__..Fz!\usepackage{docutils}[2020/08/28]r)csg|]}|qSrP)stylesheet_call)rr`rNrPrQr)0falseFalser-z(colorlinks=true,linkcolor=%s,urlcolor=%sz\setcounter{secnumdepth}{0}rsrlz\setcounter{secnumdepth}{%d} sectnum_startz\setcounter{%s}{%d})cr NodeVisitorrKrWrrwarnerrorr\to_latex_encodingoutput_encodinglatex_encodingr2r3r%_use_latex_citationsreference_label_reference_labelhyperlink_colorr6r[rr7section_enumerator_separatorrliteral_block_envliteral_block_optionsresplituse_verbatim_when_possible use_bibtexbibtexrrrlanguage_modulebabelauthor_separatorsauthor_separatordocumentoptionsrr9rafilterrh documentclassuse_part_sectiond_classgraphicx_optiongraphicx_packagedocutils_footnotesr=rr>r?r@rArCrDrBrErFrGrHrIcontext title_labelssubtitle_labels author_stackdate pdfauthorpdfinfo_section_number_enumeration_counters_max_enumeration_counters _bibitems table_stackr} active_tableout out_stackis_xetexr#findr get_stylesheet_listfallback_stylesheetr;r/hyperref_options sectnum_xformr! secnumdepthr<minr{rvhasattrr) rOrW babel_classr\r, d_optionsencstylesheet_listr1rPrNrQrKHs                              zLaTeXTranslator.__init__c Cstj|\}}|dv}|jjrd|r|d}ztjj|dd}|jj |Wn*t yS}zd|t |j f}|jj|d|ddWYd }~Sd }~ww|r^dd |d g}d ||fS|rk|}d }nd}|jjryt|jj|}||S)z8Return code to reference or embed stylesheet file `path`).styr-r8zutf-8) source_pathrVz!Cannot embed stylesheet %r: %s.z% r % Nrrz%% embedded stylesheet: %s %sz\usepackage{%s}z \input{%s})r_r`splitextr\r0rvio FileInputrerecord_dependenciesaddr^r strerrorrWrrrrar.r relative_path _destination) rOr`baseext is_packagecontenterrmsgcmdrPrPrQr.sB  zLaTeXTranslator.stylesheet_callcCs\ddddddddd d d d d dd}|}||vr||S|dddd}|ddS)zTranslate docutils encoding name into LaTeX's. Default method is remove "-" and "_" chars from docutils_encoding. latin1latin2latin3latin4iso88595latin5latin9maccyrcp1251koi8-rkoi8-ucp1250cp1252r)z iso-8859-1z iso-8859-2z iso-8859-3z iso-8859-4z iso-8859-5z iso-8859-9z iso-8859-15 mac_cyrillicz windows-1251rSrTz windows-1250z windows-1252zus-asciir:r-r8r*r)rrr )rOdocutils_encodingrrVrPrPrQrPs(z!LaTeXTranslator.to_latex_encodingcCs |jj|SrJ)rlabels)rO docutil_labelrPrPrQlanguage_labelys zLaTeXTranslator.language_labelc Cs6|jr|Stj}|js|tj|jr|js|td=|jdvrN|j sN|j r``. * Translate non-supported Unicode characters. * Separate ``-`` (and more in literal text) to prevent input ligatures. r:)rr-z \underline{~}graphicxz\reflectbox{/}r0z \textbar{}rz \textless{}r9  rTr.z\usepackage{pifont}rgz"\DeclareUnicodeCharacter{%04X}{%s}rr8z,`'"<>z{}rNr\\ z z ~) rr/rccopyupdaterdinside_citation_reference_labelrbrr+literalrr>insert_non_breaking_blanksr\ tab_widthr startswithrerfr.rgr.r!strrnrinsert_newliner  enumeratelstripra) rOtextr-chcpseparate_charscharrprr'rPrPrQencode|sl                          zLaTeXTranslator.encodez[ ]cCs||d|S)z1Cleanse, encode, and return attribute value text.r_)rssub)rOrn whitespacerPrPrQattvalszLaTeXTranslator.attvalcCst|jtjS)z@Check whether a node represents an inline or block-level element) isinstanceparentr TextElementrrPrPrQ is_inlineszLaTeXTranslator.is_inlinecCs$|jddd|dDdS)z)Append hypertargets for all ids of `node`% cSg|]}d|qS)z"\raisebox{1em}{\hypertarget{%s}{}}rPrrrPrPrQrs z7LaTeXTranslator.append_hypertargets..idsN)r)r9rarrPrPrQappend_hypertargetssz#LaTeXTranslator.append_hypertargetsTcCs@dd|dgD}|rdd|D}|r|r|dd|S)zReturn list of label definitions for all ids of `node` If `set_anchor` is True, an anchor is set with \phantomsection. If `protect` is True, the \label cmd is made robust. cSr|)z \label{%s}rPr}rPrPrQrrz1LaTeXTranslator.ids_to_labels..r~cSsg|]}d|qS)z\protectrP)rlabelrPrPrQrrrz\phantomsection)rrw)rOr set_anchorprotectrYrPrPrQ ids_to_labelss  zLaTeXTranslator.ids_to_labelscCsHdd|dD}|r"|ddd|d<dd|dD|d<d Sd S) z8Convert ``align-*`` class arguments into alignment args.cSsg|] }|dr|qSalign-rirrPrPrQrrz:LaTeXTranslator.set_align_from_classes..rrrr-rcSsg|] }|ds|qSrrrrPrPrQrs Nr)rOrrrPrPrQset_align_from_classess z&LaTeXTranslator.set_align_from_classesNcCsX|d|}|dkr|jddS|dkr|jddS|dkr*|jddSdS)Nrrz \raggedright rz \centering rz \raggedleft )rr)r9)rOrrrrPrPrQinsert_align_declarations z(LaTeXTranslator.insert_align_declarationcCst|jtjs |jd|dD]?}|dr3|j|dd}|r2d|jj |<|jd|qt|tj r?|t j vr?q|j sHtj|jd<|jd |qdS) z6Open a group and insert declarations for class values.rr language- NTz\begin{selectlanguage}{%s} DUclassz\begin{DUclass}{%s} )rwrxrcompoundr)r9rirrrr-rr{r.r!duclassr@rOrrrrPrPrQ duclass_open s     zLaTeXTranslator.duclass_opencCs|t|dD]5}|dr |j|dd}|r|jdqt|tjr,|t j vr,q|j s5t j |jd<|jdqdS)z$Close a group of class declarations.rrrNz\end{selectlanguage} r\end{DUclass} )reversedrirrr)r9rwrr-rr{r.r!rr@rrPrPrQ duclass_closes   zLaTeXTranslator.duclass_closecCs|j|j||_dSrJ)r*r9r))rOnew_outrPrPrQpush_output_collector(s z%LaTeXTranslator.push_output_collectorcCs|j|_dSrJ)r*rr)rNrPrPrQpop_output_collector,z$LaTeXTranslator.pop_output_collectorcCsn|D]}t|tjtjtjfsnqdSt|tjrdSt|tjtjfr*||St|tj tj fs5dSdS)aD Return LaTeX code required between term or field name and content. In a LaTeX "description" environment (used for definition lists and non-docinfo field lists), a ``\leavevmode`` between an item's label and content ensures the correct placement of certain block constructs. r-z \leavevmode \leavevmode) rwr Invisiblefootnotecitationimage containerr term_postfixrl math_block)rOrchildrPrPrQr/s     zLaTeXTranslator.term_postfixcCs|j||dSrJ)r)r9rsastextrrPrPrQ visit_TextJzLaTeXTranslator.visit_TextcCdSrJrPrrPrPrQ depart_TextMzLaTeXTranslator.depart_TextcC|ddd||dS)Nrr abbreviationrw visit_inlinerrPrPrQvisit_abbreviationPz"LaTeXTranslator.visit_abbreviationcC||dSrJ depart_inlinerrPrPrQdepart_abbreviationTrz#LaTeXTranslator.depart_abbreviationcCr)NrracronymrrrPrPrQ visit_acronymWrzLaTeXTranslator.visit_acronymcCrrJrrrPrPrQdepart_acronym[rzLaTeXTranslator.depart_acronymcC||ddS)Naddressvisit_docinfo_itemrrPrPrQ visit_address^rzLaTeXTranslator.visit_addresscCrrJdepart_docinfo_itemrrPrPrQdepart_addressarzLaTeXTranslator.depart_addresscCsdd|dD|d<|jjr0tj|jd<d|dvr!tj|jd<|jdd|ddS|j s9tj |jd<d|dvrH|j sHtj |jd<| ||jddS) NcSr) admonitionrPrrPrPrQrfrz4LaTeXTranslator.visit_admonition..rrrz \DUadmonition[%s]{rz\begin{DUadmonition}) r\r;r!admonition_legacyr@ error_legacyr)r9rar.rrrrrPrPrQvisit_admonitionds      z LaTeXTranslator.visit_admonitioncCs2|jjr |jddS|jd||dS)N} z\end{DUadmonition} )r\r;r)r9rrrPrPrQdepart_admonitionus   z!LaTeXTranslator.depart_admonitioncCs&|j||||ddS)Nauthor)r!r9rvrrrrPrPrQ visit_author|szLaTeXTranslator.visit_authorcCrrJrrrPrPrQ depart_authorrzLaTeXTranslator.depart_authorcCrrJrPrrPrPrQ visit_authorszLaTeXTranslator.visit_authorscCrrJrPrrPrPrQdepart_authorsrzLaTeXTranslator.depart_authorscC|||jddS)Nz \begin{quote}rr)r9rrPrPrQvisit_block_quote z!LaTeXTranslator.visit_block_quotecC|jd||dS)Nz \end{quote} r)r9rrrPrPrQdepart_block_quote z"LaTeXTranslator.depart_block_quotecCs0|||jr|jddS|jddS)Nz\begin{list}{}{}z\begin{itemize})r is_toc_listr)r9rrPrPrQvisit_bullet_lists z!LaTeXTranslator.visit_bullet_listcCs.|jr |jdn|jd||dS)N \end{list} z\end{itemize} )rr)r9rrrPrPrQdepart_bullet_lists z"LaTeXTranslator.depart_bullet_listcC&|jd|dr||dSdS)N\textsuperscript{rr)r9rrrPrPrQvisit_superscript z!LaTeXTranslator.visit_superscriptcC"|dr |||jddSNrr2rr)r9rrPrPrQdepart_superscript z"LaTeXTranslator.depart_superscriptcCr)Nz\textsubscript{rrrrPrPrQvisit_subscriptrzLaTeXTranslator.visit_subscriptcCrrrrrPrPrQdepart_subscriptrz LaTeXTranslator.depart_subscriptcC|jddS)Nz \caption{r)r9rrPrPrQ visit_captionrzLaTeXTranslator.visit_captioncCrNrrrrPrPrQdepart_captionrzLaTeXTranslator.depart_captioncCs8|js tj|jd<|jd|dr||dSdS)Ntitlereferencez\DUroletitlereference{r)r.r!rr@r)r9rrrPrPrQvisit_title_references   z%LaTeXTranslator.visit_title_referencecCrrrrrPrPrQdepart_title_referencerz&LaTeXTranslator.depart_title_referencecCs.|jr |gdS|jd||dS)Nz\begin{figure}[b])rrr)r9rrrPrPrQvisit_citations zLaTeXTranslator.visit_citationcCsP|jr |jd}d|jdd}|j||g|dS|jddS)Nrr-ry \end{figure} )rr)rar&r9r)rOrrrnrPrPrQdepart_citations   zLaTeXTranslator.depart_citationcCs|jr"|js|jdd|_dS|jddvsJd|jd=dSd}d|vr-|d}n d|vr9|jj|d}|jd |dS) Nz\cite{ryrr_rz2unexpected non-whitespace while in reference labelr-refidrefname\hyperlink{%s}{[)rrer)r9rWnameids)rOrhrefrPrPrQvisit_citation_references    z(LaTeXTranslator.visit_citation_referencecCs|jrr.r! providelengthr@rwr9rrPrPrQdepart_docinfoWs   zLaTeXTranslator.depart_docinfocCs|jrJ|dvr8|dks|js|jg|dkr&d|_||}d|_n||}|jd|tj|dkrJ|j ||tj|j d| ||dkrjd|_|j d |j d dS|j d dS) N)r organizationrrrrTFrr z\textbf{%s}: & z{\raggedright z } \\ r) r3rr9rkrsrrvrrr r)r[r)rOrnamernrPrPrQrgs(  z"LaTeXTranslator.visit_docinfo_itemcCs|j|jd|_dSr)r)r9rrrkrrPrPrQrs z#LaTeXTranslator.depart_docinfo_itemcCrrJ)visit_literal_blockrrPrPrQvisit_doctest_blockrz#LaTeXTranslator.visit_doctest_blockcCrrJ)depart_literal_blockrrPrPrQdepart_doctest_blockrz$LaTeXTranslator.depart_doctest_blockcCsP|jst|r$t|dtjr&|jjdk}|j|j|d|d7_dSdSdS)NrroFrr) r3r{rwrrCr\rrrrOrrrPrPrQvisit_documents zLaTeXTranslator.visit_documentcCsH|jjs |jjdvr||jd<|j|_|j|_|jtj |j |j r9|j |j }|jd||jrJ|jdg|jdg7_|jsV|jr|jsV|jrd |jg}|jre||j7}|jrw|ddd |jg|j7}|jd d |d d |jD}|jd d ||jdd |j|jd|jrt|jdkr|jsd}|jD]}t|t|dkr|d}q|jd||jD]}|ddd}|jd|d||dfq|jdn|jd|jd|jd|jdd|jvr |js"|jddSdSdS)N)r-rrz pdfauthor={%s}z \hypersetup{r2r-\\z\DUdocumentsubtitle{%s}z \title{%s}% cSsg|]}d|qS)rb)ra)r author_entryrPrPrQrrz3LaTeXTranslator.depart_document..z \author{%s}z \and z \date{%s}, z \maketitle rz \begin{thebibliography}{%s} r;r:z\bibitem[%s]{%s}{%s} ryz\end{thebibliography} z \bibliographystyle{%s} z\bibliography{%s} minitocz' \faketableofcontents % for local ToCs )rrrr>rr@rAr9r!linkingr/r!rrar"rCr3rr rrDrrBrErr{r&rr)r has_latex_toc)rOrauthorsrC widest_labelbicite_keyrPrPrQdepart_documentsv       zLaTeXTranslator.depart_documentcCr)Nz\emph{rrrrPrPrQvisit_emphasisrzLaTeXTranslator.visit_emphasiscCrrrrrPrPrQdepart_emphasisrzLaTeXTranslator.depart_emphasiscCsB|j|jr|jd|j|j|js dSdS)N & )r(rrr)r9rrNrPrPrQ(insert_additional_table_colum_delimiterss   z8LaTeXTranslator.insert_additional_table_colum_delimitersc Cs|jdkr |n|jdd|vrd|vrtdd|vrKd|jd<|dd}|j|j||jd ||jf|j d n=d|vr|jdkr\|j }nd }|dd}|jd |||j |j||j f|j d n|j d t |rt |jjtjs|jr|jd |j d n|j d |jjs|jddr|r|jd|jdS)Nrr6morerowsmorecolszKCells that span multiple rows *and* columns currently not supported, sorry.z\usepackage{multirow}multirowryz\multirow{%d}{%s}{r2r-z\multicolumn{%d}{%s%s%s}{\textbf{rr1r6)r(rr7r)r9NotImplementedErrorr>rrrrrr{rwrxrtheadrrendswithrr)rOrmrowsbar1mcolsrPrPrQrsX            zLaTeXTranslator.visit_entrycCs0|j|j|j|j|dSrJ)r)r9rrr7rrPrPrQ depart_entry!s zLaTeXTranslator.depart_entrycCs|jdSrJ)r(rrrPrPrQr'rzLaTeXTranslator.visit_rowcC|j|jdSrJ)r)r r(rrrPrPrQr*zLaTeXTranslator.depart_rowc Csddddddd}gd}d}|jr8|jr.|jr.|js.d d d |jd|jD|j}|jr8||jd 7}||d d7}||d}|dd}t|jd}dt | }d||||f} |j | | ||dkr|j d|||f||dkr|j d|| fnd||j|<|j d|j d| |j d|d|vr|j d||ddfdSdS)Nr-ralphAlphromanRoman)r-r loweralpha upperalpha lowerroman upperroman))r-rr1)(rE))r-rGr1)r-rFr1r1cSsg|]}t|qSrP)rj)rnrPrPrQr?rz9LaTeXTranslator.visit_enumerated_list..rprefixenumtypesuffixryenumz %s\%s{%s}%sz\begin{enumerate}z \renewcommand{\label%s}{%s}z\newcounter{%s}z \begin{list}z{%s}z{\usecounter{%s}}rz \setcounter{%s}{%d})r6r7 section_levelr$rar#rrr{rGtoRomanrr9rr)r@) rOrtypesrYrPrQrRenumeration_level counter_namerrPrPrQvisit_enumerated_list-s\         z%LaTeXTranslator.visit_enumerated_listcCs@t|jdkr|jdn|jd|||jdS)NrTz\end{enumerate} r)r{r$r)r9rrrrPrPrQdepart_enumerated_list`s   z&LaTeXTranslator.depart_enumerated_listcCrrJrPrrPrPrQ visit_fieldhrzLaTeXTranslator.visit_fieldcCrrJrPrrPrPrQ depart_fieldlrzLaTeXTranslator.depart_fieldcCs*t|jjtjs|j||dSdSrJ)rwrxrrFr)r9rrrPrPrQvisit_field_bodyosz LaTeXTranslator.visit_field_bodycCs |j|jur|jddSdS)Nrbr)rFr9rrPrPrQdepart_field_bodyss z!LaTeXTranslator.depart_field_bodycCs<|||j|jur|jstj|jd<|jddSdS)N fieldlistz\begin{DUfieldlist})rr)rFr.r!rar@r9rrPrPrQvisit_field_listws   z LaTeXTranslator.visit_field_listcCs&|j|jur |jd||dS)Nz\end{DUfieldlist} )r)rFr9rrrPrPrQdepart_field_list~s  z!LaTeXTranslator.depart_field_listcC,|j|jur|jddS|jddS)Nr;z \item[{r_rrPrPrQvisit_field_names z LaTeXTranslator.visit_field_namecCrd)Nz}: &z:}]r_rrPrPrQdepart_field_names z!LaTeXTranslator.depart_field_namecCsvtj|jd<|||jdd}|dkr|jd|n|jd|dr9|j||dg7_dSdS)Nr,rrz\begin{figure} %% align = "%s" z\begin{figure} r~r) r!r,r>rrrr)r9r)rOr alignmentrPrPrQ visit_figures    zLaTeXTranslator.visit_figurecCr)NrrrrPrPrQ depart_figurerzLaTeXTranslator.depart_figurecC|g|jddS)Nz\newcommand{\DUfooter}{rr)r9rrPrPrQ visit_footerrzLaTeXTranslator.visit_footercC*|jdd|j|jd<|dS)Nr2r-z~footerr)r9rar>rrrPrPrQ depart_footer  zLaTeXTranslator.depart_footercCsz|dd}Wnty|dd}Ynw|jrn|js$tj|jd<|d}|jjdkr4d|}|j d|dd|| |f|d|dkrX|j | |7_ |d drpt |d tjrr|j d dSdSdSdS) Nbackrefsrr~ footnotesr[%s]z%% \DUfootnotetext{%s}{%s}{%s}{namesryr6)rrr.r!rrr@rr\footnote_referencesr)r9rsrrwrrl)rOrbackrefnumrPrPrQvisit_footnotes(     zLaTeXTranslator.visit_footnotecCrrrrrPrPrQdepart_footnoterzLaTeXTranslator.depart_footnotecCsd}d|vr |d}n d|vr|jj|d}|jj}|dkr4|||jd||jddS|js=t j |j d<|jd|d d |f|jd dS) Nr-rrrrrrrz\DUfootnotemark{%s}{%s}{r~rr2) rWrr\rurr)r9rr.r!rrr@)rOrrformatrPrPrQvisit_footnote_references     z(LaTeXTranslator.visit_footnote_referencecCrCrJr)r9rrrrPrPrQdepart_footnote_referencerDz)LaTeXTranslator.depart_footnote_referencecCs@t|jtjr tjt|jtjsJ|js|j|dSdSrJ) rwrxrrrrrr)r9)rOrbracketrrPrPrQ label_delims zLaTeXTranslator.label_delimcCs||dddS)z9footnote or citation label: in brackets or as superscriptr>rNrrrPrPrQ visit_labelszLaTeXTranslator.visit_labelcCs||dddS)Nr?r2rrrPrPrQ depart_labelrzLaTeXTranslator.depart_labelcCrrJrPrrPrPrQvisit_generatedrzLaTeXTranslator.visit_generatedcCrrJrPrrPrPrQdepart_generatedrz LaTeXTranslator.depart_generatedcCrj)Nz\newcommand{\DUheader}{rkrrPrPrQ visit_headerrzLaTeXTranslator.visit_headercCrm)Nr2r-z~headerrnrrPrPrQ depart_headerrpzLaTeXTranslator.depart_headercCs|dur tjdtd|}|s|S|dd\}}|dvr(d|}|S|dkr6dt|d }|S|jrO|d krO|jsFt j |j d <d |j d <d |}|S)z=Convert `length_str` with rst lenght to LaTeX length NzWdeprecation warning: LaTeXTranslator.to_latex_length() option `pxunit` will be removed.z(\d*\.?\d*)\s*(\S*)ra)r-rz%sbpr6z%.3f\linewidthY@pxrz$ \DUprovidelength{\pdfpxdimen}{1bp} z %s\pdfpxdimen) sysstderrwriter matchgroupsr,r+r.r!rr@)rO length_strpxunitrrunitrPrPrQto_latex_length s$      zLaTeXTranslator.to_latex_lengthc Cs|j|jd<|j}t|ddd}d|vr't|jtjr"d|d<| |g}g}g}ddd d d d d }d|vrZz||d}| |d| |dWn t yYYnwd|vrj| d| |dd|vry| d|ddd|vr| d| |d| |st|jtjtjfs| d| |st|jtjs| d||j|d} |rdd|} |j d| |f|j|dS)Nr\urir0/rrr-r-)z\raisebox{-0.5\height}{r2)z\raisebox{-\height}{r2)z!\noindent\makebox[\linewidth][c]{r2)z \noindent{z\hfill})z\noindent{\hfillr2)bottommiddletoprrrrryheightz height=%sscalezscale=%frrzwidth=%srr-rsrz\includegraphics%s{%s})rr>rrrrwrxrfigurerr9rrrzrrr)r ra) rOrattrs imagepathprepostinclude_graphics_options align_codes align_codeoptionsrPrPrQ visit_image sh              zLaTeXTranslator.visit_imagecCs,|dr|j||dg7_dSdS)Nr~r)rr)rrrPrPrQ depart_imageU s zLaTeXTranslator.depart_imagecCst|dD]3}|dr&|j|dd}|r%d|jj|<|jd|q|js/tj|j d<|jd|qdS)NrrrTz\foreignlanguage{%s}{inlinez \DUrole{%s}{) rirrrr)r9r.r!rr@rrPrPrQrY s    zLaTeXTranslator.visit_inlinecCs|jdt|ddS)Nr2r)r)r9r{rrPrPrQre szLaTeXTranslator.depart_inlinecC"|js tj|jd<|jddS)Nlegendz\begin{DUlegend})r.r!rr@r)r9rrPrPrQ visit_legendh s zLaTeXTranslator.visit_legendcCr)Nz\end{DUlegend} rrrPrPrQ depart_legendm rzLaTeXTranslator.depart_legendcCr)Nz\item[] rrrPrPrQ visit_linep rzLaTeXTranslator.visit_linecCrrrrrPrPrQ depart_lines rzLaTeXTranslator.depart_linecCsj|jstj|jd<tj|jd<||t|jtj r#|j ddS| ||j d| |dS)Nr lineblockz0\item[] \begin{DUlineblock}{\DUlineblockindent} z\begin{DUlineblock}{0em} )r.r!rr@rrrwrxr line_blockr)r9rrrrPrPrQvisit_line_blockv s     z LaTeXTranslator.visit_line_blockcCr)Nz\end{DUlineblock} rrrPrPrQdepart_line_block rz!LaTeXTranslator.depart_line_blockcCr)Nz \item rrrPrPrQvisit_list_item rzLaTeXTranslator.visit_list_itemcCrrJrPrrPrPrQdepart_list_item rz LaTeXTranslator.depart_list_itemcCsbd|_d|dvr|jjdkrtj|jd<|jstj|jd<|j d|dr/| |dSdS)NTcoderr,r+z\texttt{) rfr\syntax_highlightr!r+r>r.highlight_rulesr@r)r9rrrPrPrQ visit_literal s     zLaTeXTranslator.visit_literalcCs(d|_|dr |||jddS)NFrr2)rfrr)r9rrPrPrQdepart_literal s zLaTeXTranslator.depart_literalcCst|dko t|dtjS)z,Check whether a node can be typeset verbatimryr)r{rwrrrrPrPrQ is_plaintext szLaTeXTranslator.is_plaintextc Cs&ddddd}|j}||}|j}|o|jj}|o(t|jtjtj tj f }|dko.|}| drA|j dg| |7_ |||scd|d vrc|jjd krctj|jd <|jsctj|jd<|r|r|sdgd |jd <|j dtdd|dD|jdn|s|s|j d|jdn|jd|r|r|r|rz |||jd<Wn tyYnwd|_|r|r|j d|j d||jf|jd|dS|r|sd|_ d|jd<|j d|jddSd|_!d|_"d|_#|j d|jddS) zjRender a literal block. Corresponding rST elements: literal block, parsed-literal, code. z6\usepackage{listings} \lstset{xleftmargin=\leftmargin}z\usepackage{moreverb}z\usepackage{fancyvrb}) lstlistinglistingVerbatim verbatimtabrr~rrrr,r+)r-z$% character width in monospaced fontz\newlength{\ttemwidth}z$\settowidth{\ttemwidth}{\ttfamily M}ttemz\begin{minipage}{%d\ttemwidth} css|]}t|VqdSrJ)r{)rr'rPrPrQ sz6LaTeXTranslator.visit_literal_block..z \end{minipage} z\begin{quote} z \end{quote} literal_blockTz\lstset{xleftmargin=0pt} z \begin{%s}%s z \end{%s}z\usepackage{alltt}rcz\begin{alltt} z \end{alltt}z\ttfamily\raggedright r-N)$r rr(rrrwrxrrrsystem_messagerr)rrr\rr!r+r>r.rr@rar9maxrr rrrr rcrfrkrg) rOrpackages literal_env _plaintext _in_table_autowidth_table_use_env _use_listingsrPrPrQr! sr                    z#LaTeXTranslator.visit_literal_blockcCsPd|_d|_d|_d|_d|_|j|j|j|j| |dSr) rgrkrfrrcr)r9rrrrrPrPrQr# sz$LaTeXTranslator.depart_literal_blockcCsx|jd}|jd}|r|sdS|dvr"|jd||fdS|dkr0|jd|dS|jd||fdS)Nr rF)rcreatorkeywordssubjectrCz pdf%s={%s},producerz addtopdfproducer={%s},z pdfinfo={%s={%s}},)rrr"r9)rOrr rFrPrPrQ visit_meta s  zLaTeXTranslator.visit_metacCrrJrPrrPrPrQ depart_meta rzLaTeXTranslator.depart_metar5cCs|dr ||d|jd<|tj}|dr&d|g||}|dkr3|j r0d}nd}n dd d |d d |g}|j |||drQ| |t j) z math rolerz\usepackage{amsmath}amsmathr~rr5z\(%s\)z$%s$z%%rz%sr)rr>rrnr uni2tex_tablerrarrcr)r9rrr)rOrmath_env math_codewrapperrPrPrQ visit_math s&    zLaTeXTranslator.visit_mathcCrrJrPrrPrPrQ depart_math6 rzLaTeXTranslator.depart_mathcCst|}|j||ddS)N)r)r rr)rOrrrPrPrQvisit_math_block9 s z LaTeXTranslator.visit_math_blockcCrrJrPrrPrPrQdepart_math_block= rz!LaTeXTranslator.depart_math_blockcCs|jdr |jddSdS)Nrr+)rr)r9rrPrPrQ visit_option@ s zLaTeXTranslator.visit_optioncCs|jdd7<dS)Nrry)rrrPrPrQ depart_optionE r zLaTeXTranslator.depart_optioncCs|j|dddS)zAAppend the delimiter betweeen an option and its argument to body. delimiterr_N)r)r9rrrPrPrQvisit_option_argumentI sz%LaTeXTranslator.visit_option_argumentcCrrJrPrrPrPrQdepart_option_argumentM rz&LaTeXTranslator.depart_option_argumentcCs|jd|jddS)Nz \item[r)r)r9rrrPrPrQvisit_option_groupP s z"LaTeXTranslator.visit_option_groupcCs|j|jddS)Nz] )rrr)r9rrPrPrQdepart_option_groupU rz#LaTeXTranslator.depart_option_groupcCs8|jstj|jd<tj|jd<|||jddS)Nr optionlistz\begin{DUoptionlist})r.r!rr@rrr)r9rrPrPrQvisit_option_listY s    z!LaTeXTranslator.visit_option_listcCr)Nz\end{DUoptionlist} rrrPrPrQdepart_option_list` rz"LaTeXTranslator.depart_option_listcCrrJrPrrPrPrQvisit_option_list_itemd rz&LaTeXTranslator.visit_option_list_itemcCrrJrPrrPrPrQdepart_option_list_itemg rz'LaTeXTranslator.depart_option_list_itemcCrrJrPrrPrPrQvisit_option_stringj rz#LaTeXTranslator.visit_option_stringcCrrJrPrrPrPrQdepart_option_stringn rz$LaTeXTranslator.depart_option_stringcCr)NrrrrPrPrQvisit_organizationr rz"LaTeXTranslator.visit_organizationcCrrJrrrPrPrQdepart_organizationu rz#LaTeXTranslator.depart_organizationcCs|j|}|dkrt|jtjtjtjtjfrn:|dkr3t|jtjr3t|j|dtjtjfs3n |j j rM|dkrB|j d|d|dkrL|j dn|j d|dre|j ||dg7_ |drp||dSdS)Nrryz:LaTeX merges paragraphs in tables with auto-sized columns! base_noderr~r)rxindexrwr list_item descriptionrrrlr(rrr)r9rrr)rOrrrPrPrQvisit_paragraphx s:      zLaTeXTranslator.visit_paragraphcCs.|dr |||jjs|jddSdS)Nrr)rr(rr)r9rrPrPrQdepart_paragraph s  z LaTeXTranslator.depart_paragraphcCs:tj|jd<|jd|||jd|ddS)Nr+r{z"\hyperlink{%s}{\textbf{\color{red}r)r!r+r>r)r9rrrPrPrQvisit_problematic s   z!LaTeXTranslator.visit_problematiccCr)Nz}}rrrPrPrQdepart_problematic rz"LaTeXTranslator.depart_problematiccCsLd|ddvr tj||s|jd|dr!||d|_dS)Nrrzr-rrT) rr rrrzr)r9rrrrPrPrQ visit_raw s    zLaTeXTranslator.visit_rawcCs6d|_|dr ||||s|jddSdS)NFrr)rrrzr)r9rrPrPrQ depart_raw s   zLaTeXTranslator.depart_rawcCsDd}|D]}|dkr|d7}|dkr|d8}|dkrdSq|dkS)z7Test whether there are unmatched '{' or '}' characters.rr1ryr2TrP)rOrcr|rorPrPrQhas_unbalanced_braces sz%LaTeXTranslator.has_unbalanced_bracescCstddtddtddi}d|vrKt|d|}|dd ks'||r.|d ||d|krA|jd |t j |jd |dSd |vrT|d }nd|vra|j j |d}nt d||sp|jd|jd||jr|jd|j|ddft j dS)Nr3r4r6r7r0r(refuriz^^rzYExternal link "%s" not supported by LaTeX. (Must not contain "^^" or unbalanced braces.)z\url{%s}z \href{%s}{rrzUnknown reference.rz\hyperref[%s]{z\%s{%s}}r-)rbunicodernr,rrrr)r9rrrWrAssertionErrorrzrr)rOr special_charsrrPrPrQvisit_reference s>   zLaTeXTranslator.visit_referencecCs*|jd||s|jddSdS)Nr2r)r)r9rzrrPrPrQdepart_reference s  z LaTeXTranslator.depart_referencecCr)NrevisionrrrPrPrQvisit_revision rzLaTeXTranslator.visit_revisioncCrrJrrrPrPrQdepart_revision rzLaTeXTranslator.depart_revisioncCr)Nrubricz \DUrubric{)r.r!rr@r)r9rrPrPrQ visit_rubric s zLaTeXTranslator.visit_rubriccCrrrrrPrPrQ depart_rubric rzLaTeXTranslator.depart_rubriccCs6|jd7_|jd|j|jdd7<dS)Nryr)rUr#r9rrPrPrQ visit_section s zLaTeXTranslator.visit_sectioncCs|j|jd8_dSr)r#rrUrrPrPrQdepart_section s zLaTeXTranslator.depart_sectioncCs8||tj|jd<|jstj|jd<|jddS)Nr+sidebarz \DUsidebar{) rr!r+r>r.rr@r)r9rrPrPrQ visit_sidebar s   zLaTeXTranslator.visit_sidebarcCrrrrrPrPrQdepart_sidebar rzLaTeXTranslator.depart_sidebar)u—r-)rMrNrr(cCs:|j|jj\}}|jd|j||j|dS)Nz\nopagebreak \raggedleft )attribution_formatsr\ attributionr)r9r)rOrrPrRrPrPrQvisit_attribution s  z!LaTeXTranslator.visit_attributioncCs|j|jddSrr|rrPrPrQdepart_attribution rz"LaTeXTranslator.depart_attributioncCr)NstatusrrrPrPrQ visit_status rzLaTeXTranslator.visit_statuscCrrJrrrPrPrQ depart_status rzLaTeXTranslator.depart_statuscCr)Nr;rrrrPrPrQ visit_strong" rzLaTeXTranslator.visit_strongcCrrrrrPrPrQ depart_strong' rzLaTeXTranslator.depart_strongcCstjrJ)rrrrPrPrQvisit_substitution_definition, rz-LaTeXTranslator.visit_substitution_definitioncCrrJ)unimplemented_visitrrPrPrQvisit_substitution_reference/ rz,LaTeXTranslator.visit_substitution_referencecCst|jtjr+||j|jstj|j d<|j j dk}|j |j |d|d7_ dSt|jtjrC|jd|j|jddS|jsLtj|j d<|jddS) NdocumentsubtitleroFr%z\%s*{ryrDz \DUsubtitle{)rwrxrrWrrDr.r!rr@r\rrrrir)r9rrUr&rPrPrQvisit_subtitle2 s     zLaTeXTranslator.visit_subtitlecCs*t|jtjr |dS|jddSr)rwrxrrWrr)r9rrPrPrQdepart_subtitleC s zLaTeXTranslator.depart_subtitlec Cs,tj|jd<|jstj|jd<|jjrtj|jd<dg|d<| ||jjr.|j dn|j d| |zd|d}Wn t yLd }Ynw|j d |d |d ||d |ft|ddkr~|j d|dd|j ddSddt|dD}|j dd|dS)Nr+rCzsystem-messagerz) \DUtitle[system-message]{system-message z \DUtitle{system-message z , line~%sr'r-z'} {\color{red}%s/%s} in \texttt{%s}%s typer|sourcerqryz \hyperlink{%s}{rr2cSs g|] \}}d||dfqS)z\hyperlink{%s}{%d}ryrP)rrrrPrPrQra sz8LaTeXTranslator.visit_system_message..z backrefs: r_)r!r+r>r.rCr@r\r; title_legacyrr)r9rrrsr{rrlra)rOrr'rqrPrPrQvisit_system_messageI s8          z$LaTeXTranslator.visit_system_messagecCs |j|j||dSrJ)r)r9rrrrrPrPrQdepart_system_messagee sz%LaTeXTranslator.depart_system_messagecCs||tj|jd<|jr|j|jt|d|_|jj dkrDt |j t j rD|j |dkrD|j |jddkrD|jd|j|j|jj|dd |vra|jd |d |jjd krld |jd <|gdS) Nr-tabularrryrlrrrrrz\usepackage{booktabs})rr!r-r>r(rr'r9r}rrwrxrrirrrUr,r)rrr\rrrrrrPrPrQ visit_tablei s(           zLaTeXTranslator.visit_tablecCs|j}|z ||jd}Wn tyd}Ynwt|jtjr*|j d|j |j ||j|7_|j |j d|j t|jdkrX|j|_ |drl|j|j|dddg7_||dS)Nrrrrr~Fr)r)rrrrrwrxrrr9r(rrrfr{r'rrrr)rOrrFrrPrPrQ depart_table s$     zLaTeXTranslator.depart_tablecCsXd|vs d|vs d|vrdS|jdt|jtjtjf }|j|||7_dS)Nrrrr{)r)r9rwrxrrrCr)rOrrrPrPrQ visit_target s zLaTeXTranslator.visit_targetcCrrJrPrrPrPrQ depart_target rzLaTeXTranslator.depart_targetcCs(|jds|||ddSdS)Npreamble written)r(rrrrrPrPrQ visit_tbody s  zLaTeXTranslator.visit_tbodycCrrJrPrrPrPrQ depart_tbody rzLaTeXTranslator.depart_tbodycCs|jddS)zdefinition list termz\item[{NrrrPrPrQ visit_term szLaTeXTranslator.visit_termcCs@|jd|jddd}t|tjs|j||dSdS)Nz}] FTr)r)r9rrwr classifierr)rOrrrPrPrQ depart_term s  zLaTeXTranslator.depart_termcCrrJrPrrPrPrQ visit_tgroup rzLaTeXTranslator.visit_tgroupcCrrJrPrrPrPrQ depart_tgroup rzLaTeXTranslator.depart_tgroupcCrrJ) _thead_depthrNrPrPrQr rzLaTeXTranslator.thead_depthcCsh|jd7_d|kr |jd|j||jdd|j|j|j|j dS)Nryz{%s} r) r&rr)r9r(rrrr rrrPrPrQr s  zLaTeXTranslator.visit_theadcCs@|dur|j|j|jr|||jd8_dSr)r)r r(rrrXr&rrPrPrQr s   zLaTeXTranslator.depart_theadcCs`t|jtjr"||j|jd|jd| | dSt|jtj s7t|jtj s7t|jtj rn|jdp@|jjg}|jjrWtj|jd<|jdd|n|js`tj|jd<|jd|jddSt|jtjr||jj|jddSttd rtj|jd <|j}|j|}|jd |t |jj!kr|jjrtj|jd<|d t"#|7}n|jstj|jd<tj$|jd <|jd t"#|d|jdvrtj%|jd<| | }|jd||fn|jd|dg}||j&|jdd7}|jd|d|t |jj!kr,|jjs.|jdd7<dSdSdS)z Append section and other titles.r-z pdftitle={%s},rrCz \DUtitle[%s]{rz \DUtitle{rr1z z [section%s]rz\begin{DUclass}{section%s} zsystem-messagesr+z\%s[%s]{\color{red}z\%s{Frr)z% } rrN)'rwrxrrWrrCrr9r"rsrtopicrrtagnamer\r;r!rr@r)rar.r-r(rr3r1r>rUrrir{rvrGrVrr+r)rOrrr| section_name section_titlebookmarkrPrPrQ visit_title sh                  zLaTeXTranslator.visit_titlecCs6|j|jt|jtjtjfr| dSdSrJ) r)r9rrrwrxrr-rWrrrPrPrQ depart_title s zLaTeXTranslator.depart_titlec Cs |j|j}ddd}d|jjvrd|d<z||}Wnty1|jd|d|d Yd Swtj|jd <d ||jd |<t |jj}d||f|jd|<dddd}d|jjvrbd|d<|rr|j d||||f|j d||f|j d|d S)z=Generate a local table of contents with LaTeX package minitocrlmini)rlrsrssectriz Skipping local ToC at %s level. z3 Feature not supported with option "use-latex-toc"rNr,z\do%stoczminitoc-z\mtcsetdepth{%stoc}{%d}zminitoc-%s-depthryr)r/r.rlrz\setcounter{%stocdepth}{%d}z\mtcsettitle{%stoc}{%s} z\%stoc ) rrirUrvrrr!r,r>r{r)r9) rOrrCdepthr) minitoc_names minitoc_namemaxdepthoffsetrPrPrQr," s<          zLaTeXTranslator.minitocc Csd|dvr|jd|j||7_t|tjr=|jjdkr=|jd|j d| | ddgdf|j rd }t|tjrT| |d }| d d}d |dvri||||dS|rs|jd ||d kr|jd||jdd|_tjd|_dSd|dvr|jjr||j|jdt|tjr|ddSdSd|dvr|jstj|jd<|jjrtj|jd<||jnd|dvr|jstj|jd<||jn|ddd||dS)Ncontentsrrroz \pdfbookmark[%d]{%s}{%s}ryr~rr-r0localz\setcounter{tocdepth}{%d} Contentsz! \renewcommand{\contentsname}{%s}z \tableofcontents TrHz\begin{abstract}rGr')r)r9rrwrrrCr\rrUrrr2rsrr,r.rrr4rrHr.r!r@r;abstract_legacyrGrwr)rOrrCr0rPrPrQ visit_topicE sb                zLaTeXTranslator.visit_topiccCsfd|_d|dvr|jjr|jdn d|dvr||d|dvs+d|dvr1|dSdS)NFrHrz\end{abstract} r5rG)rr\r4r)r9rrrrPrPrQ depart_topic} s      zLaTeXTranslator.depart_topiccCs.|js tj|jd<|jd|jddS)N transitionzN %___________________________________________________________________________ z\DUtransition )r.r!r;r@r)r9rrPrPrQvisit_transition s  z LaTeXTranslator.visit_transitioncCrrJrPrrPrPrQdepart_transition rz!LaTeXTranslator.depart_transitioncCr)NversionrrrPrPrQ visit_version rzLaTeXTranslator.visit_versioncCrrJrrrPrPrQdepart_version rzLaTeXTranslator.depart_versioncCstd|jj)Nz$visiting unimplemented node type: %s)r< __class__rqrrPrPrQr sz#LaTeXTranslator.unimplemented_visit)TFrJ)r5)rqrrrsrr+r6r7rr.rrUrerrgrkrfrcrrKrrr[rsr compilervrzrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r r r rrrrrrrrrrrrrrrr"r$r'r3r4r5r7rrBrrrZr[r\r]r^r`rbrcrerfrhrirlrorxryr{r}rrrrrrrrrrrrrrrrrrrrrrrr!r#rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r r r r rrrrrrrrrrr r!r#r$r%r&rrrr,r-r,r9r:r<r=r?r@rrPrPrPrQrLs   g")X      A93 7      Q                         "                                  D  # 8   rL)Br __docformat__r_r rcr version_infor<rurllibrurllib.requestrG ImportErrordocutils.utils.romanr rvrrrr docutils.utils.error_reportingr docutils.transformsr docutils.utils.mathr rrjrrobjectrrrr!r+r,r-r,r-r.r8rrrr(r`rarwrxry_du_styr%r'r#r>r$ block_name definitionsrZr/rhr}rrLrPrPrPrQs|        1    ,~