U
    [Sh                 	   @   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
k
rj   ddlm  m	Z	 Y nX 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"fZ.e.D ]ZZ/e/0d#Z/e/1d$svqXe/2d%Z3e3sqXe,e.Z4e3d&kre40 Z4e5ee3e4 qXW 5 Q R X 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                .       sT  e Zd ZdZdZeZdZdddddgZd	d
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d$d%d&d'gd$dd(fd)d*gd+d,d-e	jd.fd/d0gd,d1e	jd2fd3d4gd5d d6fd7d8gd9de	j
dfd:d;gd<e	jd=gd>fd?d@gdeifdAe dBgedCdDfdEdFgdGde	j
dfdHdIgdJd e	j
d!fdKdLgd9de	j
dfdMdNgdOd e	j
d!fdPdQgd9de	j
dfdRdSgdTd e	j
d!fdUdVgd9de	j
dfdWdXgddYifdZd[gdd+ifd\d]gd9de	j
dfd^d_gd d`dafdbdcgd
de	j
dfdddegd dfdafdgdhgdidjdDfdkdlgdd+ifdmdngde	j
dofdpdqgdgddre	jedsfdtdugdd+ifdvdwgddxifdydzgdd+ifd{d|gd+d}e	jd~fddgd9de	j
dfddgdd e	j
d!fddgd
de	j
dfddgdd e	j
d!fddgdGde	j
dff'fZddiZdZdZdZed Zd
Zdd Z fddZdd Zdd Z  ZS )Writer)latexZ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defaultZarticlezcSpecify document options.  Multiple options can be given, separated by commas.  Default: "a4paper".z--documentoptionsZa4paperz\Format for footnote references: one of "superscript" or "brackets".  Default: "superscript".z--footnote-referencessuperscriptbracketsz<format>Z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none)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-style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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 rH   T/root/rtd-docs/venv/lib/python3.8/site-packages/docutils/writers/latex2e/__init__.pyrC      s    zWriter.__init__c                    s   t   tjg S rB   )superget_transformsr
   ZAdmonitionsrF   	__class__rH   rI   rK     s    zWriter.get_transformsc                 C   s   |  | j}| j| | jD ]}t| |t|| qt| jjj}|	 sV| j
| }|jdd}|   t|| j| _d S )Nutf-8encoding)rE   document	walkaboutvisitor_attributessetattrgetattrr   settingstemplateexistsdefault_template_path	read_textassemble_partsstringTemplate
substitutepartsoutput)rG   visitorpartZtemplatepathrW   rH   rH   rI   	translate  s    

zWriter.translatec                 C   s`   t j|  | jD ]H}t| |}|| jkrJ|r8|d d|| j|< qd|| j|< qdS )z9Assemble the `self.parts` dictionary of output fragments.r$   
N)	r   r   r[   rS   rU   
head_partsr0   joinr_   )rG   rb   linesrH   rH   rI   r[     s    



zWriter.assemble_parts)__name__
__module____qualname__	supportedZdefault_templateLATEX_WRITER_DIRrY   Zdefault_preambletable_style_valuesr   Zvalidate_booleanZvalidate_comma_separated_listZsettings_specZsettings_defaultsZconfig_sectionZconfig_section_dependenciesre   rS   r`   rC   rK   rc   r[   __classcell__rH   rH   rL   rI   r       s     
   
  Dr   c                D   @   s   e Zd ZdZ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#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d0d3d4d5d6d7d8d9d:d;d<d=d9d:d>d?d@dAdBCZdCdD e D ZdEZdFdFdGZdQdIdJZdKdL Z	dMdN Z
dOdP ZdHS )RBabelzLanguage specifics for LaTeX.Z	afrikaansarabic	bulgarianZbretoncatalanczechZwelshdanishZngermangermanZ	naustrianZaustrianZlowersorbiangreekZpolutonikogreekenglishZ
australianZcanadianZbritishZ
newzealandamericanZ	esperantospanishestonianbasquefinnishfrenchZcanadienZirishZibycusgalicianhebrewcroatianZuppersorbianZmagyarZinterlinguaZbahasai	icelandicitalianjapaneseZkazakhlatin
lithuanianZlatvianZ	mongolianZbahasamZnorskdutchnynorskpolishZportugesbrazilromanianrussianZsaminZserbiancZserbianslovaksloveneZalbanianswedishturkishZ	ukrainianvietnam)Cafarbgbrcacscydadezde-1901zde-ATz
de-AT-1901Zdsbelz
el-polytonenzen-AUzen-CAzen-GBzen-NZzen-USeoeseteufifrzfr-CAgaz
grc-ibycusglhehrZhsbhuiaidisitjakkZlaltlvZmnmsnbnlnnnoplptzpt-BRrorusezsh-Cyrlzsh-Latnskslsqsrzsr-Latnsvtrukvic                 C   s   i | ]\}}|  |qS rH   )lower).0kvrH   rH   rI   
<dictcomp>  s      zBabel.<dictcomp>z,Language "%s" not supported by LaTeX (babel)z.<>)r~   ry   Nc                 C   s   || _ | || _i | _d S rB   )reporterlanguage_namelanguageotherlanguages)rG   language_coder   rH   rH   rI   rC     s    zBabel.__init__c                    s  t  j }| jpd dd| g _g }d fdd|D D ]}||krL|| qL|r~ jdd|  d|kr jd	 d
|kr jdddg d|krƈ jdddg |d dkrd j kr  jddd j g7  _d jS )z7Return the babel call with correct options and settingsrw   z\usepackage[%s]{babel},r$   c                 3   s   | ]} j |d V  qdS )r$   N)active_charsget)r   ZlngrF   rH   rI   	<genexpr>  s     z!Babel.__call__.<locals>.<genexpr>z#\AtBeginDocument{\shorthandoff{%s}}r~   z)\deactivatetilden % restore ~ in Galicianrz   z\makeatletterz+  \addto\extrasestonian{\bbl@deactivate{~}}z\makeatotherr{   z)  \addto\extrasbasque{\bbl@deactivate{~}}r}   zE% Prevent side-effects if French hyphenation patterns are not loaded:z\frenchbsetup{StandardLayout}z4\AtBeginDocument{\selectlanguage{%s}\noextrasfrench}rd   )sortedr   keysr0   r   rf   setupextend)rG   r   Z
shorthandscrH   rF   rI   __call__  sB    zBabel.__call__c              	   C   sV   t |D ]*}z| j| W   S  tk
r2   Y q
X q
| jdk	rR| j| j|  dS )z,Return TeX language name for `language_code`Nr$   )r	   Znormalize_language_taglanguage_codesKeyErrorr   warningwarn_msg)rG   r   tagrH   rH   rI   r     s    
zBabel.language_namec                 C   s   | j S rB   )r   rF   rH   rH   rI   get_language  s    zBabel.get_language)N)rh   ri   rj   __doc__r   itemsr   r   rC   r   r   r   rH   rH   rH   rI   ro   (  s   M
!ro   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   rF   rH   rH   rI   
sortedkeys  s    zSortableDict.sortedkeysc                    s    fdd   D S )z$Return list of values sorted by keysc                    s   g | ]} | qS rH   rH   )r   keyrF   rH   rI   
<listcomp>  s     z-SortableDict.sortedvalues.<locals>.<listcomp>)r   rF   rH   rF   rI   sortedvalues  s    zSortableDict.sortedvaluesN)rh   ri   rj   r   r   r   rH   rH   rH   rI   r     s   r   c                   @   s   e Zd ZdZdS )PreambleCmdsz'Building blocks for the latex preamble.N)rh   ri   rj   r   rH   rH   rH   rI   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 q*|| qd| S )Nr$   )nextstripr0   rf   rstrip)fpblocklinerH   rH   rI   _read_blockJ  s    
r   docutils.styrN   rO   z% 
z:::)colorfloattabletextcompc                J   @   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ddddd d!d d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0Zdd1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEZdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_dUd`dadbdUd`dcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdDdydzd{d|d}d~dddddddddddddIZ	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\-z\enskipz\quadz\,z\hspace{0pt}z\hbox{-}z\AAz\ensuremath{\Leftrightarrow}z\ensuremath{\neq}z\ensuremath{\equiv}z\ensuremath{\le}z\ensuremath{\ge}z\ensuremath{\spadesuit}z\ensuremath{\clubsuit}ffr   flffiffl)i    i   i   i   i   i   i/   i   i+!  i!  i`"  ia"  id"  ie"  i`&  ic&  i   i  i  i  i  z\guillemotleft{}z\guillemotright{}z\textcompwordmark{}z\textendash{}z\textemdash{}z\textquoteleft{}z\textquoteright{}z\quotesinglbase{}z\textquotedblleft{}z\textquotedblright{}z\quotedblbase{}z\textperthousand{}z\textpertenthousand{}z\guilsinglleft{}z\guilsinglright{}z\textvisiblespace{}z\dag{}z\ddag{}z\dots{}z\texttrademark{})         i   i   i   i   i   i   i   i   i   i0   i1   i9   i:   i#$  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{}z\textflorin{}z\textacutedbl{}z\textbardbl{}z\textbullet{}z\textasciigrave{}z\textgravedbl{}z\textreferencemark{}z\textinterrobang{}z\textfractionsolidus{}z\textlquill{}z\textrquill{}z\textdiscount{}z\textcolonmonetary{}z\textfrenchfranc{}z\textlira{}z\textnaira{}z
\textwon{}z\textdong{}z\texteuro{}z\textpeso{}z\textguarani{}z\textcelsius{}z\textnumero{}z\textcircledP{}z\textrecipe{}z\textservicemark{}z
\textohm{}z
\textmho{}z\textestimated{}z\textleftarrow{}z\textuparrow{}z\textrightarrow{}z\textdownarrow{}z\textminus{}z\textasteriskcentered{}z\textsurd{}z\textblank{}z\textopenbullet{}z\textbigcircle{}z\textmusicalnote{}z\textmarried{}z\textdivorced{}z\textlangle{}z\textrangle{})I                                                                           i  i  i  i   i"   i2   i3   i5   i6   i;   i=   iD   iE   iF   iR   i   i   i   i   i   i   i   i   i   i!  i!  i!  i!  i !  r
  i&!  i'!  i.!  i!  i!  i!  i!  i"  i"  i"  i"$  i%  i%  ij&  i&  i&  i'  i'  z
\ding{170}z
\ding{169}z	\ding{51}z	\ding{55})ie&  if&  i'  i'  N)rh   ri   rj   r   ordallttspecialunsupported_unicodeutf8_supported_unicoder   pifontrH   rH   rH   rI   r   g  s4                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   sL   || _ || _dddddg| _| j dkr4| jdd | jrH| jdd	 d S )
NsectionZ
subsectionZsubsubsection	paragraphZsubparagraph)bookmemoirreportZscrbookZscrreprtr   chapterrb   )document_classZ
_with_partsectionsinsert)rG   r1  Z	with_partrH   rH   rI   rC     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.
           ZDUtitle)lenr2  )rG   levelrH   rH   rI   r+  $  s    zDocumentClass.sectionc                 C   s<   t |t| j}d| jkr"|d8 }| jd dkr8|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.
        r0  r4  r   rb   )minr5  r2  )rG   depthrH   rH   rI   latex_section_depth/  s    
z!DocumentClass.latex_section_depthN)F)rh   ri   rj   r   rC   r+  r9  rH   rH   rH   rI   r*    s   
r*  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_typer3   close
_colwidths_rowspan	_in_thead)rG   Z
translator
latex_typerH   rH   rI   rC   K  s    zTable.__init__c                 C   s"   d| _ g | _g | _i | _d| _d S )NTF)_open
_col_specscaption_attrsZ_in_headrF   rH   rH   rI   openU  s
    z
Table.openc                 C   s(   d| _ d | _g | _i | _g | _d| _d S NF)rB  rC  rD  rE  stubscolwidths_autorF   rH   rH   rI   r=  \  s    zTable.closec                 C   s   | j S rB   )rB  rF   rH   rH   rI   is_opend  s    zTable.is_openc                 C   sx   |j | _ d|kr | d|d  dd dg|j |d  D }|d | _d|d ks^d|jkopd|d kopd	|k| _d S )
Nalignc                 S   s    g | ]}|d kr| ddqS ))r   r   r   r   r   r   replacer   clsrH   rH   rI   r   m  s   z)Table.set_table_style.<locals>.<listcomp>r   classesr   r   colwidths-givenwidth)r3   settable_stylebordersrI  )rG   noderV   rU  rH   rH   rI   set_table_styleg  s$    

zTable.set_table_stylec                 C   s   | j dkr| jsdS | j S )N	longtable
longtable*)r<  rD  rF   rH   rH   rI   get_latex_typex  s    zTable.get_latex_typec                 C   s   || j |< d S rB   rE  )rG   attrvaluerH   rH   rI   rS  ~  s    z	Table.setc                 C   s   || j kr| j | S d S rB   r[  )rG   r\  rH   rH   rI   r     s    

z	Table.getc                 C   s   | j dkrdS dS )Nr   |r$   )rU  rF   rH   rH   rI   get_vertical_bar  s    
zTable.get_vertical_bar
\linewidthc                 C   s   ddddd}| |  d}|  }|rH|dkrHd|f d	|f g}nd
||f g}| js| jdkr| js|dd|t| jd f  n|dd|  d|S )Nz[l]z[c]z[r]r$   )leftcenterrightNrK  rX  rY  z"\noindent\makebox[\linewidth]%s{%%z
\begin{%s}z\begin{%s}%sr   r   z?\setlength{\DUtablewidth}{\dimexpr%s-%i\arrayrulewidth\relax}%%r4  z\setlength{\DUtablewidth}{%s}%%rd   )	r   rZ  rI  rU  r3   r3  r5  rC  rf   )rG   rR  Z	align_maprK  rA  ZopeningrH   rH   rI   get_opening  s&    zTable.get_openingc                 C   sT   g }| j dkr|d |d|    | drJ|  dkrJ|d d|S )Nr   z\bottomrule\end{%s}rK  rd  r   rd   )rU  r0   rZ  r   rf   )rG   closingrH   rH   rI   get_closing  s    




zTable.get_closingc                 C   s$   | j | | j|jd d S )NZstub)rC  r0   rH  
attributesr   rG   rV  rH   rH   rI   visit_colspec  s    zTable.visit_colspecc                    s(  |   }dgt| j | _| jr8g | _dgt| j }n| jrddtdd | jD krn 9 fdd| jD | _d	d | jD }n~d
d|jjd krd nd  fdd| jD | _t| jdksd|jjj	krfdd| jD | _dd | jD }||
| | S )z3Return column specification for longtable.
        r   lP   g(\?c                 s   s   | ]}|d  d V  qdS )colwidthr4  NrH   r   rV  rH   rH   rI   r     s     z%Table.get_colspecs.<locals>.<genexpr>c                    s$   g | ]} |d  d   d qS )rn  r4  g{Gzt?rH   ro  )factorrR  rH   rI   r     s   z&Table.get_colspecs.<locals>.<listcomp>c                 S   s   g | ]}d | qS )zp{%.3f\DUtablewidth}rH   r   rn  rH   rH   rI   r     s   (   rQ  rP  r4  c                    s   g | ]}|d     qS )rn  rH   ro  )	allowancenorm_lengthrH   rI   r     s   rR  c                    s   g | ]}|  qS rH   rH   rq  )total_widthrH   rI   r     s   c                 S   s   g | ]}d | qS )p{\DUcolumnwidth{%.3f}}rH   rq  rH   rH   rI   r     s   )r_  r5  rC  r?  rI  r>  r3   sumparentri  rf   )rG   rV  barZlatex_colspecsrH   )rs  rp  rt  ru  rR  rI   get_colspecs  sB    

zTable.get_colspecsc                 C   sF   z*| j rd| j| j  W S d| j| j  W S  tk
r@   Y dS X dS )z4Return columnwidth for current cell (not multicell).z%.2f\DUtablewidthz\DUcolumnwidth{%.2f}*N)r3   r>  _cell_in_row
IndexErrorrF   rH   rH   rI   get_column_width  s    zTable.get_column_widthc                    sR   z6t  fddt|D } jr.d| W S d| W S  tk
rL   Y dS X dS )z)Return sum of columnwidths for multicell.c                 3   s   | ]} j |  V  qd S rB   )r>  )r   corG   startrH   rI   r     s   z.Table.get_multicolumn_width.<locals>.<genexpr>zp{%.2f\DUtablewidth}rv  rl  N)rw  ranger3   r}  )rG   r  Zlen_Zmulticol_widthrH   r  rI   get_multicolumn_width  s    

zTable.get_multicolumn_widthc                 C   s4   | j s
dS d| j }d| j kr,d| S d| S )Nr$   r4  z\caption{%s}\\
z!\caption[]{%s (... continued)}\\
)rD  rf   r;  thead_depth)rG   rD  rH   rH   rI   get_caption  s    zTable.get_captionc                 C   s   | j dkrd| j kS dS )NrX  r4  r   )r<  r;  r  rF   rH   rH   rI   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 )Nr4  r   \hline
r   z	\toprule
)r@  rU  rF   rH   rH   rI   visit_thead   s    

zTable.visit_theadc                 C   s   g }| j dkr|d | jdkrd| j kr<|d njt| j}|d tdd | jD }|d	ksz|d
kr| js|d|| 	d|f d d  |d |  j
d8  _
|S )Nr   z	\midrule
rX  r4  z\endfirsthead
z	\endhead
c                 s   s   | ]}|d  d V  qdS )rn     NrH   ro  rH   rH   rI   r     s     z%Table.depart_thead.<locals>.<genexpr>      z\multicolumn{%d}{%s}r   z,{\raggedleft\ldots continued on next page}\\rd   z\endfoot
\endlastfoot
)rU  r0   r<  r;  r  r5  rC  rw  rI  r  r@  )rG   aZn_cZtwidthrH   rH   rI   depart_thead  s(    





zTable.depart_theadc                 C   s
   d| _ d S Nr   r|  rF   rH   rH   rI   	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r҇ fddtt jD }t|t jkr|d nNd}|  z| }W n tk
r   Y qY nX |d	||f 7 }q|| |S )
N \\
r   r4  r   c                    s"   g | ]} j | d kr|d qS )r   r4  )r?  )r   irF   rH   rI   r   +  s    z$Table.depart_row.<locals>.<listcomp>r  r$   z\cline{%d-%d}
)	r|  r  r5  r?  rU  r0   reversepopr}  )rG   resr  ZrowspansZclineZc_startrH   rF   rI   
depart_row#  s$    


zTable.depart_rowc                 C   s(   z|| j |< W n tk
r"   Y nX d S rB   r?  r}  )rG   cellr]  rH   rH   rI   set_rowspan<  s    zTable.set_rowspanc                 C   s(   z| j | W S  tk
r"   Y dS X d S r  r  )rG   r  rH   rH   rI   get_rowspanB  s    zTable.get_rowspanc                 C   s   | j S rB   r  rF   rH   rH   rI   get_entry_numberH  s    zTable.get_entry_numberc                 C   s   |  j d7  _ d S Nr4  r  rF   rH   rH   rI   visit_entryK  s    zTable.visit_entryc                 C   s    t | j| jkr| j| j S dS rG  )r5  rH  r|  rF   rH   rH   rI   is_stub_columnN  s    zTable.is_stub_columnN)r`  )rh   ri   rj   r   rC   rF  r=  rJ  rW  rZ  rS  r   r_  re  rh  rk  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  rH   rH   rH   rI   r:  ?  s6   

-	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 (  rD   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.
    Fr/   r   c           	         s  t  |  jjj _ jjj _|j  _}|jd krV|j	sVd|_t
jdtdd |jd krvd|_t
jdtdd |jd k	rt
jdtdd  |j _|j _|j _|j _|j _|j _|j _t|dd	 _|j _|jd
d _d	 _d	 _|jr$td|j\} _ _}n|jr2d _|j	r@d _|j	 _ t!"|j#|j _$||j#|j _% j$j&d  _'|j(g} j%j)dkr|* j%j) d+t,d | _(t-|j.|j/ _0|j1d	krd _2nd|j1  _2|j3 _3d j(|j.f g _4t5  _6d j6d< |j7g _7t5  _8g  _9g  _:g  _;g  _<g  _=g  _>g  _?g  _@g  _Ag  _Bg  _Cg  _Dg  _Eg  _Fg  _Gg  _H|j#dkr jH*d|j#  dg _Ig  _Jd _Kg  _Lg  _MtN d _O jA _Pg  _Q jdkrd j  j6d<  jRsX jrd j  j6d<  jdD ]8}|S }|dkr@d j6d < n|d!krd" j6d#< q|j.Td$d%kr j(Td&d%ks j(Td'd%krd( j6d)< tUV|}d*|k _W jWr|Xd* |jYrd _Wn
d+ j8d,<  fd-d.|D  _Z jd/kr d	 _[nd0 j d1 j  _[|j[r2  j[d|j[ 7  _[|j\rBd2t]_^nZ|j_}|d k	rdd3 j0`| t]_^ta|d4r|jbd5krd6 j0jcd |jbd5 f  j6d4< d S )7NFzXThe default for the setting "use_latex_citations" will change to "True" in Docutils 1.0.   
stacklevelTz[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$   r   r   z	(\w+)(.*)verbatimr   )rw   r$   r   z\usepackage{graphicx}z\usepackage[%s]{graphicx}z\documentclass[%s]{%s}z\usepackage{ifthen}Z__staticr   z  pdflang={%s},rX  )asciiunicodeutf8z\usepackage[%s]{inputenc}	_inputencz\usepackage[%s]{fontenc}Z_fontencOT1z+\DeclareTextSymbol{\textquotedbl}{OT1}{`\"}Z_textquotedblOT1)r1   ZT2AZT2BZT2CZT4ZT5z,\DeclareTextSymbolDefault{\textquotedbl}{T1}Z_textquotedblZscrr   ZDIVZBCORz\usepackage{typearea}Ztypeareadocutilsz!\usepackage{docutils}[2020/08/28]r   c                    s   g | ]}  |qS rH   )stylesheet_call)r   pathrF   rH   rI   r   ;  s   z,LaTeXTranslator.__init__.<locals>.<listcomp>)0falseFalser$   zcolorlinks=true,linkcolor=z
,urlcolor=z\setcounter{secnumdepth}{0}z\setcounter{secnumdepth}{%d}sectnum_startr4  z\setcounter{%s}{%d})drJ   rC   rQ   r   r   warnerrorrV   r   Z
use_bibtexwarningsFutureWarningr3   Zuse_verbatim_when_possibleto_latex_encodingZoutput_encodinglatex_encodingr)   r*   Zreference_label_reference_labelZhyperlink_colorr-   rU   r  r.   section_enumerator_separatorrM  literal_block_envliteral_block_optionsresplitbibtexr   r   r   language_modulebabelZauthor_separatorsauthor_separatorZdocumentoptionsr   r0   rf   filterr*  documentclassZuse_part_sectiond_classZgraphicx_optiongraphicx_packagedocutils_footnotesr5   r   r6   r7   r8   r9   r;   r<   r:   r=   r>   r?   r@   rA   contexttitle_labelssubtitle_labelsauthor_stackdate	pdfauthorpdfinfo_section_number_enumeration_countersZ_max_enumeration_counters	_bibitemstable_stackr:  active_tableout	out_stackis_xetexr   findr	   Zget_stylesheet_listfallback_stylesheetremover2   r&   hyperref_optionsZsectnum_xformr   secnumdepthr4   r9  hasattrr  r2  )	rG   rQ   Zbabel_classrV   r#   Z	d_optionsencZstylesheet_listr  rL   rF   rI   rC     s6    
 
 













zLaTeXTranslator.__init__c              
   C   s
  t |}|jdk}| jjr|r(|d}z|jdd}W nV tk
r } z8d| dd}| jj	
| d|d	d
  W Y S d}~X Y nX | jj|  |rd| d}d|  d	| S |r|j|j }d}nd}| jj r|t| jj| S ||  S )z8Return code to reference or embed stylesheet file `path`).styr$   r  rN   rO   zCannot embed stylesheet:
 \\/z% rd   
% Nz\makeatletter
z
\makeatotherz% embedded stylesheet: z\usepackage{%s}z
\input{%s})r   suffixrV   r'   with_suffixrZ   OSErrorrM  rQ   r   r  Zrecord_dependenciesaddas_posixrx  stemr%   r	   relative_pathZ_destination)rG   r  
is_packagecontenterrmsgcmdrH   rH   rI   r  m  s,    

&
zLaTeXTranslator.stylesheet_callc                 C   s\   ddddddddd	d
ddddd}|  }|dd }||krH|| 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latin4Ziso88595latin5latin9Z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-1251r  r  zwindows-1250zwindows-1252zus-asciir   r   r   r$   r/   )r   r  rM  )rG   Zdocutils_encodingr   rP   rH   rH   rI   r    s(    z!LaTeXTranslator.to_latex_encodingc                 C   s   | j j| S rB   )r  labels)rG   Zdocutil_labelrH   rH   rI   language_label  s    zLaTeXTranslator.language_labelc           
      C   sL  | j r
|S tj }| js&|tj | jr<| js<|td= | jdkr| j	s| j
rxd|td< | j| jd< d|td< n$d|td< d	|td
< d|td< | jrd|td< d| jj |td< | j	s| jds|tj |tj |tj |tj |D ]}t|}|tjkr8| js8tj| jd< nP|tjkrPd| jd< n8| jdkr
|tjkr
d|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
rH| jsH|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.
        r   )r  r$   z\underline{~}graphicxz\reflectbox{/}r   z
\textbar{}r^  z\textless{}<z\textgreater{}>r    	r  r   z\usepackage{pifont}r)  z"\DeclareUnicodeCharacter{%04X}{%s}r  r/   z,`'"<>r  z{}rd   Nr   \\
z  z ~) r  r   r%  copyupdater&  inside_citation_reference_labelr$  r  r  literalr  r6   insert_non_breaking_blanksrV   Z	tab_widthr  
startswithr'  r(  r   r)  r  r   strrc   rM  insert_newliner  	enumeratelstriprf   )
rG   textr   chcpZseparate_charscharrg   r  r   rH   rH   rI   encode  sj    





zLaTeXTranslator.encodez[
	]c                 C   s   |  |d|S )z1Cleanse, encode, and return attribute value text.r  )r  sub)rG   r	  
whitespacerH   rH   rI   attval  s    zLaTeXTranslator.attvalc                 C   s   t |jtjS )z@Check whether a node represents an inline or block-level element)
isinstancerx  r   ZTextElementrj  rH   rH   rI   	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}{}}NrH   r   r   rH   rH   rI   r   $  s   z6LaTeXTranslator.append_hypertargets.<locals>.<genexpr>idsN)r  r0   rf   rj  rH   rH   rI   append_hypertargets   s    z#LaTeXTranslator.append_hypertargetsTc                    sL   |rdnd  fdd|d D }|r6|r6| dd |rH|rH|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}rH   r  prefixrH   rI   r   0  s     z1LaTeXTranslator.ids_to_labels.<locals>.<listcomp>r  r   z\phantomsectionrd   )r3  r0   )rG   rV  
set_anchorprotectnewliner  rH   r  rI   ids_to_labels'  s    
zLaTeXTranslator.ids_to_labelsc                 C   sD   dd |d D }|r@|d  dd|d< dd |d D |d< d	S )
z8Convert ``align-*`` class arguments into alignment args.c                 S   s   g | ]}| d r|qS align-r  rN  rH   rH   rI   r   :  s     
 z:LaTeXTranslator.set_align_from_classes.<locals>.<listcomp>rP  r   r  r$   rK  c                 S   s   g | ]}| d s|qS r  r  rN  rH   rH   rI   r   =  s    
NrL  )rG   rV  rK  rH   rH   rI   set_align_from_classes7  s    z&LaTeXTranslator.set_align_from_classesNc                 C   sP   | d|}|dkr"| jd n*|dkr8| jd n|dkrL| jd d S )NrK  ra  z\raggedright
rb  z\centering
rc  z\raggedleft
)r   r  r0   )rG   rV  r   rK  rH   rH   rI   insert_align_declaration@  s    z(LaTeXTranslator.insert_align_declarationc                 C   s   t |jtjs| jd |d D ]}|drf| j|dd }|rd| jj	|< | jd|  q"t |tj
r|tjdg krq"| jstj| jd	< | jd
|  q"dS )z6Open a group and insert declarations for class values.rd   rP  	language-	   NTz\begin{selectlanguage}{%s}
rQ  DUclassz\begin{DUclass}{%s}
)r  rx  r   compoundr  r0   r  r  r   r   r   r   rm   r  r   duclassr8   rG   rV  rO  r   rH   rH   rI   duclass_openI  s    
zLaTeXTranslator.duclass_openc                 C   s   t |d D ]p}|dr@| j|dd }|r|| jd qt|tjr^|t	j
dg kr^q| jsptj| jd< | jd qdS )	z$Close a group of class declarations.rP  r"  r#  Nz\end{selectlanguage}
rQ  r$  \end{DUclass}
)reversedr  r  r   r  r0   r  r   r   r   rm   r  r   r&  r8   r'  rH   rH   rI   duclass_close[  s    
zLaTeXTranslator.duclass_closec                 C   s   | j | j || _d S rB   )r  r0   r  )rG   Znew_outrH   rH   rI   push_output_collectorj  s    z%LaTeXTranslator.push_output_collectorc                 C   s   | j  | _d S rB   )r  r  r  rF   rH   rH   rI   pop_output_collectorn  s    z$LaTeXTranslator.pop_output_collectorc                 C   sn   |D ]}t |tjtjtjfs q(qdS t |tjtjfrD| |S t |tjrTdS t |tj	tj
fsjd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   Z	Invisiblefootnotecitation	containerr%  term_postfiximager,  Z
math_block)rG   rV  childrH   rH   rI   r2  q  s    	
zLaTeXTranslator.term_postfixc                 C   s   | j | |  d S rB   )r  r0   r  astextrj  rH   rH   rI   
visit_Text  s    zLaTeXTranslator.visit_Textc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_Text  s    zLaTeXTranslator.depart_Textc                 C   s   |d  dd | | d S )NrP  r   Zabbreviationr3  visit_inlinerj  rH   rH   rI   visit_abbreviation  s    z"LaTeXTranslator.visit_abbreviationc                 C   s   |  | d S rB   depart_inlinerj  rH   rH   rI   depart_abbreviation  s    z#LaTeXTranslator.depart_abbreviationc                 C   s   |d  dd | | d S )NrP  r   Zacronymr8  rj  rH   rH   rI   visit_acronym  s    zLaTeXTranslator.visit_acronymc                 C   s   |  | d S rB   r;  rj  rH   rH   rI   depart_acronym  s    zLaTeXTranslator.depart_acronymc                 C   s   |  |d d S )Naddressvisit_docinfo_itemrj  rH   rH   rI   visit_address  s    zLaTeXTranslator.visit_addressc                 C   s   |  | d S rB   depart_docinfo_itemrj  rH   rH   rI   depart_address  s    zLaTeXTranslator.depart_addressc                 C   s   dd |d D |d< | j jr`tj| jd< d|d krBtj| jd< | jdd|d   d S | j	srtj
| jd< d|d kr| j	stj| jd< | | | jd d S )	Nc                 S   s   g | ]}|d kr|qS )
admonitionrH   rN  rH   rH   rI   r     s    z4LaTeXTranslator.visit_admonition.<locals>.<listcomp>rP  rG  r  z
\DUadmonition[%s]{r   z\begin{DUadmonition})rV   r2   r   admonition_legacyr8   error_legacyr  r0   rf   r  rG  r  r(  rj  rH   rH   rI   visit_admonition  s    
z LaTeXTranslator.visit_admonitionc                 C   s2   | j jr| jd d S | jd | | d S )N}
z\end{DUadmonition}
)rV   r2   r  r0   r+  rj  rH   rH   rI   depart_admonition  s
    z!LaTeXTranslator.depart_admonitionc                 C   s&   | j | |  | |d d S )Nauthor)r  r0   r  r5  rB  rj  rH   rH   rI   visit_author  s    zLaTeXTranslator.visit_authorc                 C   s   |  | d S rB   rD  rj  rH   rH   rI   depart_author  s    zLaTeXTranslator.depart_authorc                 C   s   d S rB   rH   rj  rH   rH   rI   visit_authors  s    zLaTeXTranslator.visit_authorsc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_authors  s    zLaTeXTranslator.depart_authorsc                 C   s   |  | | jd d S )Nz\begin{quote}r(  r  r0   rj  rH   rH   rI   visit_block_quote  s    
z!LaTeXTranslator.visit_block_quotec                 C   s   | j d | | d S )Nz\end{quote}
r  r0   r+  rj  rH   rH   rI   depart_block_quote  s    z"LaTeXTranslator.depart_block_quotec                 C   s   |  | | jd d S )Nz\begin{itemize}rR  rj  rH   rH   rI   visit_bullet_list  s    
z!LaTeXTranslator.visit_bullet_listc                 C   s   | j d | | d S )Nz\end{itemize}
rT  rj  rH   rH   rI   depart_bullet_list  s    z"LaTeXTranslator.depart_bullet_listc                 C   s   | j d | | d S )N\textsuperscript{r  r0   r9  rj  rH   rH   rI   visit_superscript  s    z!LaTeXTranslator.visit_superscriptc                 C   s   |  | | jd d S Nr   r<  r  r0   rj  rH   rH   rI   depart_superscript  s    
z"LaTeXTranslator.depart_superscriptc                 C   s   | j d | | d S )Nz\textsubscript{rY  rj  rH   rH   rI   visit_subscript  s    zLaTeXTranslator.visit_subscriptc                 C   s   |  | | jd d S r[  r\  rj  rH   rH   rI   depart_subscript  s    
z LaTeXTranslator.depart_subscriptc                 C   s   | j d d S )Nz

\caption{r  r0   rj  rH   rH   rI   visit_caption  s    zLaTeXTranslator.visit_captionc                 C   s   | j d d S NrK  r`  rj  rH   rH   rI   depart_caption  s    zLaTeXTranslator.depart_captionc                 C   s,   | j stj| jd< | jd | | d S )Ntitlereferencez\DUroletitlereference{)r  r   rd  r8   r  r0   r9  rj  rH   rH   rI   visit_title_reference  s    z%LaTeXTranslator.visit_title_referencec                 C   s   |  | | jd d S r[  r\  rj  rH   rH   rI   depart_title_reference  s    
z&LaTeXTranslator.depart_title_referencec                 C   s,   | j r| g  n| jd | | d S )Nz\begin{figure}[b])r   r,  r  r0   r  rj  rH   rH   rI   visit_citation  s    zLaTeXTranslator.visit_citationc                 C   sN   | j r>| jd }d| jdd  }| j||g |   n| jd d S )Nr   r$   r4  \end{figure}
)r   r  rf   r  r0   r-  )rG   rV  labelr	  rH   rH   rI   depart_citation  s    

zLaTeXTranslator.depart_citationc                 C   s   | j r| j| g | jrX| js8| jd d| _q| jd dksNtd| jd= n>d}d|krn|d }nd|kr| jj	|d  }| jd	|  d S )
Nz\cite{r4  r   r  rd   z2unexpected non-whitespace while in reference labelr$   refidrefname\hyperlink{%s}{[)
r  r  r0   r5  r   r  r  AssertionErrorrQ   nameids)rG   rV  hrefrH   rH   rI   visit_citation_reference  s     

z(LaTeXTranslator.visit_citation_referencec                 C   s   | j rtd}|jddd}t|tjrN| dkrN|jddd}t|tjrNd}|r`| jd q| jd d| _	n| jd d S )NFTZdescendZsiblingsrk  r   r   ]})
r   	next_noder  r   Textr5  Zcitation_referencer  r0   r  )rG   rV  Zfollowup_citationZsiblingZsibling2rH   rH   rI   depart_citation_reference   s    
z)LaTeXTranslator.depart_citation_referencec                 C   s   | j d d S )Nz	(\textbf{r`  rj  rH   rH   rI   visit_classifier3  s    z LaTeXTranslator.visit_classifierc                 C   s   | j d d S )Nz})r`  rj  rH   rH   rI   depart_classifier6  s    z!LaTeXTranslator.depart_classifierc                 C   s   | j | d S rB   )r  rk  rj  rH   rH   rI   rk  9  s    zLaTeXTranslator.visit_colspecc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_colspec<  s    zLaTeXTranslator.depart_colspecc                 C   s@   t |jtjs| jd | jd| dd  tjd S )Nrd   z%% %s
r  )	r  rx  r   r%  r  r0   r5  rM  SkipNoderj  rH   rH   rI   visit_comment?  s    zLaTeXTranslator.visit_commentc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_commentF  s    zLaTeXTranslator.depart_commentc                 C   s8   t |jtjr| jd |d dd | | d S )Nrd   rP  r   r%  )r  rx  r   r%  r  r0   r3  r(  rj  rH   rH   rI   visit_compoundI  s    zLaTeXTranslator.visit_compoundc                 C   s   |  | d S rB   r+  rj  rH   rH   rI   depart_compoundO  s    zLaTeXTranslator.depart_compoundc                 C   s   |  |d d S )NcontactrA  rj  rH   rH   rI   visit_contactR  s    zLaTeXTranslator.visit_contactc                 C   s   |  | d S rB   rD  rj  rH   rH   rI   depart_contactU  s    zLaTeXTranslator.depart_contactc                 C   s   |  | d S rB   )r(  rj  rH   rH   rI   visit_containerX  s    zLaTeXTranslator.visit_containerc                 C   s   |  | d S rB   r  rj  rH   rH   rI   depart_container[  s    z LaTeXTranslator.depart_containerc                 C   s   |  |d d S )N	copyrightrA  rj  rH   rH   rI   visit_copyright^  s    zLaTeXTranslator.visit_copyrightc                 C   s   |  | d S rB   rD  rj  rH   rH   rI   depart_copyrighta  s    z LaTeXTranslator.depart_copyrightc                 C   s   |  |d d S )Nr  rA  rj  rH   rH   rI   
visit_dated  s    zLaTeXTranslator.visit_datec                 C   s   |  | d S rB   rD  rj  rH   rH   rI   depart_dateg  s    zLaTeXTranslator.depart_datec                 C   s   d S rB   rH   rj  rH   rH   rI   visit_decorationj  s    z LaTeXTranslator.visit_decorationc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_decorationn  s    z!LaTeXTranslator.depart_decorationc                 C   s   d S rB   rH   rj  rH   rH   rI   visit_definitionq  s    z LaTeXTranslator.visit_definitionc                 C   s   | j d d S Nrd   r`  rj  rH   rH   rI   depart_definitiont  s    z!LaTeXTranslator.depart_definitionc                 C   s   |  | | jd d S )Nz\begin{description}
rR  rj  rH   rH   rI   visit_definition_listw  s    
z%LaTeXTranslator.visit_definition_listc                 C   s   | j d | | d S )Nz\end{description}
rT  rj  rH   rH   rI   depart_definition_list{  s    z&LaTeXTranslator.depart_definition_listc                 C   s   d S rB   rH   rj  rH   rH   rI   visit_definition_list_item  s    z*LaTeXTranslator.visit_definition_list_itemc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_definition_list_item  s    z+LaTeXTranslator.depart_definition_list_itemc                 C   s   | j d d S )Nr  r`  rj  rH   rH   rI   visit_description  s    z!LaTeXTranslator.visit_descriptionc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_description  s    z"LaTeXTranslator.depart_descriptionc                 C   s   |  | j d S rB   )r,  r>   rj  rH   rH   rI   visit_docinfo  s    zLaTeXTranslator.visit_docinfoc                 C   sT   |    | jrPd| jd< | js6tj| jd< tj| jd< | jdd | jd d S )Nz\usepackage{tabularx}Ztabularx_providelengthr>   r   z@
% Docinfo
\begin{center}
\begin{tabularx}{\DUdocinfowidth}{lX}
z\end{tabularx}
\end{center}
)	r-  r>   r6   r  r   providelengthr8   r3  r0   rj  rH   rH   rI   depart_docinfo  s    
zLaTeXTranslator.depart_docinfoc                 C   s   | j r|dkrr|dks| js(| jg  |dkrLd| _| | }d| _n| | }| jd | tjn$|dkr| j	| |  tj| j
d| |  |dkrd| _| j
d	 | jd
 n| jd d S )N)rM  organizationr  r@  rM  r@  TFr   r  z\textbf{%s}: &
	z{\raggedright
z } \\
r  )r*   r  r0   r  r  r5  r  r   r{  r  r  r  r  )rG   rV  namer	  rH   rH   rI   rB    s(    z"LaTeXTranslator.visit_docinfo_itemc                 C   s   | j | j  d| _d S rG  )r  r0   r  r  r  rj  rH   rH   rI   rE    s    z#LaTeXTranslator.depart_docinfo_itemc                 C   s   |  | d S rB   )visit_literal_blockrj  rH   rH   rI   visit_doctest_block  s    z#LaTeXTranslator.visit_doctest_blockc                 C   s   |  | d S rB   )depart_literal_blockrj  rH   rH   rI   depart_doctest_block  s    z$LaTeXTranslator.depart_doctest_blockc                 C   sH   | j st|rDt|d tjrD| jjdk}|  j| j|d|d7  _d S )Nr   r.  Fr  r  )	r*   r5  r  r   r;   rV   r  r  r  rG   rV  r  rH   rH   rI   visit_document  s    zLaTeXTranslator.visit_documentc                 C   s   | j js| j jdkr"|   | jd< | j | _| j | _| jtj	| j
  | jrr| j| j}| jd|  | jr|  jdg| j dg 7  _| js| jr| js| jr|   | jr|   d| jkr| js| jd d S )N)r$   rw   r  z  pdfauthor={%s}z\hypersetup{r   minitocz'
\faketableofcontents % for local ToCs
)r  r   r   r6   r   r8   r9   r0   r   linkingr  r  r  rf   r  r;   r*   r  r  
make_titler  append_bibliogaphyhas_latex_tocr  )rG   rV  ZauthorsrH   rH   rI   depart_document  s,    
zLaTeXTranslator.depart_documentc                 C   s   d | jg}| jr|| j7 }| jrB|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$   r  z\DUdocumentsubtitle{%s}z
\title{%s}%
  c                 S   s   g | ]}d  |qS )r  )rf   )r   Zauthor_entryrH   rH   rI   r     s   z.LaTeXTranslator.make_title.<locals>.<listcomp>z\author{%s}z \and
z	\date{%s}, z\maketitle
)
rf   r;   r  r<   r  r:   r0   r  r  r=   )rG   Z	title_argZ
author_argrH   rH   rI   r    s$    	
zLaTeXTranslator.make_titlec                 C   s   | j r>| jd| j d   | jdd| j dd    n| jrd}| jD ] }t|t|d k rN|d }qN| jd|  | jD ]2}|d dd	}| jd
|d ||d f  q| jd d S )Nz
\bibliographystyle{%s}
r   z\bibliography{%s}
r   r4  r$   z
\begin{thebibliography}{%s}
r   r   z\bibitem[%s]{%s}{%s}
z\end{thebibliography}
)r  r  r0   rf   r   r  r5  rM  )rG   Zwidest_labelZbibitemZcite_keyrH   rH   rI   r    s"    "


z"LaTeXTranslator.append_bibliogaphyc                 C   s   | j d | | d S )Nz\emph{rY  rj  rH   rH   rI   visit_emphasis  s    zLaTeXTranslator.visit_emphasisc                 C   s   |  | | jd d S r[  r\  rj  rH   rH   rI   depart_emphasis  s    
zLaTeXTranslator.depart_emphasisc                 C   s.   | j | j  r*| jd | j   q d S )N & )r  r  r  r  r0   r  rF   rH   rH   rI   (insert_additional_table_colum_delimiters%  s
    z8LaTeXTranslator.insert_additional_table_colum_delimitersc              	   C   s  | j  dkr|   n| jd d|kr<d|kr<tdd|krd| jd< |d d }| j | j  | | jd	|| j  f  | j	d
 n|d|kr| j  dkr| j 
 }nd}|d d }| jd||| j | j  || j 
 f  | j	d
 n| j	d t|rTt|jjtjs:| j  rT| jd | j	d
 n| j	d | j js| jd dr| r| jd | j   d S )Nr   r  ZmorerowsZmorecolszWCells that span multiple rows *and* columns currently not supported by the LaTeX writerz\usepackage{multirow}Zmultirowr4  z\multirow{%d}{%s}{r   r$   z\multicolumn{%d}{%s%s%s}{\textbf{r   r   r   )r  r  r  r  r0   NotImplementedErrorr6   r  r~  r  r_  r  r5  r  rx  r   Ztheadr  rI  endswithr5  r  )rG   rV  ZmrowsZbar1ZmcolsrH   rH   rI   r  +  s\    

 
 
zLaTeXTranslator.visit_entryc                 C   s0   | j | j  | j | j  |   d S rB   )r  r0   r  r  r  rj  rH   rH   rI   depart_entrye  s    zLaTeXTranslator.depart_entryc                 C   s   | j   d S rB   )r  r  rj  rH   rH   rI   r  k  s    zLaTeXTranslator.visit_rowc                 C   s   | j | j  d S rB   )r  r   r  r  rj  rH   rH   rI   r  n  s    zLaTeXTranslator.depart_rowc           
      C   s  ddddddd}dd	d
dg}d}| j rt| jr`| jr`| js`ddd | jd | j D | j }| jrt|| 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rd| jd||	f  n:d| | j|< | jd | jd|	  | jd|  d|kr| jd||d d f  d S )Nr$   rp   alphAlphromanZRoman)r$   rp   Z
loweralphaZ
upperalphaZ
lowerromanZ
upperroman)r$   rp   r(   )(r  ))r$   r  r(   )r$   r  r(   r(   c                 s   s   | ]}t |V  qd S rB   )r  )r   nrH   rH   rI   r     s     z8LaTeXTranslator.visit_enumerated_list.<locals>.<genexpr>r   r  enumtyper  r4  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})r-   r.   section_levelr  rf   r  r  r   r5  r  toRomanr   r0   r(  r  r8   )
rG   rV  typesZdefault_labelsr  r  r  Z
enum_levelZcounter_nameri  rH   rH   rI   visit_enumerated_listq  s\    	



z%LaTeXTranslator.visit_enumerated_listc                 C   s@   t | jdkr| jd n| jd | | | j  d S )Nr  z\end{enumerate}
z\end{list}
)r5  r  r  r0   r+  r  rj  rH   rH   rI   depart_enumerated_list  s
    
z&LaTeXTranslator.depart_enumerated_listc                 C   s   d S rB   rH   rj  rH   rH   rI   visit_field  s    zLaTeXTranslator.visit_fieldc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_field  s    zLaTeXTranslator.depart_fieldc                 C   s&   t |jjtjs"| j| | d S rB   )r  rx  r   r>   r  r0   r2  rj  rH   rH   rI   visit_field_body  s    z LaTeXTranslator.visit_field_bodyc                 C   s   | j | jkr| j d d S )Nr  r  r>   r0   rj  rH   rH   rI   depart_field_body  s    z!LaTeXTranslator.depart_field_bodyc                 C   s8   |  | | j| jk	r4| js(tj| jd< | jd d S )N	fieldlistz\begin{DUfieldlist})r(  r  r>   r  r   r  r8   r0   rj  rH   rH   rI   visit_field_list  s
    
z LaTeXTranslator.visit_field_listc                 C   s&   | j | jk	r| j d | | d S )Nz\end{DUfieldlist}
)r  r>   r0   r+  rj  rH   rH   rI   depart_field_list  s    z!LaTeXTranslator.depart_field_listc                 C   s*   | j | jkr| j d n| j d d S )Nr  z
\item[{r  rj  rH   rH   rI   visit_field_name  s    z LaTeXTranslator.visit_field_namec                 C   s*   | j | jkr| j d n| j d d S )Nz}: &z:}]r  rj  rH   rH   rI   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   rK  rb  z\begin{figure} %% align = "%s"
z\begin{figure}
Tr  )	r   r   r6   r(  ri  r   r  r0   r  )rG   rV  Z	alignmentrH   rH   rI   visit_figure  s    
zLaTeXTranslator.visit_figurec                 C   s   | j d | | d S )Nrh  rT  rj  rH   rH   rI   depart_figure  s    zLaTeXTranslator.depart_figurec                 C   s   |  g  | jd d S )Nz\newcommand{\DUfooter}{r,  r  r0   rj  rH   rH   rI   visit_footer  s    
zLaTeXTranslator.visit_footerc                 C   s*   | j d d| j | jd< |   d S )Nr   r$   z~footerr  r0   rf   r6   r-  rj  rH   rH   rI   depart_footer  s    zLaTeXTranslator.depart_footerc                 C   s   z|d d }W n  t k
r0   |d d }Y nX | jr| jsJtj| jd< |d  }| jjdkrjd| }| j	
d|d d || |f  |d |d kr|  j	| |7  _	t|d	krt|d	 tjr| j	
d
 d S )Nbackrefsr   r  	footnotesr   [%s]z%%
\DUfootnotetext{%s}{%s}{%s}{namesr4  r   )r}  r  r  r   r  r8   r5  rV   footnote_referencesr  r0   r  r  r5  r  r   r,  )rG   rV  ZbackrefnumrH   rH   rI   visit_footnote  s"    zLaTeXTranslator.visit_footnotec                 C   s   | j d d S rb  r`  rj  rH   rH   rI   depart_footnote	  s    zLaTeXTranslator.depart_footnotec                 C   s   d}d|kr|d }nd|kr.| j j|d  }| jj}|dkrf| | | jd|  | jd n:| jsxt	j
| jd< | jd|d	 d
 |f  | jd d S )Nr$   rl  rm  r   rn  rt  r  z\DUfootnotemark{%s}{%s}{r  r   r   )rQ   rp  rV   r  r  r  r0   r  r  r   r  r8   )rG   rV  rq  formatrH   rH   rI   visit_footnote_reference	  s     


z(LaTeXTranslator.visit_footnote_referencec                 C   s   | j | j  d S rB   r  r0   r  r  rj  rH   rH   rI   depart_footnote_reference!	  s    z)LaTeXTranslator.depart_footnote_referencec                 C   s>   t |jtjrtjn$t |jtjs(t| js:| j	| d S rB   )
r  rx  r   r/  r{  r0  ro  r   r  r0   )rG   rV  Zbracketr   rH   rH   rI   label_delim%	  s
    zLaTeXTranslator.label_delimc                 C   s   |  |dd dS )z9footnote or citation label: in brackets or as superscriptr   rX  Nr  rj  rH   rH   rI   visit_label-	  s    zLaTeXTranslator.visit_labelc                 C   s   |  |dd d S )Nr  r   r  rj  rH   rH   rI   depart_label1	  s    zLaTeXTranslator.depart_labelc                 C   s   d S rB   rH   rj  rH   rH   rI   visit_generated5	  s    zLaTeXTranslator.visit_generatedc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_generated8	  s    z LaTeXTranslator.depart_generatedc                 C   s   |  g  | jd d S )Nz\newcommand{\DUheader}{r  rj  rH   rH   rI   visit_header;	  s    
zLaTeXTranslator.visit_headerc                 C   s*   | j d d| j | jd< |   d S )Nr   r$   z~headerr  rj  rH   rH   rI   depart_header?	  s    zLaTeXTranslator.depart_headerc                 C   s   |dk	rt jdtdd td|}|s,|S | dd \}}|dkrRd| }nL|dkrld	t|d
  }n2| jr|dkr| jst	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%sbpr   z%.3f\linewidth      Y@Zpxr  z$
\DUprovidelength{\pdfpxdimen}{1bp}
z%s\pdfpxdimen)r  r  DeprecationWarningr  matchgroupsr   r  r  r   r  r8   )rG   Z
length_strZpxunitr  r]  unitrH   rH   rI   to_latex_lengthD	  s(     

zLaTeXTranslator.to_latex_lengthc           
      C   s  | j | jd< |j}t|d dd}d|krNt|jtjrDd|d< | 	| g }g }g }ddd	d
ddd}d|krz,||d  }|
|d  |
|d  W n tk
r   Y nX d|kr|
d| |d   d|kr|
d|d d   d|kr|
d| |d   | |sBt|jtjtjfsB|
d | |sht|jtjsh|
d |  | j| d}	|rdd| }	| j
d|	|f  | j| d S )Nr  urir   r  rK  rb  r$   r$   )z\raisebox{-0.5\height}{r   )z\raisebox{-\height}{r   )z!\noindent\makebox[\linewidth][c]{r   )z
\noindent{z\hfill})z\noindent{\hfillr   )bottommiddletoprb  ra  rc  r   r4  heightz	height=%sscalezscale=%fr  rR  zwidth=%srd   r$   r  r   z\includegraphics%s{%s})r  r6   ri  r   rM  r  rx  r   Zfigurer   r0   r   r  r  r%  r  r  r   rf   )
rG   rV  attrsZ	imagepathprepostZinclude_graphics_optionsZalign_codesZ
align_codeoptionsrH   rH   rI   visit_imagea	  sf    




zLaTeXTranslator.visit_imagec                 C   s   |  j | j|dd7  _ d S )NTr  )r  r  rj  rH   rH   rI   depart_image	  s    zLaTeXTranslator.depart_imagec                 C   st   |d D ]f}| drL| j|dd  }|rnd| jj|< | jd|  q| js^tj| j	d< | jd|  qd S )NrP  r"  r#  Tz\foreignlanguage{%s}{inlinez\DUrole{%s}{)
r  r  r   r   r  r0   r  r   r  r8   r'  rH   rH   rI   r9  	  s    
zLaTeXTranslator.visit_inlinec                 C   s   | j dt|d   d S )Nr   rP  )r  r0   r5  rj  rH   rH   rI   r<  	  s    zLaTeXTranslator.depart_inlinec                 C   s"   | j stj| jd< | jd d S )Nlegendz\begin{DUlegend})r  r   r  r8   r  r0   rj  rH   rH   rI   visit_legend	  s    zLaTeXTranslator.visit_legendc                 C   s   | j d d S )Nz\end{DUlegend}
r`  rj  rH   rH   rI   depart_legend	  s    zLaTeXTranslator.depart_legendc                 C   s   | j d d S )Nz\item[] r`  rj  rH   rH   rI   
visit_line	  s    zLaTeXTranslator.visit_linec                 C   s   | j d d S r  r`  rj  rH   rH   rI   depart_line	  s    zLaTeXTranslator.depart_linec                 C   sh   | j stj| jd< tj| jd< | | t|jtj	rD| j
d n | | | j
d | | d S )Nr  	lineblockz0\item[]
\begin{DUlineblock}{\DUlineblockindent}
z\begin{DUlineblock}{0em}
)r  r   r  r8   r  r   r  rx  r   Z
line_blockr  r0   r(  r!  rj  rH   rH   rI   visit_line_block	  s    

z LaTeXTranslator.visit_line_blockc                 C   s   | j d | | d S )Nz\end{DUlineblock}
rT  rj  rH   rH   rI   depart_line_block	  s    z!LaTeXTranslator.depart_line_blockc                 C   s   | j d d S )Nz
\item r`  rj  rH   rH   rI   visit_list_item	  s    zLaTeXTranslator.visit_list_itemc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_list_item	  s    z LaTeXTranslator.depart_list_itemc                 C   sV   d| _ d|d kr<| jjdkr<tj| jd< | js<tj| jd< | j	
d | | d S )NTcoderP  r#   r   z\texttt{)r  rV   syntax_highlightr   r   r6   r  highlight_rulesr8   r  r0   r9  rj  rH   rH   rI   visit_literal	  s    
zLaTeXTranslator.visit_literalc                 C   s    d| _ | | | jd d S )NFr   )r  r<  r  r0   rj  rH   rH   rI   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 verbatimr4  r   )r5  r  r   rv  rj  rH   rH   rI   is_plaintext	  s    zLaTeXTranslator.is_plaintextc           
      C   sD  ddddd}| j }| |}| j }|o2| jj}tjtjf}| jj	rX|tj
tjf7 }|oht|j| }|dkot|}	| | |  j| j|dd7  _|sd|d	 kr| jjd
krtj| jd< | jstj| jd< |r&|r&|s&tj| jd< | jdtdd | dD   | jd n2|sL|	sL| jd | jd n| jd |r|r|rp|	rz|| | jd< W n tk
r   Y nX d| _|r|	r| jd | jd|| j f  | jd|  n`|r|sd| _!d| jd< | jd | jd n*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})
lstlistingZlistingZVerbatimZverbatimtabr
  Tr  r  rP  r#   r   ttemz\begin{minipage}{%d\ttemwidth}
c                 s   s   | ]}t |V  qd S rB   )r5  )r   r   rH   rH   rI   r   
  s     z6LaTeXTranslator.visit_literal_block.<locals>.<genexpr>rd   z
\end{minipage}
z\begin{quote}
z
\end{quote}
Zliteral_blockz\lstset{xleftmargin=0pt}
z\begin{%s}%s
z	
\end{%s}z\usepackage{alltt}r%  z\begin{alltt}
z
\end{alltt}z\ttfamily\raggedright
r$   N)%r  r	  r  rJ  rI  r   r/  sidebarrV   r2   rG  Zsystem_messager  rx  r(  r  r  r  r   r   r6   r  r  r8   r  r0   maxr5  r  r  r   r  r  r%  r  r  r  )
rG   rV  packagesZliteral_envZ
_plaintextZ	_in_tableZ_autowidth_tableZ_no_env_nodesZ_use_envZ_use_listingsrH   rH   rI   r  	  sx    





z#LaTeXTranslator.visit_literal_blockc                 C   sP   d| _ d| _d| _d| _d| _| j| j  | j| j  | 	| d S rG  )
r  r  r  r  r%  r  r0   r  r  r+  rj  rH   rH   rI   r  C
  s    z$LaTeXTranslator.depart_literal_blockc                 C   st   |j d}|j d}|r |s$d S |dkrB| jd||f  n.|dkr\| jd|  n| jd||f  d S )Nr  r  )rM  Zcreatorkeywordssubjectr;   z  pdf%s={%s},Zproducerz  addtopdfproducer={%s},z  pdfinfo={%s={%s}},)ri  r   r  r0   )rG   rV  r  r  rH   rH   rI   
visit_metaM
  s    zLaTeXTranslator.visit_metac                 C   s   d S rB   rH   rj  rH   rH   rI   depart_meta\
  s    zLaTeXTranslator.depart_metar   c                 C   s   |  | d| jd< | tj}|dkrF| jr<ddg}qpddg}n*| j|ddd}d	| d
d|d| g}|	d| | j
| | | tjdS )z	math rolez\usepackage{amsmath}Zamsmathr   z\(z\)FTr  r  z%%
\begin{%s}
rd   r$   rf  r4  N)r9  r6   r5  rc   r   Zuni2tex_tabler%  r  rf   r3  r  r   r<  r   r{  )rG   rV  math_envZ	math_codewrapperr  rH   rH   rI   
visit_math_
  s"    




zLaTeXTranslator.visit_mathc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_mathu
  s    zLaTeXTranslator.depart_mathc                 C   s   t | }| j||d d S )N)r  )r   r5  r  )rG   rV  r  rH   rH   rI   visit_math_blockx
  s    z LaTeXTranslator.visit_math_blockc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_math_block|
  s    z!LaTeXTranslator.depart_math_blockc                 C   s   | j d r| jd d S )Nr   r  )r  r  r0   rj  rH   rH   rI   visit_option
  s    
zLaTeXTranslator.visit_optionc                 C   s   | j d  d7  < d S )Nr   r4  )r  rj  rH   rH   rI   depart_option
  s    zLaTeXTranslator.depart_optionc                 C   s   | j |dd dS )z@Append the delimiter between an option and its argument to body.	delimiterr  N)r  r0   r   rj  rH   rH   rI   visit_option_argument
  s    z%LaTeXTranslator.visit_option_argumentc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_option_argument
  s    z&LaTeXTranslator.depart_option_argumentc                 C   s   | j d | jd d S )Nz
\item[r   )r  r0   r  rj  rH   rH   rI   visit_option_group
  s    z"LaTeXTranslator.visit_option_groupc                 C   s   | j   | jd d S )Nz] )r  r  r  r0   rj  rH   rH   rI   depart_option_group
  s    
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})r  r   r  r8   r!  r(  r  r0   rj  rH   rH   rI   visit_option_list
  s
    
z!LaTeXTranslator.visit_option_listc                 C   s   | j d | | d S )Nz\end{DUoptionlist}
rT  rj  rH   rH   rI   depart_option_list
  s    z"LaTeXTranslator.depart_option_listc                 C   s   d S rB   rH   rj  rH   rH   rI   visit_option_list_item
  s    z&LaTeXTranslator.visit_option_list_itemc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_option_list_item
  s    z'LaTeXTranslator.depart_option_list_itemc                 C   s   d S rB   rH   rj  rH   rH   rI   visit_option_string
  s    z#LaTeXTranslator.visit_option_stringc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_option_string
  s    z$LaTeXTranslator.depart_option_stringc                 C   s   |  |d d S )Nr  rA  rj  rH   rH   rI   visit_organization
  s    z"LaTeXTranslator.visit_organizationc                 C   s   |  | d S rB   rD  rj  rH   rH   rI   depart_organization
  s    z#LaTeXTranslator.depart_organizationc                 C   s   |j |}|dkr2t|j tjtjtjtjfr2nt|dkrft|j tjrft|j |d  tjtjfsfn@| j	j
r|dkr| jd|d |dkr| jd n| jd |  j| j|dd7  _| | d S )Nr   r4  z:LaTeX merges paragraphs in tables with auto-sized columns!Z	base_noderd   Tr  )rx  indexr  r   Z	list_itemdescriptionr%  r1  r,  r  rI  r  r  r0   r  r9  )rG   rV  r+  rH   rH   rI   visit_paragraph
  s4     
zLaTeXTranslator.visit_paragraphc                 C   s"   |  | | jjs| jd d S r  )r<  r  rI  r  r0   rj  rH   rH   rI   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}rl  )r   r   r6   r  r0   r  rj  rH   rH   rI   visit_problematic
  s    
z!LaTeXTranslator.visit_problematicc                 C   s   | j d d S )Nz}}r`  rj  rH   rH   rI   depart_problematic
  s    z"LaTeXTranslator.depart_problematicc                 C   sR   d| dd krtj| |s>t|jtjs>| j	d | 
| d| _d S )Nr   r  r$   rd   T)r   r  r   r{  r  r  rx  r%  r  r0   r9  r  rj  rH   rH   rI   	visit_raw
  s    

zLaTeXTranslator.visit_rawc                 C   s*   d| _ | | | |s&| jd d S )NFrd   )r  r<  r  r  r0   rj  rH   rH   rI   
depart_raw
  s    

zLaTeXTranslator.depart_rawc                 C   sD   d}|D ]2}|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   r4  r   TrH   )rG   r\   r6  r
  rH   rH   rI   has_unbalanced_braces
  s    z%LaTeXTranslator.has_unbalanced_bracesc                 C   s   t ddt ddt ddi}d|krt|d |}|dd	ksN| |r\| d
|  |d | kr| jd|  t	j
| jd|  d S d|kr|d }n"d|kr| jj|d  }ntd| |s| jd | jd|  | jr| jd| j|ddf  t	j
d S )Nr   r   r   r   r   r  refuriz^^r   zYExternal link "%s" not supported by LaTeX.
 (Must not contain "^^" or unbalanced braces.)z\url{%s}z
\href{%s}{rl  rm  zUnknown reference.rd   z\hyperref[%s]{z\%s{%s}}r$   )r$  r  rc   r  r3  r  r5  r  r0   r   r{  rQ   rp  ro  r  r  rM  )rG   rV  Zspecial_charsrq  rH   rH   rI   visit_reference
  s@      

zLaTeXTranslator.visit_referencec                 C   s&   | j d | |s"| j d d S )Nr   rd   )r  r0   r  rj  rH   rH   rI   depart_reference  s    
z LaTeXTranslator.depart_referencec                 C   s   |  |d d S )NrevisionrA  rj  rH   rH   rI   visit_revision"  s    zLaTeXTranslator.visit_revisionc                 C   s   |  | d S rB   rD  rj  rH   rH   rI   depart_revision%  s    zLaTeXTranslator.depart_revisionc                 C   s"   | j stj| jd< | jd d S )Nrubricz
\DUrubric{)r  r   r:  r8   r  r0   rj  rH   rH   rI   visit_rubric(  s    zLaTeXTranslator.visit_rubricc                 C   s   | j d d S rb  r`  rj  rH   rH   rI   depart_rubric/  s    zLaTeXTranslator.depart_rubricc                 C   s6   |  j d7  _ | jd | j| j d   d7  < d S )Nr4  r   )r  r  r0   rj  rH   rH   rI   visit_section2  s    zLaTeXTranslator.visit_sectionc                 C   s   | j   |  jd8  _d S r  )r  r  r  rj  rH   rH   rI   depart_section9  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   r6   r  r  r8   r  r0   rj  rH   rH   rI   visit_sidebar>  s
    
zLaTeXTranslator.visit_sidebarc                 C   s   | j d | | d S rb  rT  rj  rH   rH   rI   depart_sidebarE  s    zLaTeXTranslator.depart_sidebar)u   —r$   )r  r  r  )r    r!   r"   r#   c                 C   s:   | j | jj \}}| jd | j| | j| d S )Nz\nopagebreak

\raggedleft )attribution_formatsrV   Zattributionr  r0   r  )rG   rV  r  r  rH   rH   rI   visit_attributionN  s    z!LaTeXTranslator.visit_attributionc                 C   s   | j | j d  d S r  r  rj  rH   rH   rI   depart_attributionT  s    z"LaTeXTranslator.depart_attributionc                 C   s   |  |d d S )NstatusrA  rj  rH   rH   rI   visit_statusW  s    zLaTeXTranslator.visit_statusc                 C   s   |  | d S rB   rD  rj  rH   rH   rI   depart_statusZ  s    zLaTeXTranslator.depart_statusc                 C   s   | j d | | d S )Nr  rY  rj  rH   rH   rI   visit_strong]  s    zLaTeXTranslator.visit_strongc                 C   s   |  | | jd d S r[  r\  rj  rH   rH   rI   depart_stronga  s    
zLaTeXTranslator.depart_strongc                 C   s
   t jd S rB   )r   r{  rj  rH   rH   rI   visit_substitution_definitione  s    z-LaTeXTranslator.visit_substitution_definitionc                 C   s   |  | d S rB   )unimplemented_visitrj  rH   rH   rI   visit_substitution_referenceh  s    z,LaTeXTranslator.visit_substitution_referencec                 C   s   t |jtjrT| | j | js,tj| j	d< | j
jdk}|  j| j|d|d7  _nLt |jtjr| jd| j| jd   n| jstj| j	d< | jd d S )	Ndocumentsubtitler.  Fr  z\%s*{r4  r<   z
\DUsubtitle{)r  rx  r   rQ   r,  r<   r  r   rL  r8   rV   r  r  r  r+  r  r0   r  r  r  rH   rH   rI   visit_subtitlek  s    zLaTeXTranslator.visit_subtitlec                 C   s(   t |jtjr|   n| jd d S rb  )r  rx  r   rQ   r-  r  r0   rj  rH   rH   rI   depart_subtitle|  s    
zLaTeXTranslator.depart_subtitlec              	   C   s,  t j| jd< | jst j| jd< | jjr2t j| jd< dg|d< | 	| | jjr\| j
d n| j
d | | zd|d  }W n tk
r   d	}Y nX | j
d
|d |d | |d |f  t|d dkr| j
d|d d   | jd n,dd t|d D }| jdd|  d S )Nr   r;   zsystem-messagerP  z)
\DUtitle[system-message]{system-message
z
\DUtitle{system-message
z	, line~%sr   r$   z'}

{\color{red}%s/%s} in \texttt{%s}%s
typer6  sourcer  r4  z
\hyperlink{%s}{r   r   c                 S   s    g | ]\}}d ||d f qS )z\hyperlink{%s}{%d}r4  rH   )r   r  rq  rH   rH   rI   r     s   z8LaTeXTranslator.visit_system_message.<locals>.<listcomp>z
backrefs: r  )r   r   r6   r  r;   r8   rV   r2   title_legacyrJ  r  r0   r  r   r  r5  r  r  rf   )rG   rV  r   r  rH   rH   rI   visit_system_message  s8    



 
z$LaTeXTranslator.visit_system_messagec                 C   s    | j | j  | | d S rB   )r  r0   r  r  rL  rj  rH   rH   rI   depart_system_message  s    z%LaTeXTranslator.depart_system_messagec                 C   s   |  | tj| jd< | jjs*tj| jd< | j rN| j	
| j t| d| _| jjdkrt|jtjr|j|dkr| j| jddkr| j
d | j  | j|| j | jjd	krd
| jd	< | g  d S )Nr   Ztable1ZtabularrX  r4  r,  r   r.  r   z\usepackage{booktabs})r(  r   r   r6   rV   r3   table_columnwidthr  rJ  r  r0   r:  r<  r  rx  r   r+  r+  r  r  r  r  rF  rW  rU  r,  rj  rH   rH   rI   visit_table  s4    



zLaTeXTranslator.visit_tablec                 C   s   | j }|   z| |d }W n tk
r8   d}Y nX | j | j| |  j |7  _ | j | j d  | j  t	| j
dkr| j
 | _|  j | j|ddd7  _ | | d S )NrR  r`  rd   r   FTr  )r  r-  r  r   r0   r  re  rh  r=  r5  r  r  r  r+  )rG   rV  r  rR  rH   rH   rI   depart_table  s    

zLaTeXTranslator.depart_tablec                 C   sX   d|ksd|ksd|krd S | j d t|jtjtjf }|  j | ||7  _ d S )Nr4  rl  rm  r  )r  r0   r  rx  r   rD  r;   r  )rG   rV  r  rH   rH   rI   visit_target  s    zLaTeXTranslator.visit_targetc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_target  s    zLaTeXTranslator.depart_targetc                 C   s$   | j ds | | | d  d S )Npreamble written)r  r   r  r  rj  rH   rH   rI   visit_tbody  s    
zLaTeXTranslator.visit_tbodyc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_tbody  s    zLaTeXTranslator.depart_tbodyc                 C   s   | j d dS )zdefinition list termz\item[{Nr`  rj  rH   rH   rI   
visit_term  s    zLaTeXTranslator.visit_termc                 C   s<   | j d |jddd}t|tjs8| j | | d S )Nz}] FTrs  )r  r0   ru  r  r   
classifierr2  )rG   rV  ru  rH   rH   rI   depart_term  s    zLaTeXTranslator.depart_termc                 C   s   d S rB   rH   rj  rH   rH   rI   visit_tgroup  s    zLaTeXTranslator.visit_tgroupc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_tgroup  s    zLaTeXTranslator.depart_tgroupc                 C   s   | j S rB   )_thead_depthrF   rH   rH   rI   r    s    zLaTeXTranslator.thead_depthc                 C   sh   |  j d7  _ d|  kr@| jd| j|  | jdd | j| j  | j| j	  d S )Nr4  z{%s}
rY  )
ra  r  r  r0   r  rz  rS  r  r   r  rj  rH   rH   rI   r    s    zLaTeXTranslator.visit_theadc                 C   s@   |d k	r.| j | j  | j r.||  |  jd8  _d S r  )r  r   r  r  r  rR   ra  rj  rH   rH   rI   r    s
    

zLaTeXTranslator.depart_theadc                 C   sd  t |jtjrD| | j | jd | jd| 	|
   nt |jtjsnt |jtjsnt |jtjr|jd p|jjg}| jjrtj| jd< | jdd|  n| jstj| jd< | jd | jd nt |jtjr
| | jj | jd nVttd	r"tj| jd	< | j}| j|}| jd
 |t | jj!kr| jjr|tj| jd< |dt"#| 7 }n6| jstj| jd< tj$| jd< | jdt"#|  d|jd k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 )z Append section and other titles.r$   z  pdftitle={%s},rP  r;   z
\DUtitle[%s]{r   z

\DUtitle{rK  r  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  rx  r   rQ   r,  r;   r  r0   r  r  r5  topicrG  r  tagnamerV   r2   r   rQ  r8   r  rf   r  r   r  rD  r  r  r6   r  r  r+  r5  r2  r  r  r&  r   r  )rG   rV  rP  r6  section_nameZsection_titlebookmarkrH   rH   rI   visit_title  sh    

 
zLaTeXTranslator.visit_titlec                 C   s2   | j | j  t|jtjtjfr.| 	  d S rB   )
r  r0   r  r  r  rx  r   r   rQ   r-  rj  rH   rH   rI   depart_titleW  s    zLaTeXTranslator.depart_titlec           	   	   C   sb  | j rxd|d krx| j| j}dddd}d| jjkr>|d= z|| }W n, tk
rv   | jd	| |d
 tjY nX | j	
d |d r|  j	| j|dd7  _	t| tjrd|d kr| jjdkr| j	
d| jd |  |ddgd f  | j s tj| jd< | | dS |dd}t| jj}t| tjr^| |d  }nd}d|d krtj| jd< d| | jd| < d||f | jd| < dddd}d| jjkrd|d< |r| j	
d ||||  f  | j	
d!||f  | j	
d"|  nJ|r,| j	
d#| j|  |d$krF| j	
d%|  | j	
d& d| _tjdS )'z_Write the table of contents.

        Called from visit_topic() for "contents" topics.
        localrP  rb   minisect)rb   r0  r+  r0  r+  zUSkipping local ToC at "%s" level.
  Feature not supported with option "use-latex-toc"r*  rd   r  Tr  r.  z\pdfbookmark[%d]{%s}{%s}
r4  r  contentsr   ztoc-listNr8  r$   r  z\do%stoczminitoc-z\mtcsetdepth{%stoc}{%d}zminitoc-%s-depth)rj  ri  rb   r   z\setcounter{%stocdepth}{%d}z\mtcsettitle{%stoc}{%s}
z\%stoc
z\setcounter{tocdepth}{%d}
ZContentsz!\renewcommand{\contentsname}{%s}
z\tableofcontents
)r)   r  r+  r  r2  r   r  r   r{  r  r0   r  r  ru  r;   rV   r  r5  r   r   toc_listr8   r(  r5  r  r  r6   r9  r  )	rG   rV  rd  Zminitoc_namesZmtc_namer8  Zmaxdepthr;   offsetrH   rH   rI   visit_contents\  s~    






zLaTeXTranslator.visit_contentsc                 C   s   d|d kr|  | nd|d kr`| jjr`| | j | jd t| t	j
r|d nd|d kr| js~tj| jd< | jjrtj| jd< | | j n<d|d kr| jstj| jd< | | j n|d dd | | d S )Nrk  rP  r@   z\begin{abstract}r   r?   rb  )rn  rV   r+   r,  r@   r  r0   r  ru  r   r;   r  r  r   r8   r2   abstract_legacyr?   r3  rS  rj  rH   rH   rI   visit_topic  s*    zLaTeXTranslator.visit_topicc                 C   sh   d|d kr"| j jr"| jd n"d|d kr:| | n
| | d|d ks\d|d krd|   d S )Nr@   rP  z\end{abstract}
rk  r?   )rV   r+   r  r0   r+  rU  r-  rj  rH   rH   rI   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
)r  r   rr  r8   r  r0   rj  rH   rH   rI   visit_transition  s    z LaTeXTranslator.visit_transitionc                 C   s   d S rB   rH   rj  rH   rH   rI   depart_transition  s    z!LaTeXTranslator.depart_transitionc                 C   s   |  |d d S )NversionrA  rj  rH   rH   rI   visit_version  s    zLaTeXTranslator.visit_versionc                 C   s   |  | d S rB   rD  rj  rH   rH   rI   depart_version  s    zLaTeXTranslator.depart_versionc                 C   s   t d|jj d S )Nz$visiting unimplemented node type: %s)r  rM   rh   rj  rH   rH   rI   rJ    s    z#LaTeXTranslator.unimplemented_visit)TFF)N)N)r   )rh   ri   rj   r   r  r-   r.   r  r  r  r  r  r  r  r  r%  ro   rC   r  r  r  r  r  compiler  r  r  r  r   r!  r(  r+  r,  r-  r2  r6  r7  r:  r=  r>  r?  rC  rF  rJ  rL  rN  rO  rP  rQ  rS  rU  rV  rW  rZ  r]  r^  r_  ra  rc  re  rf  rg  rj  rr  rw  rx  ry  rk  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  rB  rE  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  r9  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  r2  r3  r5  r6  r8  r9  r;  r<  r=  r>  r?  r@  rA  rB  rC  rE  rF  rG  rH  rI  rK  rM  rN  rR  rS  rU  rV  rW  rX  rZ  r[  r\  r^  r_  r`  ra  r  r  r  rf  rg  rn  rp  rq  rs  rt  rv  rw  rJ  rn   rH   rH   rL   rI   rD   T  s  
 j!(X
 
		
:18
P

"DLrD   );r   __docformat__pathlibr   r  r\   urllib.requestr   r  r  ImportErrorZdocutils.utils.romanr	   r  r   r   r   r   Zdocutils.transformsr
   Zdocutils.utils.mathr   r   __file__rx  rl   r   ro   dictr   r   r   r   r  r  r   rT  r   ro  rH  rI  rQ  rl  r  r   rF  r   r   r   r  r   Z
block_nameZdefinitionsrT   r   r*  r:  NodeVisitorrD   rH   rH   rH   rI   <module>   sn   
  
 2		


 0)  