o
    Ni                    @   s  d Z dZddlmZ ddlZddlZddlmZ ddlZzddl	Z	W n e
y4   ddlm  m	Z	 Y nw ddlmZmZmZmZmZ ddlmZ ddlmZmZ eejZG d	d
 d
ejZG dd dZG dd deZG dd dZde_de_ de_!de_"de_#de_$de_%de_&de_'de_(de_)de_*de_+dd Z,e-ed  d!d"2Z.e.D ]'Z/e/0d#Z/e/1d$sqe/2d%Z3e3sqe,e.Z4e3d&v re40 Z4e5ee3e4 qW d   n1 sw   Y  G d'd( d(Z6G d)d* d*Z7G d+d, d,Z8G d-d. d.ej9Z:dS )/zLaTeX2e document tree Writer.reStructuredText    )PathN)url2pathname)frontendnodes	languageswritersutils)
writer_aux)pick_math_environmentunichar2texc                       s  e Zd ZdZ	 dZeZdZg dZddg ddgd	d
ifddgd	difddgddgddddfddgdde	j
dfddgdde	j
dfddgg d d!dd"fd#d$gd%d&d'e	jd(fd)d*gd&d+e	jd,fd-d.gd/dd0fd1d2gd3de	j
dfd4d5gd6e	jd7gd8fd9d:gd	eifd;e d<ged=d>fd?d@gdAde	j
dfdBdCgdDde	j
dfdEdFgd3de	j
dfdGdHgdIde	j
dfdJdKgd3de	j
dfdLdMgdNde	j
dfdOdPgd3de	j
dfdQdRgd	dSifdTdUgd	d%ifdVdWgd3de	j
dfdXdYgddZd[fd\d]gdde	j
dfd^d_gdd`d[fdadbgdcddd>fdedfgd	d%ifdgdhgde	j
difdjdkgdlgddme	jednfdodpgd	d%ifdqdrgd	dsifdtdugd	d%ifdvdwgd%dxe	jdyfdzd{gd3de	j
dfd|d}gd~de	j
dfddgdde	j
dfddgdde	j
dfddgdAde	j
dfR fZdZddiZdZdZdZed ZdZ	 dd Z fddZdd Zdd Z  ZS )Writer)latexlatex2ezdefault.texzg% PDF Standard Fonts
\usepackage{mathptmx} % Times
\usepackage[scaled=.90]{helvet}
\usepackage{courier})booktabs
borderlesscolwidths-autonolinesstandardzLaTeX-Specific OptionsNz1Specify LaTeX documentclass.  Default: "article".z--documentclassdefaultarticlezcSpecify document options.  Multiple options can be given, separated by commas.  Default: "a4paper".z--documentoptionsa4paperz\Format for footnote references: one of "superscript" or "brackets".  Default: "superscript".z--footnote-referencessuperscriptbracketsz<format>trim_footnote_reference_space)choicesr   metavar	overridesz1Use \cite command for citations. (future default)z--use-latex-citations
store_true)r   action	validatorzZUse figure floats for citations (might get mixed with real figures). (provisional default)z--figure-citationsuse_latex_citationsstore_false)destr   r    zyFormat for block quote attributions: one of "dash" (em-dash prefix), "parentheses"/"parens", or "none".  Default: "dash".z--attributiondashparenthesesparensnoner%   )r   r   r   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--stylesheet z<file[,file,...]>stylesheet_path)r   r   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-stylesheetembed_stylesheet)r#   r   z^Embed the stylesheet(s) in the output file. Stylesheets must be accessible during processing. z--embed-stylesheetFzComma-separated list of directories where stylesheets are found. Used by --stylesheet-path when expanding relative path arguments. Default: ".".z--stylesheet-dirsz<dir[,dir,...]>.)r   r    r   zlCustomization 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<file>)r   r   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-sectionz<Attach author and date to the document info table. (default)z--use-docutils-docinfouse_latex_docinfoz-Attach author and date to the document title.z--use-latex-docinfoz$Typeset abstract as topic. (default)z--topic-abstractuse_latex_abstractz;Use LaTeX abstract environment for the document's abstract.z--use-latex-abstractzSColor of any hyperlinks embedded in text. Default: "blue" (use "false" to disable).z--hyperlink-colorbluez-Additional options to the "hyperref" package.z--hyperref-optionszJEnable compound enumerators for nested enumerated lists (e.g. "1.2.a.ii").z--compound-enumeratorszCDisable compound enumerators for nested enumerated lists. (default)z--no-compound-enumeratorscompound_enumerators)r   r#   zzEnable section ("." subsection ...) prefixes for compound enumerators.  This has no effect without --compound-enumerators.z --section-prefix-for-enumeratorsz<Disable section prefixes for compound enumerators. (default)z#--no-section-prefix-for-enumeratorssection_prefix_for_enumeratorszeSet the separator between section number and enumerator for compound enumerated lists.  Default: "-".z--section-enumerator-separator-z<char>zdWhen possible, use the specified environment for literal-blocks. Default: "" (fall back to "alltt").z--literal-block-envz4Deprecated alias for "--literal-block-env=verbatim".z--use-verbatim-when-possible)r   r    zTable 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-styler   append)r   r   r   r    r   zLaTeX 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-encodingT1zPer 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-labelzdSpecify style and database(s) for bibtex, for example "--use-bibtex=unsrt,mydb1,mydb2". Provisional!z--use-bibtexz<style,bibfile[,bibfile,...]>)r   r   r    zJUse legacy functions with class value list for \DUtitle and \DUadmonition.z--legacy-class-functionszjUse \DUrole and "DUclass" wrappers for class values. Place admonition content in an environment. (default)z--new-class-functionslegacy_class_functionszLUse legacy algorithm to determine table column widths. (provisional default)z--legacy-column-widthszDUse new algorithm to determine table column widths. (future default)z--new-column-widthslegacy_column_widthszsFootnotes with numbers/symbols by Docutils. (default) (The alternative, --latex-footnotes, is not implemented yet.)z--docutils-footnotes)templatesectnum_depthr   zlatex2e writer)r   zlatex writers)head_prefixrequirementslatex_preambler+   	fallbackspdfsetup	titledata)titlesubtitlebody_pre_docinfodocinfo
dedicationabstractbodyc                 C   s   t j|  t| _d S N)r   r   __init__LaTeXTranslatortranslator_classself rN   U/home/ubuntu/.local/lib/python3.10/site-packages/docutils/writers/latex2e/__init__.pyrI      s   
zWriter.__init__c                    s   t   tjg S rH   )superget_transformsr
   AdmonitionsrL   	__class__rN   rO   rQ     s   zWriter.get_transformsc                 C   s   |  | j}| j| | jD ]}t| |t|| qt| jjj}|	 s,| j
|j }|jdd}|   t|| j| _d S )Nutf-8encoding)rK   document	walkaboutvisitor_attributessetattrgetattrr   settingsr9   existsdefault_template_pathname	read_textassemble_partsstringTemplate
substitutepartsoutput)rM   visitorparttemplatepathr9   rN   rN   rO   	translate  s   
zWriter.translatec                 C   s`   t j|  | jD ]$}t| |}|| jv r%|r|d d|| j|< q	d|| j|< q	dS )z9Assemble the `self.parts` dictionary of output fragments.r)   
N)	r   r   rb   rZ   r\   
head_partsr5   joinrf   )rM   ri   linesrN   rN   rO   rb     s   



zWriter.assemble_parts)__name__
__module____qualname__	supporteddefault_templateLATEX_WRITER_DIRr_   default_preambletable_style_valuesr   validate_booleanvalidate_comma_separated_listsettings_specrelative_path_settingssettings_defaultsconfig_sectionconfig_section_dependenciesrm   rZ   rg   rI   rQ   rk   rb   __classcell__rN   rN   rS   rO   r       sN   #*-29=@DHLPTX\
_
afjorvz~ 	          %  +  1  8  Dr   c                   @   s  e Zd ZdZi dddddddd	d
dddddddddddddddddddddd d!d"d#i d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEi dFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcddd_dedfi dgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{drd|dtd}d~ddddddZdd e D ZdZdddZdddZdd Z	dd Z
dd ZdS )BabelzLanguage specifics for LaTeX.af	afrikaansararabicbg	bulgarianbrbretoncacatalancsczechcywelshdadanishdengermanzde-1901germanzde-AT	naustrianz
de-AT-1901austriandsblowersorbianelgreekz
el-polytonpolutonikogreekenenglishzen-AU
australianzen-CAcanadianzen-GBbritishzen-NZ
newzealandzen-USamericaneo	esperantoesspanishetestonianeubasquefifinnishfrfrenchzfr-CAcanadiengairishz
grc-ibycusibycusglgalicianhehebrewhrcroatianhsbuppersorbianhumagyariainterlinguaidbahasaiis	icelandicititalianjajapanesekkkazakhlalatinlt
lithuanianlvlatvianmn	mongolianmsbahasamnbnorsknldutchnnnynorsknoplpolishptportugeszpt-BRbrazilroromanianrurussiansesaminzsh-Cyrlserbianczsh-Latnserbianskslovakslslovenesqalbaniansrzsr-Latnsvswedishtrturkishuk	ukrainianvivietnamc                 C   s   i | ]	\}}|  |qS rN   )lower).0kvrN   rN   rO   
<dictcomp>      zBabel.<dictcomp>z,Language "%s" not supported by LaTeX (babel)z.<>)r   r   Nc                 C   s   || _ | || _i | _d S rH   )reporterlanguage_namelanguageotherlanguages)rM   language_coder   rN   rN   rO   rI     s   
zBabel.__init__c                    s  t  j }| jpd dd| g _g }d fdd|D D ]}||vr1|| q&|r? jdd|  d|v rI jd	 d
|v rU jg d d|v ra jg d |d dkr{d j v r{  jddd j g7  _d jS )z7Return the babel call with correct options and settingsr   z\usepackage[%s]{babel},r)   c                 3   s    | ]
} j |d V  qdS )r)   N)active_charsget)r   lngrL   rN   rO   	<genexpr>  s    z!Babel.__call__.<locals>.<genexpr>z#\AtBeginDocument{\shorthandoff{%s}}r   z)\deactivatetilden % restore ~ in Galicianr   )\makeatletterz+  \addto\extrasestonian{\bbl@deactivate{~}}\makeatotherr   )r  z)  \addto\extrasbasque{\bbl@deactivate{~}}r  r   zE% Prevent side-effects if French hyphenation patterns are not loaded:z\frenchbsetup{StandardLayout}z4\AtBeginDocument{\selectlanguage{%s}\noextrasfrench}rl   )sortedr   keysr5   r   rn   setupextend)rM   r   
shorthandscrN   rL   rO   __call__  s6   
zBabel.__call__c              	   C   sR   t |D ]}z| j| W   S  ty   Y qw | jdur'| j| j|  dS )z,Return TeX language name for `language_code`Nr)   )r	   normalize_language_taglanguage_codesKeyErrorr   warningwarn_msg)rM   r   tagrN   rN   rO   r     s   
zBabel.language_namec                 C      | j S rH   )r   rL   rN   rN   rO   get_language  s   zBabel.get_languagerH   )rp   rq   rr   __doc__r  itemsr  r  rI   r  r   r  rN   rN   rN   rO   r   )  s$   	
 !#$%&'()*+,-./0123456789:;<=>?@ABCDEGHIM
!r   c                   @   s    e Zd ZdZdd Zdd ZdS )SortableDictzDictionary with additional sorting methods

    Tip: use key starting with with '_' for sorting before small letters
         and with '~' for sorting after small letters.
    c                 C   s   t |  S )zReturn sorted list of keys)r  r	  rL   rN   rN   rO   
sortedkeys  s   zSortableDict.sortedkeysc                    s    fdd   D S )z$Return list of values sorted by keysc                    s   g | ]} | qS rN   rN   )r   keyrL   rN   rO   
<listcomp>  s    z-SortableDict.sortedvalues.<locals>.<listcomp>)r  rL   rN   rL   rO   sortedvalues     zSortableDict.sortedvaluesN)rp   rq   rr   r  r  r  rN   rN   rN   rO   r    s    r  c                   @   s   e Zd ZdZdS )PreambleCmdsz'Building blocks for the latex preamble.N)rp   rq   rr   r  rN   rN   rN   rO   r    s    r  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 tableszI\newcommand{\DUcolumnwidth}[1]{\dimexpr#1\DUtablewidth-2\tabcolsep\relax}z*\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
}z
\providecommand*{\DUCLASScontents}{%
  \renewenvironment{itemize}%
    {\begin{list}{}{\setlength{\partopsep}{0pt}
                    \setlength{\parsep}{0pt}}
                   }%
    {\end{list}}%
}za
% character width in monospaced font
\newlength{\ttemwidth}
\settowidth{\ttemwidth}{\ttfamily M}c                 C   s8   t | g}| D ]}| s n|| qd| S )Nr)   )nextstripr5   rn   rstrip)fpblocklinerN   rN   rO   _read_blockK  s   
r&  docutils.styrU   rV   z% 
z:::)colorfloattabletextcompc                   @   s:  e Zd ZdZeddeddeddiZedd	ed
deddeddeddeddeddeddeddeddddiZi ddd d!d"dd#d!d$d%d&d'd(d%d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAZi dBddCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgZi dhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddēddƓddȓddʓi dd̓ddΓddГddfddӓddՓddדddٓddۓddݓddߓddddddddddddddddddZ	dddddZ
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{\neq}ia"  z\ensuremath{\equiv}id"  z\ensuremath{\le}ie"  z\ensuremath{\ge}i`&  z\ensuremath{\spadesuit}ic&  z\ensuremath{\clubsuit}i   ffr   flffiffl)i  i  i  i        z\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{}i  z\textflorin{}i  i  z\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{}rF  i&!  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)rp   rq   rr   r  ordallttspecialunsupported_unicodeutf8_supported_unicoder,  pifontrN   rN   rN   rO   r-  h  s   		
	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGO
r-  c                   @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )DocumentClassz"Details of a LaTeX document class.Fc                 C   sJ   || _ || _g d| _| j dv r| jdd | jr#| jdd d S d S )N)section
subsectionsubsubsection	paragraphsubparagraph)bookmemoirreportscrbookscrreprtr   chapterri   )document_class
_with_partsectionsinsert)rM   rr  	with_partrN   rN   rO   rI     s   

zDocumentClass.__init__c                 C   s    |t | jkr| j|d  S dS )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)lenrt  )rM   levelrN   rN   rO   rg  %  s   zDocumentClass.sectionc                 C   s<   t |t| j}d| jv r|d8 }| jd dkr|d8 }|S )a  
        Return LaTeX equivalent of Docutils section level `depth`.

        Given the value of the ``:depth:`` option of the "contents" or
        "sectnum" directive, return the corresponding value for the
        LaTeX ``tocdepth`` or ``secnumdepth`` counters.
        rq  rw  r   ri   )minry  rt  )rM   depthrN   rN   rO   latex_section_depth0  s   
z!DocumentClass.latex_section_depthN)F)rp   rq   rr   r  rI   rg  r}  rN   rN   rN   rO   rf    s
    
rf  c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zd8ddZdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7S )9TableaH  Manage a table while traversing.

    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
    c                 C   s0   || _ || _d| _|   g | _g | _d| _d S )NFr   )_translator_latex_typer8   close
_colwidths_rowspan	_in_thead)rM   
translator
latex_typerN   rN   rO   rI   L  s   
zTable.__init__c                 C   s"   d| _ g | _g | _i | _d| _d S )NTF)_open
_col_specscaption_attrs_in_headrL   rN   rN   rO   openV  s
   
z
Table.openc                 C   s(   d| _ d | _g | _i | _g | _d| _d S NF)r  r  r  r  stubscolwidths_autorL   rN   rN   rO   r  ]  s   
zTable.closec                 C   r  rH   )r  rL   rN   rN   rO   is_opene     zTable.is_openc                 C   sx   |j | _ d|v r| d|d  dd dg|j |d  D }|d | _d|d v s/d|jv o8d|d vo8d	|v| _d S )
Nalignc                 S   s    g | ]}|d v r| ddqS ))r   r   r   r   r   r   replacer   clsrN   rN   rO   r  n  s
    
z)Table.set_table_style.<locals>.<listcomp>r   classesr  r   colwidths-givenwidth)r8   settable_stylebordersr  )rM   noder]   r  rN   rN   rO   set_table_styleh  s$   

zTable.set_table_stylec                 C   s   | j dkr
| js
dS | j S )N	longtable
longtable*)r  r  rL   rN   rN   rO   get_latex_typey  s   zTable.get_latex_typec                 C   s   || j |< d S rH   r  )rM   attrvaluerN   rN   rO   r       z	Table.setc                 C   s   || j v r
| j | S d S rH   r  )rM   r  rN   rN   rO   r    s   

z	Table.getc                 C   s   | j dkrdS dS )Nr   |r)   )r  rL   rN   rN   rO   get_vertical_bar  s   
zTable.get_vertical_bar
\linewidthc                 C   s   ddddd}| |  d}|  }|r$|dvr$d|f d	|f g}nd
||f g}| jsN| jdkrF| jsF|dd|t| jd f  n|dd|  d|S )Nz[l]z[c]z[r]r)   )leftcenterrightNr  r  r  z"\noindent\makebox[\linewidth]%s{%%z
\begin{%s}z\begin{%s}%sr   r  z?\setlength{\DUtablewidth}{\dimexpr%s-%i\arrayrulewidth\relax}%%rw  z\setlength{\DUtablewidth}{%s}%%rl   )	r  r  r  r  r8   ru  ry  r  rn   )rM   r  	align_mapr  r  openingrN   rN   rO   get_opening  s&   
zTable.get_openingc                 C   sT   g }| j dkr|d |d|    | dr%|  dvr%|d d|S )Nr   z\bottomrule\end{%s}r  r  r0  rl   )r  r5   r  r  rn   )rM   closingrN   rN   rO   get_closing  s   




zTable.get_closingc                 C   s$   | j | | j|jd d S )Nstub)r  r5   r  
attributesr  rM   r  rN   rN   rO   visit_colspec  s   zTable.visit_colspecc                    s&  |   }dgt| j | _| jrg | _dgt| j }nn| jrLddtdd | jD kr7 9 fdd| jD | _d	d | jD }n>d
d|jjd vrYd nd  fdd| jD | _t| jdkswd|jjj	v rfdd| jD | _dd | jD }||
| | S )z3Return column specification for longtable.
        r   lP   g(\?c                 s       | ]	}|d  d V  qdS )colwidthrw  NrN   r   r  rN   rN   rO   r        z%Table.get_colspecs.<locals>.<genexpr>c                    s$   g | ]} |d  d   d qS )r  rw  g{Gzt?rN   r  )factorr  rN   rO   r    s
    z&Table.get_colspecs.<locals>.<listcomp>c                 S      g | ]}d | qS )zp{%.3f\DUtablewidth}rN   r   r  rN   rN   rO   r        (   r  r  rw  c                    s   g | ]
}|d     qS )r  rN   r  )	allowancenorm_lengthrN   rO   r    s    r  c                    s   g | ]}|  qS rN   rN   r  )total_widthrN   rO   r    r  c                 S   r  )p{\DUcolumnwidth{%.3f}}rN   r  rN   rN   rO   r    r  )r  ry  r  r  r  r  r8   sumparentr  rn   )rM   r  barlatex_colspecsrN   )r  r  r  r  r  rO   get_colspecs  sB   

zTable.get_colspecsc                 C   s@   z| j rd| j| j  W S d| j| j  W S  ty   Y dS w )z4Return columnwidth for current cell (not multicell).z%.2f\DUtablewidthz\DUcolumnwidth{%.2f}*)r8   r  _cell_in_row
IndexErrorrL   rN   rN   rO   get_column_width  s   zTable.get_column_widthc                    sL   zt  fddt|D } jrd| W S d| W S  ty%   Y dS w )z)Return sum of columnwidths for multicell.c                 3   s    | ]
} j |  V  qd S rH   )r  )r   corM   startrN   rO   r    s    z.Table.get_multicolumn_width.<locals>.<genexpr>zp{%.2f\DUtablewidth}r  r  )r  ranger8   r  )rM   r  len_multicol_widthrN   r  rO   get_multicolumn_width  s   

zTable.get_multicolumn_widthc                 C   sD   t jdtdd | jsdS d| j}d| j krd| S d| S )z-Deprecated. Will be removed in Docutils 0.22.zW`writers.latex2e.Table.get_caption()` is obsolete and will be removed in Docutils 0.22.   
stacklevelr)   rw  z\caption{%s}\\
z!\caption[]{%s (... continued)}\\
)warningswarnDeprecationWarningr  rn   r  thead_depth)rM   r  rN   rN   rO   get_caption  s   zTable.get_captionc                 C   s   | j dkrd| j kS dS )Nr  rw  r   )r  r  r  rL   rN   rN   rO   need_recurse   s   
zTable.need_recursec                 C   s2   |  j d7  _ | jdkrdgS | jdkrdgS g S )Nrw  r   \hline
r   z	\toprule
)r  r  rL   rN   rN   rO   visit_thead  s   

zTable.visit_theadc                 C   s   g }| j dkr|d | jdkrSd| j kr|d n5t| j}|d tdd | jD }|d	ks=|d
krN| jsN|d|| 	d|f d d  |d |  j
d8  _
|S )Nr   z	\midrule
r  rw  z\endfirsthead
z	\endhead
c                 s   r  )r  r  NrN   r  rN   rN   rO   r    r  z%Table.depart_thead.<locals>.<genexpr>      z\multicolumn{%d}{%s}r   z,{\raggedleft\ldots continued on next page}\\rl   z\endfoot
\endlastfoot
)r  r5   r  r  r  ry  r  r  r  r  r  )rM   an_ctwidthrN   rN   rO   depart_thead  s(   





zTable.depart_theadc                 C   s
   d| _ d S Nr   r  rL   rN   rN   rO   	visit_row%  s   
zTable.visit_rowc                    s   dg}d  _ tt jD ]} j| dkr j|  d8  < q jdkrh fddtt jD }t|t jkrC|d |S d}|  	 z| }W n	 tyY   Y n
w |d
||f 7 }qJ|| |S )N \\
r   rw  r   c                    s"   g | ]} j | d kr|d qS )r   rw  )r  )r   irL   rN   rO   r  0  s    z$Table.depart_row.<locals>.<listcomp>r  r)   Tz\cline{%d-%d}
)	r  r  ry  r  r  r5   reversepopr  )rM   resr  rowspansclinec_startrN   rL   rO   
depart_row(  s.   


zTable.depart_rowc                 C   s&   z|| j |< W d S  ty   Y d S w rH   r  r  )rM   cellr  rN   rN   rO   set_rowspanA  s
   zTable.set_rowspanc                 C   s"   z| j | W S  ty   Y dS w r  r  )rM   r  rN   rN   rO   get_rowspanG  s
   zTable.get_rowspanc                 C   r  rH   r  rL   rN   rN   rO   get_entry_numberM  r  zTable.get_entry_numberc                 C   s   |  j d7  _ d S Nrw  r  rL   rN   rN   rO   visit_entryP     zTable.visit_entryc                 C   s    t | j| jkr| j| j S dS r  )ry  r  r  rL   rN   rN   rO   is_stub_columnS  s   zTable.is_stub_columnN)r  )rp   rq   rr   r  rI   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rN   rN   rN   rO   r~  @  s8    

-	r~  c                       s&  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZef fdd	Zdd Zd	d
 Zdd Zdd ZedfddZdd Zdd Z		dddZdd ZdddZdd Zd d! Zd"d# Z d$d% Z!d&d' Z"d(d) Z#d*d+ Z$d,d- Z%d.d/ Z&d0d1 Z'd2d3 Z(d4d5 Z)d6d7 Z*d8d9 Z+d:d; Z,d<d= Z-d>d? Z.d@dA Z/dBdC Z0dDdE Z1dFdG Z2dHdI Z3dJdK Z4dLdM Z5dNdO Z6dPdQ Z7dRdS Z8dTdU Z9dVdW Z:dXdY Z;dZd[ Z<d\d] Z=d^d_ Z>d`da Z?dbdc Z@ddde ZAdfdg ZBdhdi ZCdjdk ZDdldm ZEdndo ZFdpdq ZGdrds ZHdtdu ZIdvdw ZJdxdy ZKdzd{ ZLd|d} ZMd~d ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd ZoddÄ Zpddń ZqddǄ ZrddɄ Zsdd˄ Ztdd̈́ Zuddτ Zvddф Zwddӄ ZxddՄ Zyddׄ Zzddل Z{ddۄ Z|dd݄ Z}dd߄ Z~dd Zdd Zdd Zdd Zdd Zdd ZdddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d Zdd Zdd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd ZdddZdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ ZdAdB ZdCdD ZdEdF ZdGdH ZdIdJ ZdKdL ZdMdN ZdOdP ZdQdR ZdSdT ZdUdV ZdWdX ZdYdZ Zd[d\d\d]d^Zd_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj Zdkdl ZÐdmdn ZĐdodp ZŐdqdr ZƐdsdt Zǐdudv ZȐdwdx Zɐdydz Zʐd{d| Zːd}d~ Z̐dd Z͐dd Zΐdd Zϐdd ZАdd Zѐdd ZdZӐdd ZԐdd ZՐdd Z֐dd Zאdd Zؐdd Zِdd Zڐdd Zېdd Zܐdd Zݐdd Zސdd Zߐdd Z  ZS (  rJ   z
    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.
    Fr4   r   c           	         s  t  |  jjj _ jjj _|j  _}|jd u r+|j	s+d|_t
jdtdd |jd u r;d|_t
jdtdd |jd urHt
jdtdd  |j _|j _|j _|j _|j _|j _|j _t|dd	 _|j _|jd
d _d	 _d	 _|jrtd|j\} _ _}n|jrd _|j	rd _|j	 _t !|j"|j _#||j"|j _$ j#j%d  _&|j'g} j$j(dvr|) j$j( d*t+d | _'t,|j-|j. _/|j0d	krd _1nd|j0  _1|j2 _2d j'|j-f g _3t4  _5d j5d< |j6g _6t4  _7g  _8g  _9g  _:g  _;g  _<g  _=g  _>g  _?g  _@g  _A	 g  _Bg  _Cg  _Dg  _Eg  _Fg  _G|j"dkrJ jG)d|j"  dg _Hg  _Id _Jg  _Kg  _LtM d _N j@ _Og  _P jdvrud j  j5d<  jQs jrd j  j5d<  jdD ]}|R }|dkrd j5d < q|d!vrd" j5d#< q|j-Sd$d%krɈ j'Sd&d%ksĈ j'Sd'd%krd( j5d)< tTU|}d*|v  _V jVr|Wd* |jXrd _Vnd+ j7d,<  fd-d.|D  _Y jZ d/v rd	 _[nd0 j d1 j  _[|j[r  j[d|j[ 7  _[|j\r!d2t]_^d S |j_}|d ur2d3 j/`| t]_^ta|d4rP|jbd5krRd6 j/jcd |jbd5 f  j5d4< d S d S d S )7NFzXThe default for the setting "use_latex_citations" will change to "True" in Docutils 1.0.   r  Tz[The default for the setting "legacy_column_widths" will change to "False" in Docutils 1.0.)zzThe configuration setting "use_verbatim_when_possible" will be removed in Docutils 2.0. Use "literal_block_env: verbatim".font_encodingr)   r8  r9  z	(\w+)(.*)verbatimr   )r   r)   r   z\usepackage{graphicx}z\usepackage[%s]{graphicx}z\documentclass[%s]{%s}z\usepackage{ifthen}__staticr   z  pdflang={%s},r  )asciiunicodeutf8z\usepackage[%s]{inputenc}	_inputencz\usepackage[%s]{fontenc}_fontencOT1z+\DeclareTextSymbol{\textquotedbl}{OT1}{`\"}_textquotedblOT1)r6   T2AT2BT2CT4T5z,\DeclareTextSymbolDefault{\textquotedbl}{T1}_textquotedblscrr  DIVBCORz\usepackage{typearea}typeareadocutilsz!\usepackage{docutils}[2020/08/28]r'  c                    s   g | ]}  |qS rN   )stylesheet_call)r   pathrL   rN   rO   r  @      z,LaTeXTranslator.__init__.<locals>.<listcomp>)0falser)   zcolorlinks=true,linkcolor=z
,urlcolor=z\setcounter{secnumdepth}{0}z\setcounter{secnumdepth}{%d}sectnum_startrw  z\setcounter{%s}{%d})drP   rI   rX   r   r  r  errorr]   r!   
use_bibtexr  FutureWarningr8   use_verbatim_when_possibleto_latex_encodingoutput_encodinglatex_encodingr.   r/   reference_labelhyperlink_colorr2   r\   r  r3   section_enumerator_separatorr  literal_block_envliteral_block_optionsresplitbibtexr   r  r   language_modulebabelauthor_separatorsauthor_separatordocumentoptionsr   r5   rn   filterrf  documentclassuse_part_sectiond_classgraphicx_optiongraphicx_packagedocutils_footnotesr;   r  r<   r=   r>   r?   rA   rB   r@   rC   rD   rE   rF   rG   contexttitle_labelssubtitle_labelsauthor_stackdate	pdfauthorpdfinfo_section_number_enumeration_counters_max_enumeration_counters	_bibitemstable_stackr~  active_tableout	out_stackis_xetexr!  findr	   get_stylesheet_listfallback_stylesheetremover7   r+   r   hyperref_optionssectnum_xformr  secnumdepthr:   r}  hasattrr  rt  )	rM   rX   babel_classr]   r(   	d_optionsencstylesheet_listrI  rS   rL   rO   rI     s8  
















zLaTeXTranslator.__init__c              
   C   s  t |}|jdv }| jjrb|r|d}z|jdd}W n* tyF } zd| dd}| jj	
| d|d	d
 W  Y d}~S d}~ww | jj|  |rXd| d}d|  d	| S |rm|j|j }d}nd}| jjr}|t| jj| S ||  S )z8Return code to reference or embed stylesheet file `path`).styr)   rO  rU   rV   zCannot embed stylesheet:
 \\/z% rl   
% Nz\makeatletter
z
\makeatotherz% embedded stylesheet: z\usepackage{%s}z
\input{%s})r   suffixr]   r,   with_suffixra   OSErrorr  rX   r   r  record_dependenciesaddas_posixr  stemr*   r	   relative_path_destination)rM   r  
is_packagecontenterrmsgcmdrN   rN   rO   r  r  s4   

zLaTeXTranslator.stylesheet_callc                 C   s\   ddddddddd	d
ddddd}|  }|dd }||v r$|| S |ddddS )zTranslate docutils encoding name into LaTeX's.

        Default method is remove "-" and "_" chars from docutils_encoding.
        latin1latin2latin3latin4iso88595latin5latin9maccyrcp1251koi8-rkoi8-ucp1250cp1252r   )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-1251rj  rk  zwindows-1250zwindows-1252zus-asciir(  r   r8  r)   r4   )r   r%  r  )rM   docutils_encodingr   rW   rN   rN   rO   r    s(   z!LaTeXTranslator.to_latex_encodingc                 C   s   | j j| S rH   )r'  labels)rM   docutil_labelrN   rN   rO   language_label  s   zLaTeXTranslator.language_labelc           
      C   s6  | j r|S tj }| js|tj | jr| js|td= | jdv rN| j	sN| j
r<d|td< | j| jd< d|td< nd|td< d	|td
< d|td< | jrad|td< d| jj |td< | j	s| jds||tj |tj |tj |tj |D ]:}t|}|tjv r| jstj| jd< q|tjv rd| jd< q| jdkr|tjv rd|tj| f | jdt| < q||}| j	sd}| j
r|d7 }|d D ]}||| |d | }q| jr|d}t|dd D ]\}}	|	 s||  d7  < qd|}| j
r| js|dd}|S ) aU  Return text with 'problematic' characters escaped.

        * Escape the special printing characters ``# $ % & ~ _ ^ \ { }``,
          square brackets ``[ ]``, double quotes and (in OT1) ``< | >``.
        * Translate non-supported Unicode characters.
        * Separate ``-`` (and more in literal text) to prevent input ligatures.
        r8  )r  r)   z\underline{~}graphicxz\reflectbox{/}r.  z
\textbar{}r  z\textless{}<z\textgreater{}>r7   	r  r,  z\usepackage{pifont}re  z"\DeclareUnicodeCharacter{%04X}{%s}r  r4   z,`'"<>r  z{}rl   Nr  \\
z  z ~) r  r-  ra  copyupdaterb  inside_citation_reference_labelr`  r  rB  literalr1  r<   insert_non_breaking_blanksr]   	tab_widthr  
startswithrc  rd  r,  re  rE  r  strrk   r  insert_newliner%  	enumeratelstriprn   )
rM   textr+  chcpseparate_charscharro   r  r%  rN   rN   rO   encode  sl   








zLaTeXTranslator.encodez[
	]c                 C   s   |  |d|S )z1Cleanse, encode, and return attribute value text.rv  )r  sub)rM   r  
whitespacerN   rN   rO   attval  s   zLaTeXTranslator.attvalc                 C   s   t |jtjS )z@Check whether a node represents an inline or block-level element)
isinstancer  r   TextElementr  rN   rN   rO   	is_inline!  s   zLaTeXTranslator.is_inlinec                 C   s$   | j ddd |d D  dS )z)Append hypertargets for all ids of `node`%
c                 s   s    | ]}d | V  qdS )z"\raisebox{1em}{\hypertarget{%s}{}}NrN   r   r   rN   rN   rO   r  )  s    z6LaTeXTranslator.append_hypertargets.<locals>.<genexpr>idsN)r@  r5   rn   r  rN   rN   rO   append_hypertargets%  s   z#LaTeXTranslator.append_hypertargetsTc                    sL   |rdnd  fdd|d D }|r|r| dd |r$|r$|d |S )	a  Return 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.
        If `newline` is True, a newline is added if there are labels.
        z\protectr)   c                    s   g | ]} d |  qS )z
\label{%s}rN   r  prefixrN   rO   r  5  s    z1LaTeXTranslator.ids_to_labels.<locals>.<listcomp>r  r   z\phantomsectionrl   )ru  r5   )rM   r  
set_anchorprotectnewlinerp  rN   r  rO   ids_to_labels,  s   
zLaTeXTranslator.ids_to_labelsc                 C   sH   dd |d D }|r"|d  dd|d< dd |d D |d< d	S d	S )
z8Convert ``align-*`` class arguments into alignment args.c                 S   s   g | ]	}| d r|qS align-r  r  rN   rN   rO   r  ?  r   z:LaTeXTranslator.set_align_from_classes.<locals>.<listcomp>r  r  r  r)   r  c                 S   s   g | ]	}| d s|qS r  r  r  rN   rN   rO   r  B  s    
Nr  )rM   r  r  rN   rN   rO   set_align_from_classes<  s
   z&LaTeXTranslator.set_align_from_classesNc                 C   sX   | d|}|dkr| jd d S |dkr| jd d S |dkr*| jd d S d S )Nr  r  z\raggedright
r  z\centering
r  z\raggedleft
)r  r@  r5   )rM   r  r   r  rN   rN   rO   insert_align_declarationE  s   z(LaTeXTranslator.insert_align_declarationc                 C   s   t |jtjs| jd |d D ]B}|dr3| j|dd }|r2d| jj	|< | jd|  qt |tj
rB|tjdg v rBq| jsKtj| jd	< | jd
|  qdS )z6Open a group and insert declarations for class values.rl   r  	language-	   NTz\begin{selectlanguage}{%s}
r  DUclassz\begin{DUclass}{%s}
)r  r  r   compoundr@  r5   r  r(  r   r   r+  r   rw   rE  r  duclassr>   rM   r  r  r   rN   rN   rO   duclass_openN  s    
zLaTeXTranslator.duclass_openc                 C   s   t |d D ]8}|dr | j|dd }|r| jd qt|tjr/|t	j
dg v r/q| js8tj| jd< | jd qdS )	z$Close a group of class declarations.r  r  r  Nz\end{selectlanguage}
r  r  \end{DUclass}
)reversedr  r(  r   r@  r5   r  r   r+  r   rw   rE  r  r  r>   r  rN   rN   rO   duclass_close`  s   
zLaTeXTranslator.duclass_closec                 C   s   | j | j || _d S rH   )rA  r5   r@  )rM   new_outrN   rN   rO   push_output_collectoro  s   
z%LaTeXTranslator.push_output_collectorc                 C   s   | j  | _d S rH   )rA  r  r@  rL   rN   rN   rO   pop_output_collectors     z$LaTeXTranslator.pop_output_collectorc                 C   sn   |D ]}t |tjtjtjfs nqdS t |tjtjfr"| |S t |tjr*dS t |tj	tj
fs5dS dS )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)r  r   	Invisiblefootnotecitation	containerr  term_postfiximagerj  
math_block)rM   r  childrN   rN   rO   r  v  s   	
zLaTeXTranslator.term_postfixc                 C   s   | j | |  d S rH   )r@  r5   r  astextr  rN   rN   rO   
visit_Text     zLaTeXTranslator.visit_Textc                 C      d S rH   rN   r  rN   rN   rO   depart_Text     zLaTeXTranslator.depart_Textc                 C      |d  dd | | d S )Nr  r   abbreviationru  visit_inliner  rN   rN   rO   visit_abbreviation     z"LaTeXTranslator.visit_abbreviationc                 C      |  | d S rH   depart_inliner  rN   rN   rO   depart_abbreviation  r  z#LaTeXTranslator.depart_abbreviationc                 C   r  )Nr  r   acronymr  r  rN   rN   rO   visit_acronym  r  zLaTeXTranslator.visit_acronymc                 C   r  rH   r  r  rN   rN   rO   depart_acronym  r  zLaTeXTranslator.depart_acronymc                 C      |  |d d S )Naddressvisit_docinfo_itemr  rN   rN   rO   visit_address  r  zLaTeXTranslator.visit_addressc                 C   r  rH   depart_docinfo_itemr  rN   rN   rO   depart_address  r  zLaTeXTranslator.depart_addressc                 C   s   dd |d D |d< | j jr0tj| jd< d|d v r!tj| jd< | jdd|d   d S | j	s9tj
| jd< d|d v rH| j	sHtj| jd< | | | jd d S )	Nc                 S   s   g | ]}|d kr|qS )
admonitionrN   r  rN   rN   rO   r    s    z4LaTeXTranslator.visit_admonition.<locals>.<listcomp>r  r  r  z
\DUadmonition[%s]{r   z\begin{DUadmonition})r]   r7   r  admonition_legacyr>   error_legacyr@  r5   rn   rE  r  r  r  r  rN   rN   rO   visit_admonition  s   
z LaTeXTranslator.visit_admonitionc                 C   s2   | j jr| jd d S | jd | | d S )N}
z\end{DUadmonition}
)r]   r7   r@  r5   r  r  rN   rN   rO   depart_admonition  s
   z!LaTeXTranslator.depart_admonitionc                 C   s&   | j | |  | |d d S )Nauthor)r8  r5   r  r  r  r  rN   rN   rO   visit_author  s   zLaTeXTranslator.visit_authorc                 C   r  rH   r  r  rN   rN   rO   depart_author  r  zLaTeXTranslator.depart_authorc                 C   r  rH   rN   r  rN   rN   rO   visit_authors     zLaTeXTranslator.visit_authorsc                 C   r  rH   rN   r  rN   rN   rO   depart_authors  r  zLaTeXTranslator.depart_authorsc                 C      |  | | jd d S )Nz\begin{quote}r  r@  r5   r  rN   rN   rO   visit_block_quote     
z!LaTeXTranslator.visit_block_quotec                 C      | j d | | d S )Nz\end{quote}
r@  r5   r  r  rN   rN   rO   depart_block_quote     z"LaTeXTranslator.depart_block_quotec                 C   r  )Nz\begin{itemize}r  r  rN   rN   rO   visit_bullet_list  r  z!LaTeXTranslator.visit_bullet_listc                 C   r  )Nz\end{itemize}
r  r  rN   rN   rO   depart_bullet_list  r  z"LaTeXTranslator.depart_bullet_listc                 C   r  )N\textsuperscript{r@  r5   r  r  rN   rN   rO   visit_superscript  r  z!LaTeXTranslator.visit_superscriptc                 C   r  Nr0  r  r@  r5   r  rN   rN   rO   depart_superscript  r  z"LaTeXTranslator.depart_superscriptc                 C   r  )Nz\textsubscript{r  r  rN   rN   rO   visit_subscript  r  zLaTeXTranslator.visit_subscriptc                 C   r  r  r  r  rN   rN   rO   depart_subscript  r  z LaTeXTranslator.depart_subscriptc                 C      | j d d S )Nz

\caption{r@  r5   r  rN   rN   rO   visit_caption  r  zLaTeXTranslator.visit_captionc                 C   r  Nr  r  r  rN   rN   rO   depart_caption  r  zLaTeXTranslator.depart_captionc                 C   s,   | j s	tj| jd< | jd | | d S )Ntitlereferencez\DUroletitlereference{)rE  r  r  r>   r@  r5   r  r  rN   rN   rO   visit_title_reference  s   z%LaTeXTranslator.visit_title_referencec                 C   r  r  r  r  rN   rN   rO   depart_title_reference  r  z&LaTeXTranslator.depart_title_referencec                 C   s.   | j r
| g  d S | jd | | d S )Nz\begin{figure}[b])r!   r  r@  r5   r  r  rN   rN   rO   visit_citation   s   zLaTeXTranslator.visit_citationc                 C   sP   | j r | jd }d| jdd  }| j||g |   d S | jd d S )Nr   r)   rw  \end{figure}
)r!   r@  rn   r=  r5   r  )rM   r  labelr  rN   rN   rO   depart_citation  s   
zLaTeXTranslator.depart_citationc                 C   s   | j r| j| g | jr.| js| jd d| _d S | jd dv s(J d| jd= d S d}d|v r9|d }nd|v rE| jj|d  }| jd	|  d S )
Nz\cite{Tr  rv  rl   z2unexpected non-whitespace while in reference labelr)   refidrefname\hyperlink{%s}{[)	r&  r=  r5   r  r!   r{  r@  rX   nameids)rM   r  hrefrN   rN   rO   visit_citation_reference  s    

z(LaTeXTranslator.visit_citation_referencec                 C   s   | j r<d}|jddd}t|tjr'| dv r'|jddd}t|tjr'd}|r1| jd d S | jd d| _	d S | jd d S )NFTdescendsiblingsr  r   r0  ]})
r!   	next_noder  r   Textr  citation_referencer@  r5   r{  )rM   r  followup_citationsiblingsibling2rN   rN   rO   depart_citation_reference%  s   
z)LaTeXTranslator.depart_citation_referencec                 C   r  )Nz	(\textbf{r  r  rN   rN   rO   visit_classifier8  r  z LaTeXTranslator.visit_classifierc                 C   s2   | j d |jtjdddr| j d d S d S )Nz})FTr  rl   )r@  r5   r  r   termr  rN   rN   rO   depart_classifier;  s   z!LaTeXTranslator.depart_classifierc                 C   s   | j | d S rH   )r?  r  r  rN   rN   rO   r  @  r  zLaTeXTranslator.visit_colspecc                 C   r  rH   rN   r  rN   rN   rO   depart_colspecC  r  zLaTeXTranslator.depart_colspecc                 C   s<   t |jtjs| jd | jd| dd  tj)Nrl   z%% %s
rR  )	r  r  r   r  r@  r5   r  r  SkipNoder  rN   rN   rO   visit_commentF  s   zLaTeXTranslator.visit_commentc                 C   r  rH   rN   r  rN   rN   rO   depart_commentM  r  zLaTeXTranslator.depart_commentc                 C   s8   t |jtjr| jd |d dd | | d S )Nrl   r  r   r  )r  r  r   r  r@  r5   ru  r  r  rN   rN   rO   visit_compoundP  s   zLaTeXTranslator.visit_compoundc                 C   r  rH   r  r  rN   rN   rO   depart_compoundV  r  zLaTeXTranslator.depart_compoundc                 C   r  )Ncontactr  r  rN   rN   rO   visit_contactY  r  zLaTeXTranslator.visit_contactc                 C   r  rH   r  r  rN   rN   rO   depart_contact\  r  zLaTeXTranslator.depart_contactc                 C   r  rH   )r  r  rN   rN   rO   visit_container_  r  zLaTeXTranslator.visit_containerc                 C   r  rH   r  r  rN   rN   rO   depart_containerb  r  z LaTeXTranslator.depart_containerc                 C   r  )N	copyrightr  r  rN   rN   rO   visit_copyrighte  r  zLaTeXTranslator.visit_copyrightc                 C   r  rH   r  r  rN   rN   rO   depart_copyrighth  r  z LaTeXTranslator.depart_copyrightc                 C   r  )Nr7  r  r  rN   rN   rO   
visit_datek  r  zLaTeXTranslator.visit_datec                 C   r  rH   r  r  rN   rN   rO   depart_daten  r  zLaTeXTranslator.depart_datec                 C   r  rH   rN   r  rN   rN   rO   visit_decorationq  r  z LaTeXTranslator.visit_decorationc                 C   r  rH   rN   r  rN   rN   rO   depart_decorationu  r  z!LaTeXTranslator.depart_decorationc                 C   r  rH   rN   r  rN   rN   rO   visit_definitionx  r  z LaTeXTranslator.visit_definitionc                 C   r  rH   rN   r  rN   rN   rO   depart_definition{  r  z!LaTeXTranslator.depart_definitionc                 C   r  )Nz\begin{description}
r  r  rN   rN   rO   visit_definition_list~  r  z%LaTeXTranslator.visit_definition_listc                 C   r  )Nz\end{description}
r  r  rN   rN   rO   depart_definition_list  r  z&LaTeXTranslator.depart_definition_listc                 C   r  rH   rN   r  rN   rN   rO   visit_definition_list_item  r  z*LaTeXTranslator.visit_definition_list_itemc                 C   s&   |j dddd ur| jd d S d S )NFTr  rl   )r  r@  r5   r  rN   rN   rO   depart_definition_list_item  s   z+LaTeXTranslator.depart_definition_list_itemc                 C   r  )Nrv  r  r  rN   rN   rO   visit_description  r  z!LaTeXTranslator.visit_descriptionc                 C   r  rH   rN   r  rN   rN   rO   depart_description  r  z"LaTeXTranslator.depart_descriptionc                 C   s   |  | j d S rH   )r  rD   r  rN   rN   rO   visit_docinfo  r  zLaTeXTranslator.visit_docinfoc                 C   sX   |    | jr*d| jd< | jstj| jd< tj| jd< | jdd | jd d S d S )Nz\usepackage{tabularx}tabularx_providelengthrD   r   z@
% Docinfo
\begin{center}
\begin{tabularx}{\DUdocinfowidth}{lX}
z\end{tabularx}
\end{center}
)	r  rD   r<   rE  r  providelengthr>   ru  r5   r  rN   rN   rO   depart_docinfo  s   
zLaTeXTranslator.depart_docinfoc                 C   s   | j rJ|dv r8|dks| js| jg  |dkr&d| _| | }d| _n| | }| jd | tj|dkrJ| j	| |  tj| j
d| |  |dkrjd| _| j
d	 | jd
 d S | jd d S )N)r  organizationr  r  r  r  TFr  r7  z\textbf{%s}: &
	z{\raggedright
z } \\
r  )r/   r6  r5   r  r  r  r  r   r  r7  r@  rr  r3  )rM   r  r`   r  rN   rN   rO   r    s(   z"LaTeXTranslator.visit_docinfo_itemc                 C   s   | j | j  d| _d S r  )r@  r5   r3  r  r  r  rN   rN   rO   r    s   
z#LaTeXTranslator.depart_docinfo_itemc                 C   r  rH   )visit_literal_blockr  rN   rN   rO   visit_doctest_block  r  z#LaTeXTranslator.visit_doctest_blockc                 C   r  rH   )depart_literal_blockr  rN   rN   rO   depart_doctest_block  r  z$LaTeXTranslator.depart_doctest_blockc                 C   sP   | j st|r$t|d tjr&| jjdk}|  j| j|d|d7  _d S d S d S )Nr   rm  Fr  r  )	r/   ry  r  r   rA   r]   r-  r4  r  rM   r  r  rN   rN   rO   visit_document  s   zLaTeXTranslator.visit_documentc                 C   s   | j js
| j jdvr|   | jd< | j | _| j | _| jtj	| j
  | jr9| j| j}| jd|  | jrJ|  jdg| j dg 7  _| jsV| jrZ| jsV| jrZ|   | jra|   d| jv rq| jss| jd d S d S d S )N)r)   r   r(  z  pdfauthor={%s}z\hypersetup{r0  minitocz'
\faketableofcontents % for local ToCs
)r(  r   r   r<   r  r>   r?   r5   r  linkingrG  r8  r*  rn   r9  rA   r/   r6  r7  
make_titler=  append_bibliogaphyhas_latex_tocr@  )rM   r  authorsrN   rN   rO   depart_document  s,   zLaTeXTranslator.depart_documentc                 C   s   d | jg}| jr|| j7 }| jr!|ddd | j g| j 7 }| jdd |  dd | jD }| jdd	 |  | jd
d | j  | j	d d S )Nr)   rP  z\DUdocumentsubtitle{%s}z
\title{%s}%
  c                 S   s   g | ]}d  |qS )rx  )rn   )r   author_entryrN   rN   rO   r    r  z.LaTeXTranslator.make_title.<locals>.<listcomp>z\author{%s}z \and
z	\date{%s}, z\maketitle
)
rn   rA   r4  rB   r5  r@   r5   r6  r7  rC   )rM   	title_arg
author_argrN   rN   rO   r:    s$   	
zLaTeXTranslator.make_titlec                 C   s   | j r | jd| j d   | jdd| j dd    d S | jrfd}| jD ]}t|t|d k r8|d }q(| jd|  | jD ]}|d dd	}| jd
|d ||d f  qD| jd d S d S )Nz
\bibliographystyle{%s}
r   z\bibliography{%s}
r   rw  r)   z
\begin{thebibliography}{%s}
r9  r8  z\bibitem[%s]{%s}{%s}
z\end{thebibliography}
)r&  r@  r5   rn   r!   r=  ry  r  )rM   widest_labelbibitemcite_keyrN   rN   rO   r;    s&   $

z"LaTeXTranslator.append_bibliogaphyc                 C   r  )Nz\emph{r  r  rN   rN   rO   visit_emphasis#  r  zLaTeXTranslator.visit_emphasisc                 C   r  r  r  r  rN   rN   rO   depart_emphasis'  r  zLaTeXTranslator.depart_emphasisc                 C   sB   | j | j  r| jd | j   | j | j  s	d S d S )N & )r?  r  r  r@  r5   r  rL   rN   rN   rO   (insert_additional_table_colum_delimiters-  s   
z8LaTeXTranslator.insert_additional_table_colum_delimitersc              	   C   s  | j  dkr|   n| jd d|v rd|v rtdd|v rKd| jd< |d d }| j | j  | | jd	|| j  f  | j	d
 n=d|v r| j  dkr\| j 
 }nd}|d d }| jd||| j | j  || j 
 f  | j	d
 n| j	d t|rt|jjtjs| j  r| jd | j	d
 n| j	d | j js| jd dr| r| jd | j   d S )Nr   rI  morerowsmorecolszWCells that span multiple rows *and* columns currently not supported by the LaTeX writerz\usepackage{multirow}multirowrw  z\multirow{%d}{%s}{r0  r)   z\multicolumn{%d}{%s%s%s}{\textbf{r  r/  r4  )r?  r  rJ  r@  r5   NotImplementedErrorr<   r  r  r3  r  r  ry  r  r  r   theadr  r  endswithr  r  )rM   r  mrowsbar1mcolsrN   rN   rO   r  3  sX   



zLaTeXTranslator.visit_entryc                 C   s0   | j | j  | j | j  |   d S rH   )r@  r5   r3  r  rJ  r  rN   rN   rO   depart_entrym  s   zLaTeXTranslator.depart_entryc                 C   s   | j   d S rH   )r?  r  r  rN   rN   rO   r  s  r  zLaTeXTranslator.visit_rowc                 C      | j | j  d S rH   )r@  r  r?  r  r  rN   rN   rO   r  v     zLaTeXTranslator.depart_rowc           
      C   s  ddddddd}g d}d}| j r8| jr.| jr.| js.d	d
d | jd | j D | j }| jr8|| jd 7 }||dd7 }||dd }|dd	}t| jd }dt	
|  }d||||f }	| j|	 | | |dkr| jd |||f||d  kr| jd||	f  nd| | j|< | jd | jd|	  | jd|  d|v r| jd||d d f  d S d S )Nr)   r   alphAlphromanRoman)r)   r   
loweralpha
upperalpha
lowerroman
upperroman))r)   r   r-   )(rX  ))r)   rZ  r-   )r)   rY  r-   r-   c                 s       | ]}t |V  qd S rH   )r  )r   nrN   rN   rO   r        z8LaTeXTranslator.visit_enumerated_list.<locals>.<genexpr>r  r  enumtyperS  rw  enumz%s\%s{%s}%s   z\begin{enumerate}z
\renewcommand{\label%s}{%s}z\newcounter{%s}z\begin{list}z{%s}z{\usecounter{%s}}r  z
\setcounter{%s}{%d})r2   r3   section_levelr;  rn   r:  r!  r  ry  rZ  toRomanr   r5   r  r@  r>   )
rM   r  typesdefault_labelsr  re  rS  
enum_levelcounter_namer  rN   rN   rO   visit_enumerated_listy  sX   


z%LaTeXTranslator.visit_enumerated_listc                 C   s@   t | jdkr| jd n| jd | | | j  d S )Nrg  z\end{enumerate}
z\end{list}
)ry  r;  r@  r5   r  r  r  rN   rN   rO   depart_enumerated_list  s
   
z&LaTeXTranslator.depart_enumerated_listc                 C   r  rH   rN   r  rN   rN   rO   visit_field  r  zLaTeXTranslator.visit_fieldc                 C   r  rH   rN   r  rN   rN   rO   depart_field  r  zLaTeXTranslator.depart_fieldc                 C   s*   t |jjtjs| j| | d S d S rH   )r  r  r   rD   r@  r5   r  r  rN   rN   rO   visit_field_body  s   z LaTeXTranslator.visit_field_bodyc                 C   s    | j | ju r| j d d S d S )Nrx  r@  rD   r5   r  rN   rN   rO   depart_field_body  s   z!LaTeXTranslator.depart_field_bodyc                 C   s<   |  | | j| jur| jstj| jd< | jd d S d S )N	fieldlistz\begin{DUfieldlist})r  r@  rD   rE  r  ru  r>   r5   r  rN   rN   rO   visit_field_list  s   
z LaTeXTranslator.visit_field_listc                 C   s&   | j | jur| j d | | d S )Nz\end{DUfieldlist}
)r@  rD   r5   r  r  rN   rN   rO   depart_field_list  s   z!LaTeXTranslator.depart_field_listc                 C   ,   | j | ju r| j d d S | j d d S )NrN  z
\item[{rs  r  rN   rN   rO   visit_field_name  s   z LaTeXTranslator.visit_field_namec                 C   rx  )Nz}: &z:}]rs  r  rN   rN   rO   depart_field_name  s   z!LaTeXTranslator.depart_field_namec                 C   sf   t j| jd< | | |jdd}|dkr| jd|  n| jd |  j| j|dd7  _d S )Nr*  r  r  z\begin{figure} %% align = "%s"
z\begin{figure}
Tr  )	r  r*  r<   r  r  r  r@  r5   r  )rM   r  	alignmentrN   rN   rO   visit_figure  s   
zLaTeXTranslator.visit_figurec                 C   r  )Nr  r  r  rN   rN   rO   depart_figure  r  zLaTeXTranslator.depart_figurec                 C      |  g  | jd d S )Nz\newcommand{\DUfooter}{r  r@  r5   r  rN   rN   rO   visit_footer  r  zLaTeXTranslator.visit_footerc                 C   *   | j d d| j | jd< |   d S )Nr0  r)   z~footerr@  r5   rn   r<   r  r  rN   rN   rO   depart_footer     zLaTeXTranslator.depart_footerc                 C   s   z|d d }W n t y   |d d }Y nw | jrn| js$tj| jd< |d  }| jjdkr4d| }| j	
d|d d || |f  |d |d krX|  j	| |7  _	t|d	krpt|d	 tjrr| j	
d
 d S d S d S d S )Nbackrefsr   r  	footnotesr   [%s]z%%
\DUfootnotetext{%s}{%s}{%s}{namesrw  r4  )r  r2  rE  r  r  r>   r  r]   footnote_referencesr@  r5   r  r  ry  r  r   rj  )rM   r  backrefnumrN   rN   rO   visit_footnote  s(   zLaTeXTranslator.visit_footnotec                 C   r  r  r  r  rN   rN   rO   depart_footnote	  r  zLaTeXTranslator.depart_footnotec                 C   s   d}d|v r|d }nd|v r| j j|d  }| jj}|dkr4| | | jd|  | jd d S | js=t	j
| jd< | jd|d	 d
 |f  | jd d S )Nr)   r  r  r   r  r  r  z\DUfootnotemark{%s}{%s}{r  r   r0  )rX   r  r]   r  r  r@  r5   r3  rE  r  r  r>   )rM   r  r   formatrN   rN   rO   visit_footnote_reference	  s    


z(LaTeXTranslator.visit_footnote_referencec                 C   rV  rH   r@  r5   r3  r  r  rN   rN   rO   depart_footnote_reference)	  rW  z)LaTeXTranslator.depart_footnote_referencec                 C   s@   t |jtjr
tjt |jtjsJ | js| j| d S d S rH   )	r  r  r   r  r  r  r!   r@  r5   )rM   r  bracketr   rN   rN   rO   label_delim-	  s   zLaTeXTranslator.label_delimc                 C   s   |  |dd dS )z9footnote or citation label: in brackets or as superscriptr<  r  Nr  r  rN   rN   rO   visit_label5	  s   zLaTeXTranslator.visit_labelc                 C   s   |  |dd d S )Nr=  r0  r  r  rN   rN   rO   depart_label9	  r  zLaTeXTranslator.depart_labelc                 C   r  rH   rN   r  rN   rN   rO   visit_generated=	  r  zLaTeXTranslator.visit_generatedc                 C   r  rH   rN   r  rN   rN   rO   depart_generated@	  r  z LaTeXTranslator.depart_generatedc                 C   r  )Nz\newcommand{\DUheader}{r  r  rN   rN   rO   visit_headerC	  r  zLaTeXTranslator.visit_headerc                 C   r  )Nr0  r)   z~headerr  r  rN   rN   rO   depart_headerG	  r  zLaTeXTranslator.depart_headerc                 C   s   |durt jdtdd td|}|s|S | dd \}}|dv r*d| }|S |dkr8d	t|d
  }|S | jrQ|dkrQ| jsHt	j
| jd< d| jd< d| }|S )z=Convert `length_str` with rst length to LaTeX length
        Nz|The optional argument `pxunit` of LaTeXTranslator.to_latex_length() is ignored and will be removed in Docutils 0.21 or laterr  r  z(\d*\.?\d*)\s*(\S*))r)   r   z%sbpr4  z%.3f\linewidth      Y@pxr-  z$
\DUprovidelength{\pdfpxdimen}{1bp}
z%s\pdfpxdimen)r  r  r  r$  matchgroupsr*  rB  rE  r  r.  r>   )rM   
length_strpxunitr  r  unitrN   rN   rO   to_latex_lengthL	  s*   	
zLaTeXTranslator.to_latex_lengthc           
      C   s  | j | jd< |j}t|d dd}d|vr't|jtjr"d|d< | 	| g }g }g }ddd	d
ddd}d|v rZz||d  }|
|d  |
|d  W n	 tyY   Y nw d|v rj|
d| |d   d|v ry|
d|d d   d|v r|
d| |d   | |st|jtjtjfs|
d | |st|jtjs|
d |  | j| d}	|rdd| }	| j
d|	|f  | j| d S )Nrs  urir.  rQ  r  r  r)   r)   )z\raisebox{-0.5\height}{r0  )z\raisebox{-\height}{r0  )z!\noindent\makebox[\linewidth][c]{r0  )z
\noindent{z\hfill})z\noindent{\hfillr0  )bottommiddletopr  r  r  r   rw  heightz	height=%sscalezscale=%fr  r  zwidth=%srl   r)   r  r   z\includegraphics%s{%s})r1  r<   r  r   r  r  r  r   figurer  r5   r  r  r  r  r  r@  r  rn   )
rM   r  attrs	imagepathprepostinclude_graphics_optionsalign_codes
align_codeoptionsrN   rN   rO   visit_imagei	  sh   





zLaTeXTranslator.visit_imagec                 C   s   |  j | j|dd7  _ d S )NTr{  )r@  r  r  rN   rN   rO   depart_image	     zLaTeXTranslator.depart_imagec                 C   st   |d D ]3}| dr&| j|dd  }|r%d| jj|< | jd|  q| js/tj| j	d< | jd|  qd S )Nr  r  r  Tz\foreignlanguage{%s}{inlinez\DUrole{%s}{)
r  r(  r   r   r@  r5   rE  r  r  r>   r  rN   rN   rO   r  	  s   
zLaTeXTranslator.visit_inlinec                 C   s   | j dt|d   d S )Nr0  r  )r@  r5   ry  r  rN   rN   rO   r  	  r  zLaTeXTranslator.depart_inlinec                 C   "   | j s	tj| jd< | jd d S )Nlegendz\begin{DUlegend})rE  r  r  r>   r@  r5   r  rN   rN   rO   visit_legend	  s   zLaTeXTranslator.visit_legendc                 C   r  )Nz\end{DUlegend}
r  r  rN   rN   rO   depart_legend	  r  zLaTeXTranslator.depart_legendc                 C   r  )Nz\item[] r  r  rN   rN   rO   
visit_line	  r  zLaTeXTranslator.visit_linec                 C   r  Nrl   r  r  rN   rN   rO   depart_line	  r  zLaTeXTranslator.depart_linec                 C   sj   | j stj| jd< tj| jd< | | t|jtj	r#| j
d d S | | | j
d | | d S )Nr-  	lineblockz0\item[]
\begin{DUlineblock}{\DUlineblockindent}
z\begin{DUlineblock}{0em}
)rE  r  r.  r>   r  r  r  r  r   
line_blockr@  r5   r  r  r  rN   rN   rO   visit_line_block	  s   

z LaTeXTranslator.visit_line_blockc                 C   r  )Nz\end{DUlineblock}
r  r  rN   rN   rO   depart_line_block	  r  z!LaTeXTranslator.depart_line_blockc                 C   r  )Nz
\item r  r  rN   rN   rO   visit_list_item	  r  zLaTeXTranslator.visit_list_itemc                 C   r  rH   rN   r  rN   rN   rO   depart_list_item	  r  z LaTeXTranslator.depart_list_itemc                 C   sV   d| _ d|d v r| jjdkrtj| jd< | jstj| jd< | j	
d | | d S )NTcoder  r(   r)  z\texttt{)r|  r]   syntax_highlightr  r)  r<   rE  highlight_rulesr>   r@  r5   r  r  rN   rN   rO   visit_literal	  s   zLaTeXTranslator.visit_literalc                 C   s    d| _ | | | jd d S )NFr0  )r|  r  r@  r5   r  rN   rN   rO   depart_literal	  s   
zLaTeXTranslator.depart_literalc                 C   s   t |dkot|d tjS )z,Check whether a node can be typeset verbatimrw  r   )ry  r  r   r  r  rN   rN   rO   is_plaintext	  s   zLaTeXTranslator.is_plaintextc           
      C   s*  ddddd}| j }| |}| j }|o| jj}tjtjf}| jj	r,|tj
tjf7 }|o4t|j| }|dko:|}	| | |  j| j|dd7  _|sid|d	 v ri| jjd
kritj| jd< | jsitj| jd< |r|r|stj| jd< | jdtdd | dD   | jd n|s|	s| jd | jd n| jd |r|r|r|	rz	|| | jd< W n	 ty   Y nw d| _|r|	r| jd | jd|| j f  | jd|  dS |r|sd| _!d| jd< | jd | jd dS d| _"d| _#d| _$| jd | jd dS )zjRender a literal block.

        Corresponding rST elements: literal block, parsed-literal, code.
        z6\usepackage{listings}
\lstset{xleftmargin=\leftmargin}z\usepackage{moreverb}z\usepackage{fancyvrb})
lstlistinglistingVerbatimverbatimtabr  Tr{  r  r  r(   r)  ttemz\begin{minipage}{%d\ttemwidth}
c                 s   rb  rH   )ry  )r   r%  rN   rN   rO   r  %
  rd  z6LaTeXTranslator.visit_literal_block.<locals>.<genexpr>rl   z
\end{minipage}
z\begin{quote}
z
\end{quote}
literal_blockz\lstset{xleftmargin=0pt}
z\begin{%s}%s
z	
\end{%s}z\usepackage{alltt}ra  z\begin{alltt}
z
\end{alltt}z\ttfamily\raggedright
r)   N)%r"  r  r?  r  r  r   r  sidebarr]   r7   r  system_messager  r  r  r@  r  r  r  r)  r<   rE  r  r>   r  r5   maxr  r%  r3  r  r  r#  ra  r|  r  r}  )
rM   r  packagesliteral_env
_plaintext	_in_table_autowidth_table_no_env_nodes_use_env_use_listingsrN   rN   rO   r1  	  sv   



z#LaTeXTranslator.visit_literal_blockc                 C   sP   d| _ d| _d| _d| _d| _| j| j  | j| j  | 	| d S r  )
r}  r  r|  r  ra  r@  r5   r3  r  r  r  rN   rN   rO   r3  K
  s   z$LaTeXTranslator.depart_literal_blockc                 C   sx   |j d}|j d}|r|sd S |dv r"| jd||f  d S |dkr0| jd|  d S | jd||f  d S )Nr`   r]  )r  creatorkeywordssubjectrA   z  pdf%s={%s},producerz  addtopdfproducer={%s},z  pdfinfo={%s={%s}},)r  r  r9  r5   )rM   r  r`   r]  rN   rN   rO   
visit_metaU
  s   zLaTeXTranslator.visit_metac                 C   r  rH   rN   r  rN   rN   rO   depart_metad
  r  zLaTeXTranslator.depart_metar3  c                 C   s   |  | d| jd< | tj}|dkr#| jrddg}nddg}n| j|ddd}d	| d
d|d| g}|	d| | j
| | | tj)z	math rolez\usepackage{amsmath}amsmathr3  z\(z\)FTr  r  z%%
\begin{%s}
rl   r)   r  rw  )r  r<   r  rk   r   uni2tex_tablera  r  rn   ru  r@  r  r  r   r  )rM   r  math_env	math_codewrapperrp  rN   rN   rO   
visit_mathg
  s"   




zLaTeXTranslator.visit_mathc                 C   r  rH   rN   r  rN   rN   rO   depart_math}
  r  zLaTeXTranslator.depart_mathc                 C   s   t | }| j||d d S )N)r  )r   r  r  )rM   r  r  rN   rN   rO   visit_math_block
  s   z LaTeXTranslator.visit_math_blockc                 C   r  rH   rN   r  rN   rN   rO   depart_math_block
  r  z!LaTeXTranslator.depart_math_blockc                 C   s   | j d r| jd d S d S )Nr  rA  )r3  r@  r5   r  rN   rN   rO   visit_option
  s   
zLaTeXTranslator.visit_optionc                 C   s   | j d  d7  < d S )Nr  rw  )r3  r  rN   rN   rO   depart_option
  r  zLaTeXTranslator.depart_optionc                 C   s   | j |dd dS )z@Append the delimiter between an option and its argument to body.	delimiterrv  N)r@  r5   r  r  rN   rN   rO   visit_option_argument
  s   z%LaTeXTranslator.visit_option_argumentc                 C   r  rH   rN   r  rN   rN   rO   depart_option_argument
  r  z&LaTeXTranslator.depart_option_argumentc                 C   s   | j d | jd d S )Nz\item[r   )r@  r5   r3  r  rN   rN   rO   visit_option_group
  s   z"LaTeXTranslator.visit_option_groupc                 C   s   | j   | jd d S )Nz] )r3  r  r@  r5   r  rN   rN   rO   depart_option_group
  r  z#LaTeXTranslator.depart_option_groupc                 C   s8   | j stj| jd< tj| jd< | | | jd d S )Nr-  
optionlistz\begin{DUoptionlist}
)rE  r  r.  r>   r  r  r@  r5   r  rN   rN   rO   visit_option_list
  s
   
z!LaTeXTranslator.visit_option_listc                 C   r  )Nz\end{DUoptionlist}
r  r  rN   rN   rO   depart_option_list
  r  z"LaTeXTranslator.depart_option_listc                 C   r  rH   rN   r  rN   rN   rO   visit_option_list_item
  r  z&LaTeXTranslator.visit_option_list_itemc                 C   r  rH   rN   r  rN   rN   rO   depart_option_list_item
  r  z'LaTeXTranslator.depart_option_list_itemc                 C   r  rH   rN   r  rN   rN   rO   visit_option_string
  r  z#LaTeXTranslator.visit_option_stringc                 C   r  rH   rN   r  rN   rN   rO   depart_option_string
  r  z$LaTeXTranslator.depart_option_stringc                 C   r  )Nr0  r  r  rN   rN   rO   visit_organization
  r  z"LaTeXTranslator.visit_organizationc                 C   r  rH   r  r  rN   rN   rO   depart_organization
  r  z#LaTeXTranslator.depart_organizationc                 C   s   |j |}|dkrt|j tjtjtjtjfrn:|dkr3t|j tjr3t|j |d  tjtjfs3n | j	j
rM|dkrB| jd|d |dkrL| jd n| jd |  j| j|dd7  _| | d S )Nr   rw  z:LaTeX merges paragraphs in tables with auto-sized columns!	base_noderl   Tr{  )r  indexr  r   	list_itemdescriptionr  r  rj  r?  r  r  r@  r5   r  r  )rM   r  r  rN   rN   rO   visit_paragraph
  s4   
zLaTeXTranslator.visit_paragraphc                 C   s&   |  | | jjs| jd d S d S r  )r  r?  r  r@  r5   r  rN   rN   rO   depart_paragraph
  s   
z LaTeXTranslator.depart_paragraphc                 C   s:   t j| jd< | jd | | | jd|d   d S )Nr)  r  z"\hyperlink{%s}{\textbf{\color{red}r  )r  r)  r<   r@  r5   r  r  rN   rN   rO   visit_problematic
  s   
z!LaTeXTranslator.visit_problematicc                 C   r  )Nz}}r  r  rN   rN   rO   depart_problematic
  r  z"LaTeXTranslator.depart_problematicc                 C   sR   d| dd vrtj| |st|jtjs| j	d | 
| d| _d S )Nr   r  r)   rl   T)r  r%  r   r  r  r  r  r  r@  r5   r  r  r  rN   rN   rO   	visit_raw
  s   


zLaTeXTranslator.visit_rawc                 C   s.   d| _ | | | |s| jd d S d S )NFrl   )r  r  r  r@  r5   r  rN   rN   rO   
depart_raw
  s
   

zLaTeXTranslator.depart_rawc                 C   sD   d}|D ]}|dkr|d7 }|dkr|d8 }|dk r dS q|dkS )z7Test whether there are unmatched '{' or '}' characters.r   r/  rw  r0  TrN   )rM   rc   rz  r  rN   rN   rO   has_unbalanced_braces
  s   z%LaTeXTranslator.has_unbalanced_bracesc                 C   s"  t ddt ddt ddi}d|v rMt|d |}|dd	ks'| |r0| d
| d |d | krC| jd|  t	j
| jd|  d S d|v rV|d }nd|v rc| jj|d  }ntd| |sr| jd | jd|  | jr| jd| j|ddf  t	j
d S )Nr1  r2  r4  r5  r.  rP  refuriz^^r  zExternal link "zH" not supported by LaTeX.
 (Must not contain "^^" or unbalanced braces.)z\url{%s}z
\href{%s}{r  r  zUnknown reference.rl   z\hyperref[%s]{z\%s{%s}}r)   )r`  r  rk   rC  r  r  r  r@  r5   r   r  rX   r  AssertionErrorr  r  r  )rM   r  special_charsr   rN   rN   rO   visit_reference  s:   


zLaTeXTranslator.visit_referencec                 C   s*   | j d | |s| j d d S d S )Nr0  rl   )r@  r5   r  r  rN   rN   rO   depart_reference&  s   
z LaTeXTranslator.depart_referencec                 C   r  )Nrevisionr  r  rN   rN   rO   visit_revision+  r  zLaTeXTranslator.visit_revisionc                 C   r  rH   r  r  rN   rN   rO   depart_revision.  r  zLaTeXTranslator.depart_revisionc                 C   r  )Nrubricz
\DUrubric{)rE  r  r  r>   r@  r5   r  rN   rN   rO   visit_rubric1  s   zLaTeXTranslator.visit_rubricc                 C   r  r  r  r  rN   rN   rO   depart_rubric8  r  zLaTeXTranslator.depart_rubricc                 C   s6   |  j d7  _ | jd | j| j d   d7  < d S )Nrw  r   )rh  r:  r5   r  rN   rN   rO   visit_section;  s   zLaTeXTranslator.visit_sectionc                 C   s   | j   |  jd8  _d S r  )r:  r  rh  r  rN   rN   rO   depart_sectionB  s   
zLaTeXTranslator.depart_sectionc                 C   s8   |  | tj| jd< | jstj| jd< | jd d S )Nr)  r  z\DUsidebar{)	r  r  r)  r<   rE  r  r>   r@  r5   r  rN   rN   rO   visit_sidebarG  s
   
zLaTeXTranslator.visit_sidebarc                 C   r  r  r  r  rN   rN   rO   depart_sidebarN  r  zLaTeXTranslator.depart_sidebar)u   —r)   )r`  ra  r  r$   c                 C   s:   | j | jj \}}| jd | j| | j| d S )Nz\nopagebreak

\raggedleft )attribution_formatsr]   attributionr@  r5   r3  )rM   r  r  rS  rN   rN   rO   visit_attributionW  s   z!LaTeXTranslator.visit_attributionc                 C   s   | j | j d  d S r  r  r  rN   rN   rO   depart_attribution]  r  z"LaTeXTranslator.depart_attributionc                 C   r  )Nstatusr  r  rN   rN   rO   visit_status`  r  zLaTeXTranslator.visit_statusc                 C   r  rH   r  r  rN   rN   rO   depart_statusc  r  zLaTeXTranslator.depart_statusc                 C   r  )NrN  r  r  rN   rN   rO   visit_strongf  r  zLaTeXTranslator.visit_strongc                 C   r  r  r  r  rN   rN   rO   depart_strongj  r  zLaTeXTranslator.depart_strongc                 C   s   t jrH   )r   r  r  rN   rN   rO   visit_substitution_definitionn  r  z-LaTeXTranslator.visit_substitution_definitionc                 C   r  rH   )unimplemented_visitr  rN   rN   rO   visit_substitution_referenceq  r  z,LaTeXTranslator.visit_substitution_referencec                 C   s   t |jtjr+| | j | jstj| j	d< | j
jdk}|  j| j|d|d7  _d S t |jtjrC| jd| j| jd   d S | jsLtj| j	d< | jd d S )	Ndocumentsubtitlerm  Fr5  z\%s*{rw  rB   z
\DUsubtitle{)r  r  r   rX   r  rB   rE  r  r#  r>   r]   r-  r5  r  rg  r@  r5   r/  rh  r6  rN   rN   rO   visit_subtitlet  s   
zLaTeXTranslator.visit_subtitlec                 C   s*   t |jtjr|   d S | jd d S r  )r  r  r   rX   r  r@  r5   r  rN   rN   rO   depart_subtitle  s   zLaTeXTranslator.depart_subtitlec              	   C   s,  t j| jd< | jst j| jd< | jjrt j| jd< dg|d< | 	| | jjr.| j
d n| j
d | | zd|d  }W n tyL   d	}Y nw | j
d
|d |d | |d |f  t|d dkr~| j
d|d d   | jd d S dd t|d D }| jdd|  d S )Nr)  rA   zsystem-messager  z)
\DUtitle[system-message]{system-message
z
\DUtitle{system-message
z	, line~%sr%  r)   z'}

{\color{red}%s/%s} in \texttt{%s}%s
typerz  sourcer  rw  z
\hyperlink{%s}{r   r0  c                 S   s    g | ]\}}d ||d f qS )z\hyperlink{%s}{%d}rw  rN   )r   r  r   rN   rN   rO   r    s    z8LaTeXTranslator.visit_system_message.<locals>.<listcomp>z
backrefs: rv  )r  r)  r<   rE  rA   r>   r]   r7   title_legacyr  r@  r5   r  r  r  ry  r3  r  rn   )rM   r  r%  r  rN   rN   rO   visit_system_message  s8   



z$LaTeXTranslator.visit_system_messagec                 C   s    | j | j  | | d S rH   )r@  r5   r3  r  r  r  rN   rN   rO   depart_system_message  s   z%LaTeXTranslator.depart_system_messagec                 C   s   |  | tj| jd< | jjstj| jd< | j r'| j	
| j t| d| _| jjdkrNt|jtjrN|j|dkrN| j| jddkrN| j
d | j  | j|| j | jjd	krfd
| jd	< | g  d S )Nr+  table1tabularr  rw  rj  r  r  r   z\usepackage{booktabs})r  r  r+  r<   r]   r8   table_columnwidthr?  r  r>  r5   r~  r  r  r  r   rg  r  r/  rh  rC  r@  r  r  r  r  r  rN   rN   rO   visit_table  s,   



zLaTeXTranslator.visit_tablec                 C   s   | j }|   z	| |d }W n ty   d}Y nw | jjs1| j | j|t| j	dkdd | j 
| j| |  j |7  _ | j 
| j d  | j  t| j	dkr_| j	 | _| | d S )Nr  r  rw  Tr  rl   r   )r@  r  r  r  r?  r  r  r  ry  r>  r5   r  r  r  r  r  )rM   r  r]  r  rN   rN   rO   depart_table  s&   

zLaTeXTranslator.depart_tablec                 C   sX   d|v sd|v sd|v rd S | j d t|jtjtjf }|  j | ||7  _ d S )Nr  r  r  r  )r@  r5   r  r  r   r  rA   r  )rM   r  r  rN   rN   rO   visit_target  s   zLaTeXTranslator.visit_targetc                 C   r  rH   rN   r  rN   rN   rO   depart_target  r  zLaTeXTranslator.depart_targetc                 C   s(   | j ds| | | d  d S d S )Npreamble written)r?  r  r  r  r  rN   rN   rO   visit_tbody  s   
zLaTeXTranslator.visit_tbodyc                 C   r  rH   rN   r  rN   rN   rO   depart_tbody  r  zLaTeXTranslator.depart_tbodyc                 C   s   | j d dS )zdefinition list termz\item[{Nr  r  rN   rN   rO   
visit_term  s   zLaTeXTranslator.visit_termc                 C   s\   | j d |jddd}t|tjr| j d d S t|tjs,| j | | d S d S )Nz}] FTr  rl   )r@  r5   r  r  r   r  
classifierr  )rM   r  r  rN   rN   rO   depart_term  s   zLaTeXTranslator.depart_termc                 C   r  rH   rN   r  rN   rN   rO   visit_tgroup  r  zLaTeXTranslator.visit_tgroupc                 C   r  rH   rN   r  rN   rN   rO   depart_tgroup  r  zLaTeXTranslator.depart_tgroupc                 C   r  rH   )_thead_depthrL   rN   rN   rO   r    r  zLaTeXTranslator.thead_depthc                 C   s   |  j d7  _ d|  kr | jd| j|  | jdd | jjrM| j dkr8dg}| |j	j	ddg }ndg}dg}| j
|| jj | d	g  | j
| j  d S )
Nrw  z{%s}
r2  z	\caption{Fz}\\z\caption[]{z (... continued)}\\rl   )r:  r  r@  r5   r?  r  r  r  r  r  r  r  )rM   r  r  r  rN   rN   rO   r    s   
zLaTeXTranslator.visit_theadc                 C   s@   |d ur| j | j  | j r||  |  jd8  _d S r  )r@  r  r?  r  r  rY   r:  r  rN   rN   rO   r  "  s
   

zLaTeXTranslator.depart_theadc                 C   s`  t |jtjr"| | j | jd | jd| 	|
   dS t |jtjs7t |jtjs7t |jtjrn|jd p@|jjg}| jjrWtj| jd< | jdd|  n| js`tj| jd< | jd | jd dS t |jtjr| | jj | jd dS ttd	rtj| jd	< | j}| j|}| jd
 |t | jj!kr| jjrtj| jd< |dt"#| 7 }n| jstj| jd< tj$| jd< | jdt"#|  d|jd v rtj%| jd< | 	|
 }| jd||f  n| jd|  dg}|| j&|jdd7 }| jd|d  |t | jj!kr,| jjs.| jd  d7  < dS dS dS )z Append section and other titles.r)   z  pdftitle={%s},r  rA   z
\DUtitle[%s]{r   z

\DUtitle{r  rI  z

z[section%s]r  z\begin{DUclass}{section%s}
zsystem-messagesr)  z\%s[%s]{\color{red}z\%s{F)r  r?  z%
}
r  r  N)'r  r  r   rX   r  rA   r3  r5   r9  r  r  topicr  r  tagnamer]   r7   r  r(  r>   r@  rn   rE  r+  r?  r  rJ  rI  r<   rh  r/  rg  ry  rt  rZ  ri  r  r)  r  )rM   r  r  rz  section_namesection_titlebookmarkrN   rN   rO   visit_title)  sh   


zLaTeXTranslator.visit_titlec                 C   s6   | j | j  t|jtjtjfr| 	  d S d S rH   )
r@  r5   r3  r  r  r  r   r+  rX   r  r  rN   rN   rO   depart_titlem  s   zLaTeXTranslator.depart_titlec           	   	   C   sT  | j r9d|d v r9| j| j}dddd}d| jjv r|d= z|| }W n ty8   | jd	| |d
 tjw | j	
d |d rO|  j	| j|dd7  _	t| tjr|d|d vr|| jjdkr|| j	
d| jd |  |ddgd f  | j stj| jd< | | dS |dd}t| jj}t| tjr| |d  }nd}d|d v rtj| jd< d| | jd| < d||f | jd| < dddd}d| jjv rd|d< |r| j	
d ||||  f  | j	
d!||f  | j	
d"|  tj|r| j	
d#| j|  |d$kr| j	
d%|  | j	
d& d| _tj)'z_Write the table of contents.

        Called from visit_topic() for "contents" topics.
        localr  ri   minisect)ri   rq  rg  rq  rg  zUSkipping local ToC at "%s" level.
  Feature not supported with option "use-latex-toc"r  rl   r  Tr{  rm  z\pdfbookmark[%d]{%s}{%s}
rw  r  contentsr   ztoc-listNr|  r)   r8  z\do%stoczminitoc-z\mtcsetdepth{%stoc}{%d}zminitoc-%s-depth)rD  rC  ri   r  z\setcounter{%stocdepth}{%d}z\mtcsettitle{%stoc}{%s}
z\%stoc
z\setcounter{tocdepth}{%d}
Contentsz!\renewcommand{\contentsname}{%s}
z\tableofcontents
)r.   r/  rg  rh  rt  r  r  r   r  r@  r5   r  r  r  rA   r]   r-  r  r  r  toc_listr>   r  ry  r  r8  r<   r}  r<  )	rM   r  r=  minitoc_namesmtc_namer|  maxdepthrA   offsetrN   rN   rO   visit_contentsr  s~   





zLaTeXTranslator.visit_contentsc                 C   s   d|d v r|  | d S d|d v r4| jjr4| | j | jd t| t	j
r2|d d S d S d|d v rT| jsCtj| jd< | jjrMtj| jd< | | j nd|d v rj| jsctj| jd< | | j n|d dd | | d S )NrE  r  rF   z\begin{abstract}r   rE   r;  )rL  r]   r0   r  rF   r@  r5   r  r  r   rA   r  rE  r  r>   r7   abstract_legacyrE   ru  r  r  rN   rN   rO   visit_topic  s,   zLaTeXTranslator.visit_topicc                 C   sl   d|d v r| j jr| jd nd|d v r| | n| | d|d v s.d|d v r4|   d S d S )NrF   r  z\end{abstract}
rE  rE   )r]   r0   r@  r5   r  r  r  r  rN   rN   rO   depart_topic  s   
zLaTeXTranslator.depart_topicc                 C   s.   | j s	tj| jd< | jd | jd d S )N
transitionzN
%___________________________________________________________________________
z\DUtransition
)rE  r  rP  r>   r@  r5   r  rN   rN   rO   visit_transition  s   z LaTeXTranslator.visit_transitionc                 C   r  rH   rN   r  rN   rN   rO   depart_transition  r  z!LaTeXTranslator.depart_transitionc                 C   r  )Nversionr  r  rN   rN   rO   visit_version  r  zLaTeXTranslator.visit_versionc                 C   r  rH   r  r  rN   rN   rO   depart_version  r  zLaTeXTranslator.depart_versionc                 C   s   t d|jj )Nz$visiting unimplemented node type: %s)rO  rT   rp   r  rN   rN   rO   r!    s   z#LaTeXTranslator.unimplemented_visit)TFFrH   )r3  )rp   rq   rr   r  rB  r2   r3   r!  r<  rh  r{  r  r}  r  r|  ra  r   rI   r  r  rr  r  r$  compiler  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r/  r  r  r2  r4  r7  r>  r:  r;  rG  rH  rJ  r  rU  r  r  rn  ro  rp  rq  rr  rt  rv  rw  ry  rz  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r1  r3  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r"  r$  r%  r)  r*  r.  r/  r0  r1  r3  r4  r5  r7  r8  r9  r:  r  r  r  r@  rA  rL  rN  rO  rQ  rR  rT  rU  r!  r   rN   rN   rS   rO   rJ   Y  s   
 j!(X
		
:18
P

#
DLrJ   );r  __docformat__pathlibr   r$  rc   urllib.requestr   r  rZ  ImportErrordocutils.utils.romanr	   r  r   r   r   r   docutils.transformsr
   docutils.utils.mathr   r   __file__r  ru   r   r   dictr  r  r)  r*  r9  r8  r+  r-  r,  rM  r  r  r(  rG  r  r&  r  r#  r%  r!  rQ  r"  
block_namedefinitionsr[   r-  rf  r~  NodeVisitorrJ   rN   rN   rN   rO   <module>   sv   
   2		


 0)  