sig
  type t
  type size =
      [ `Baselineskip of float
      | `Baselinestretch of float
      | `Bp of float
      | `Cc of float
      | `Cm of float
      | `Dd of float
      | `Em of float
      | `Ex of float
      | `Fill
      | `In of float
      | `Linewidth of float
      | `Mm of float
      | `Parindent of float
      | `Parskip of float
      | `Pc of float
      | `Pt of float
      | `Sp of float
      | `Stretch of int
      | `Textheight of float
      | `Textwidth of float
      | `Unitlength of float ]
  val latex_of_size : Latex.size -> Latex.t
  type documentclass =
      [ `Article
      | `Beamer
      | `Book
      | `Custom of string
      | `Letter
      | `Report
      | `Slides ]
  type documentoptions = [ `A4paper | `Landscape | `Pt of int | `TwoColumn ]
  val document :
    ?documentclass:Latex.documentclass ->
    ?options:Latex.documentoptions list ->
    ?title:Latex.t ->
    ?author:Latex.t ->
    ?date:Latex.t ->
    ?prelude:Latex.t ->
    ?packages:(Latex.t * Latex.t) list -> Latex.t -> Latex.t
  type 'a variable
  val variable :
    ?eq:('-> '-> bool) ->
    ?name:string -> ?printer:('-> string) -> '-> 'Latex.variable
  val setf : 'Latex.variable -> ('-> 'a) -> Latex.t
  val setf2 :
    'Latex.variable -> 'Latex.variable -> ('-> '-> 'b) -> Latex.t
  type position
  val position : ?name:string -> unit -> Latex.position
  val place : Latex.position -> Latex.t
  val get :
    ?position:Latex.position ->
    'Latex.variable -> ('-> Latex.t) -> Latex.t
  val set : 'Latex.variable -> '-> Latex.t
  val final : 'Latex.variable -> ('-> Latex.t) -> Latex.t
  val incr_var : int Latex.variable -> Latex.t
  val decr_var : int Latex.variable -> Latex.t
  val vari : int Latex.variable -> Latex.t
  val varf : float Latex.variable -> Latex.t
  val varb : bool Latex.variable -> Latex.t
  val vars : string Latex.variable -> Latex.t
  val vart : Latex.t Latex.variable -> Latex.t
  val finali : int Latex.variable -> Latex.t
  val finalf : float Latex.variable -> Latex.t
  val finalb : bool Latex.variable -> Latex.t
  val finals : string Latex.variable -> Latex.t
  val finalt : Latex.t Latex.variable -> Latex.t
  type label
  val label : ?name:string -> unit -> Latex.label
  val ref_ : Latex.label -> Latex.t
  type float_position = [ `B | `Force | `H | `P | `T ]
  val float_all : Latex.float_position list
  val figure :
    ?label:Latex.label ->
    ?pos:Latex.float_position list ->
    ?center:bool ->
    ?side_caption:bool ->
    ?caption:Latex.t -> ?wide:bool -> Latex.t -> Latex.t
  type wrapfigure_position =
      [ `Force of [ `I | `L | `O | `R ] | `I | `L | `O | `R ]
  val wrapfigure :
    ?label:Latex.label ->
    ?pos:Latex.wrapfigure_position ->
    ?lines:int ->
    ?width:Latex.size ->
    ?center:bool -> ?caption:Latex.t -> Latex.t -> Latex.t
  type floatingfigure_position = [ `L | `P | `R ]
  val floatingfigure :
    ?label:Latex.label ->
    ?pos:Latex.floatingfigure_position ->
    ?width:Latex.size ->
    ?center:bool -> ?caption:Latex.t -> Latex.t -> Latex.t
  val subfloat : ?label:Latex.label -> ?caption:Latex.t -> Latex.t -> Latex.t
  val hyphen : Latex.t
  val index : Latex.t -> Latex.t -> Latex.t
  val exponent : Latex.t -> Latex.t -> Latex.t
  val index_exponent : Latex.t -> Latex.t -> Latex.t -> Latex.t
  val tableofcontents : Latex.t
  val listoffigures : Latex.t
  val listoftables : Latex.t
  val appendix : Latex.t
  val place_index : Latex.t -> Latex.t
  val printindex : Latex.t
  val today : Latex.t
  val maketitle : Latex.t
  val part : ?label:Latex.label -> Latex.t -> Latex.t
  val chapter : ?label:Latex.label -> ?short:Latex.t -> Latex.t -> Latex.t
  val section : ?label:Latex.label -> ?short:Latex.t -> Latex.t -> Latex.t
  val subsection : ?label:Latex.label -> ?short:Latex.t -> Latex.t -> Latex.t
  val subsubsection :
    ?label:Latex.label -> ?short:Latex.t -> Latex.t -> Latex.t
  val paragraph : Latex.t -> Latex.t
  val chapter' : ?label:Latex.label -> ?short:Latex.t -> Latex.t -> Latex.t
  val section' : ?label:Latex.label -> ?short:Latex.t -> Latex.t -> Latex.t
  val subsection' :
    ?label:Latex.label -> ?short:Latex.t -> Latex.t -> Latex.t
  val subsubsection' :
    ?label:Latex.label -> ?short:Latex.t -> Latex.t -> Latex.t
  val par : Latex.t
  val displaymath : Latex.t -> Latex.t
  val equation : ?label:Latex.label -> Latex.t -> Latex.t
  val hfill : Latex.t
  val vfill : Latex.t
  val vfil : Latex.t
  val footnote : Latex.t -> Latex.t
  val latex_of_int : int -> Latex.t
  val latex_of_float : float -> Latex.t
  val itemize : Latex.t list -> Latex.t
  val enumerate : Latex.t list -> Latex.t
  val newline : Latex.t
  val newline_size : Latex.size -> Latex.t
  val newpage : Latex.t
  val clearpage : Latex.t
  val noindent : Latex.t
  val space : Latex.t
  val quad : Latex.t
  val qquad : Latex.t
  val includegraphics : Latex.t -> Latex.t
  val symbol : int -> Latex.t
  val symbolc : char -> Latex.t
  val center : Latex.t -> Latex.t
  val flushleft : Latex.t -> Latex.t
  val flushright : Latex.t -> Latex.t
  val quote : Latex.t -> Latex.t
  val quotation : Latex.t -> Latex.t
  val stackrel : Latex.t -> Latex.t -> Latex.t
  val vspace : Latex.size -> Latex.t
  val hspace : Latex.size -> Latex.t
  val addvspace : Latex.size -> Latex.t
  val ignorespaces : Latex.t
  val smallskip : Latex.t
  val medskip : Latex.t
  val bigskip : Latex.t
  val nointerlineskip : Latex.t
  val phantom : Latex.t -> Latex.t
  val vphantom : Latex.t -> Latex.t
  val hphantom : Latex.t -> Latex.t
  val rule_ : ?lift:Latex.size -> Latex.size -> Latex.size -> Latex.t
  type valignment = [ `B | `C | `T ]
  val parbox : Latex.size -> ?valign:Latex.valignment -> Latex.t -> Latex.t
  val minipage : Latex.size -> ?valign:Latex.valignment -> Latex.t -> Latex.t
  type halignment = [ `C | `L | `R | `S ]
  type xsize =
      [ `Baselineskip of float
      | `Baselinestretch of float
      | `Bp of float
      | `Cc of float
      | `Cm of float
      | `Dd of float
      | `Depth of float
      | `Em of float
      | `Ex of float
      | `Fill
      | `Height of float
      | `In of float
      | `Linewidth of float
      | `Mm of float
      | `Parindent of float
      | `Parskip of float
      | `Pc of float
      | `Pt of float
      | `Sp of float
      | `Stretch of int
      | `Textheight of float
      | `Textwidth of float
      | `Totalheight of float
      | `Unitlength of float
      | `Width of float ]
  val makebox : Latex.xsize -> ?halign:Latex.halignment -> Latex.t -> Latex.t
  val framebox :
    Latex.xsize -> ?halign:Latex.halignment -> Latex.t -> Latex.t
  val raisebox :
    shift:Latex.xsize ->
    ?fakeheight:Latex.xsize * Latex.xsize -> Latex.t -> Latex.t
  type alignment = [ `C | `L | `R ]
  type array_column = [ `C | `L | `R | `Sep of Latex.t | `Vert ]
  type array_line
  val array :
    ?valign:Latex.valignment ->
    Latex.array_column list -> Latex.array_line list -> Latex.t
  val array_line :
    ?sep:Latex.size ->
    ?layout:(int * [ `C | `I | `L | `R ]) list ->
    Latex.t list -> Latex.array_line
  val array_command : Latex.t -> Latex.array_line
  val frontmatter : Latex.t
  val backmatter : Latex.t
  val mainmatter : Latex.t
  val underbrace : Latex.t -> Latex.t -> Latex.t
  val overbrace : Latex.t -> Latex.t -> Latex.t
  val emph : Latex.t -> Latex.t
  val texttt : Latex.t -> Latex.t
  val textsc : Latex.t -> Latex.t
  val textit : Latex.t -> Latex.t
  val textbf : Latex.t -> Latex.t
  val textrm : Latex.t -> Latex.t
  val textsf : Latex.t -> Latex.t
  val mathit : Latex.t -> Latex.t
  val mathbf : Latex.t -> Latex.t
  val mathrm : Latex.t -> Latex.t
  val mathsf : Latex.t -> Latex.t
  val mathcal : Latex.t -> Latex.t
  val tiny : Latex.t -> Latex.t
  val scriptsize : Latex.t -> Latex.t
  val footnotesize : Latex.t -> Latex.t
  val small : Latex.t -> Latex.t
  val normalsize : Latex.t -> Latex.t
  val large : Latex.t -> Latex.t
  val large2 : Latex.t -> Latex.t
  val large3 : Latex.t -> Latex.t
  val huge : Latex.t -> Latex.t
  val huge2 : Latex.t -> Latex.t
  val hat : Latex.t -> Latex.t
  val grave : Latex.t -> Latex.t
  val bar : Latex.t -> Latex.t
  val acute : Latex.t -> Latex.t
  val mathring : Latex.t -> Latex.t
  val check : Latex.t -> Latex.t
  val dot : Latex.t -> Latex.t
  val vec : Latex.t -> Latex.t
  val breve : Latex.t -> Latex.t
  val tilde : Latex.t -> Latex.t
  val ddot : Latex.t -> Latex.t
  val widehat : Latex.t -> Latex.t
  val widetilde : Latex.t -> Latex.t
  val overline : Latex.t -> Latex.t
  val alpha : Latex.t
  val beta : Latex.t
  val gamma : Latex.t
  val delta : Latex.t
  val epsilon : Latex.t
  val varepsilon : Latex.t
  val zeta : Latex.t
  val eta : Latex.t
  val theta : Latex.t
  val vartheta : Latex.t
  val iota : Latex.t
  val kappa : Latex.t
  val varkappa : Latex.t
  val lambda : Latex.t
  val mu : Latex.t
  val nu : Latex.t
  val xi : Latex.t
  val pi : Latex.t
  val varpi : Latex.t
  val rho : Latex.t
  val varrho : Latex.t
  val sigma : Latex.t
  val varsigma : Latex.t
  val tau : Latex.t
  val upsilon : Latex.t
  val phi : Latex.t
  val varphi : Latex.t
  val chi : Latex.t
  val psi : Latex.t
  val omega : Latex.t
  val digamma : Latex.t
  val gamma_ : Latex.t
  val delta_ : Latex.t
  val theta_ : Latex.t
  val lambda_ : Latex.t
  val xi_ : Latex.t
  val pi_ : Latex.t
  val sigma_ : Latex.t
  val upsilon_ : Latex.t
  val phi_ : Latex.t
  val psi_ : Latex.t
  val omega_ : Latex.t
  val aleph : Latex.t
  val beth : Latex.t
  val gimel : Latex.t
  val daleth : Latex.t
  val le : Latex.t
  val leq : Latex.t
  val leqslant : Latex.t
  val ge : Latex.t
  val geq : Latex.t
  val geqslant : Latex.t
  val equiv : Latex.t
  val ll : Latex.t
  val gg : Latex.t
  val doteq : Latex.t
  val prec : Latex.t
  val succ : Latex.t
  val sim : Latex.t
  val preceq : Latex.t
  val succeq : Latex.t
  val simeq : Latex.t
  val subset : Latex.t
  val supset : Latex.t
  val approx : Latex.t
  val subseteq : Latex.t
  val supseteq : Latex.t
  val cong : Latex.t
  val sqsubset : Latex.t
  val sqsupset : Latex.t
  val join_ : Latex.t
  val sqsubseteq : Latex.t
  val sqsupseteq : Latex.t
  val bowtie : Latex.t
  val in_ : Latex.t
  val owns : Latex.t
  val propto : Latex.t
  val vdash : Latex.t
  val dashv : Latex.t
  val models : Latex.t
  val mid : Latex.t
  val parallel : Latex.t
  val perp : Latex.t
  val smile : Latex.t
  val frown : Latex.t
  val asymp : Latex.t
  val not_ : Latex.t -> Latex.t
  val notin : Latex.t
  val ne : Latex.t
  val neq : Latex.t
  val pm : Latex.t
  val mp : Latex.t
  val triangleleft : Latex.t
  val cdot : Latex.t
  val div : Latex.t
  val triangleright : Latex.t
  val times : Latex.t
  val setminus : Latex.t
  val star : Latex.t
  val cup : Latex.t
  val cap : Latex.t
  val ast : Latex.t
  val sqcup : Latex.t
  val sqcap : Latex.t
  val circ : Latex.t
  val bullet : Latex.t
  val oplus : Latex.t
  val ominus : Latex.t
  val diamond : Latex.t
  val odot : Latex.t
  val oslash : Latex.t
  val uplus : Latex.t
  val otimes : Latex.t
  val bigcirc : Latex.t
  val amalg : Latex.t
  val bigtriangleup : Latex.t
  val bigtriangledown : Latex.t
  val dagger : Latex.t
  val lhd : Latex.t
  val rhd : Latex.t
  val ddagger : Latex.t
  val unlhd : Latex.t
  val unrhd : Latex.t
  val wr : Latex.t
  val sum : Latex.t
  val prod : Latex.t
  val coprod : Latex.t
  val bigcup : Latex.t
  val bigcap : Latex.t
  val bigvee : Latex.t
  val bigwedge : Latex.t
  val bigsqcup : Latex.t
  val biguplus : Latex.t
  val int : Latex.t
  val oint : Latex.t
  val bigodot : Latex.t
  val bigoplus : Latex.t
  val bigotimes : Latex.t
  val leftarrow : Latex.t
  val rightarrow : Latex.t
  val to_ : Latex.t
  val leftrightarrow : Latex.t
  val leftarrow_ : Latex.t
  val rightarrow_ : Latex.t
  val leftrightarrow_ : Latex.t
  val longleftarrow : Latex.t
  val longrightarrow : Latex.t
  val longleftrightarrow : Latex.t
  val longleftarrow_ : Latex.t
  val longrightarrow_ : Latex.t
  val longleftrightarrow_ : Latex.t
  val iff : Latex.t
  val mapsto : Latex.t
  val longmapsto : Latex.t
  val hookleftarrow : Latex.t
  val hookrightarrow : Latex.t
  val leftharpoonup : Latex.t
  val rightharpoonup : Latex.t
  val leftharpoondown : Latex.t
  val rightharpoondown : Latex.t
  val rightleftharpoons : Latex.t
  val uparrow : Latex.t
  val downarrow : Latex.t
  val updownarrow : Latex.t
  val uparrow_ : Latex.t
  val downarrow_ : Latex.t
  val updownarrow_ : Latex.t
  val nearrow : Latex.t
  val searrow : Latex.t
  val swarrow : Latex.t
  val nwarrow : Latex.t
  val leadsto : Latex.t
  val box_ : Latex.t
  val langle : Latex.t
  val rangle : Latex.t
  val lceil : Latex.t
  val rceil : Latex.t
  val frac : Latex.t -> Latex.t -> Latex.t
  val land_ : Latex.t
  val lor_ : Latex.t
  val lnot : Latex.t
  val neg : Latex.t
  val forall : Latex.t
  val exists : Latex.t
  val top : Latex.t
  val bot : Latex.t
  val sharp : Latex.t
  val dots : Latex.t
  val cdots : Latex.t
  val ldots : Latex.t
  val emptyset : Latex.t
  type doublable_delimiter = [ `Down | `Up | `Up_down | `Vert ]
  type delimiter =
      [ `Angle
      | `Brace
      | `Bracket
      | `Ceil
      | `Double of Latex.doublable_delimiter
      | `Down
      | `Floor
      | `None
      | `Paren
      | `Slash
      | `Up
      | `Up_down
      | `Vert ]
  val left : Latex.delimiter -> Latex.t
  val right : Latex.delimiter -> Latex.t
  val just_left : Latex.delimiter -> Latex.t -> Latex.t
  val just_right : Latex.delimiter -> Latex.t -> Latex.t
  val between : Latex.delimiter -> Latex.t -> Latex.t
  val oe : Latex.t
  val mathbb : Latex.t -> Latex.t
  val mathfrak : Latex.t -> Latex.t
  val align : Latex.t -> Latex.t
  val align_ : Latex.t -> Latex.t
  val gather : Latex.t -> Latex.t
  val gather_ : Latex.t -> Latex.t
  val split : Latex.t -> Latex.t
  val proof : ?opt:Latex.t -> Latex.t -> Latex.t
  val twoheadrightarrow : Latex.t
  val square : Latex.t
  val par_ : Latex.t
  val black_triangle_left : Latex.t
  val black_triangle_right : Latex.t
  val mathpar : Latex.t list -> Latex.t
  val inferrule :
    ?lab:Latex.t ->
    ?left:Latex.t ->
    ?right:Latex.t ->
    ?vdots:Latex.size ->
    ?width:Latex.size ->
    ?leftskip:Latex.size ->
    ?rightskip:Latex.size -> Latex.t list -> Latex.t list -> Latex.t
  val llbracket : Latex.t
  val rrbracket : Latex.t
  val llparenthesis : Latex.t
  val rrparenthesis : Latex.t
  val slide : Latex.t -> Latex.t
  module type BEAMER =
    sig
      type beamertemplate = [ `Footline | `NavigationSymbols ]
      type tocoptions =
          [ `CurrentSection
          | `CurrentSubsection
          | `HideAllSubsections
          | `HideOtherSubsections
          | `PauseSections
          | `PauseSubsections ]
      val frame : ?title:Latex.t -> ?subtitle:Latex.t -> Latex.t -> Latex.t
      val setbeamertemplate :
        Latex.BEAMER.beamertemplate -> Latex.t -> Latex.t
      val insertpagenumber : Latex.t
      val insertdocumentendpage : Latex.t
      val inserttitle : Latex.t
      val insertsection : Latex.t
      val insertsubsection : Latex.t
      val insertshorttitle : Latex.t
      val insertshortsection : Latex.t
      val insertshortsubsection : Latex.t
      val tableofcontents : Latex.BEAMER.tocoptions list -> Latex.t
      val at_begin_section : Latex.t -> Latex.t
      val at_begin_subsection : Latex.t -> Latex.t
      val at_begin_subsubsection : Latex.t -> Latex.t
      val block : Latex.t -> Latex.t -> Latex.t
      type color =
          [ `Blue
          | `Gray
          | `Green
          | `RGB of float * float * float
          | `Red
          | `Yellow ]
      val color : Latex.BEAMER.color -> Latex.t -> Latex.t
      type overlays_spec = [ `I of int ]
      val only : Latex.BEAMER.overlays_spec list -> Latex.t -> Latex.t
      val includegraphics :
        ?only:Latex.BEAMER.overlays_spec list -> Latex.t -> Latex.t
      type column_alignment = [ `B | `C | `T ]
      val columns :
        ?align:Latex.BEAMER.column_alignment -> Latex.t -> Latex.t
      val column :
        ?align:Latex.BEAMER.column_alignment ->
        Latex.size -> Latex.t -> Latex.t
      val equi_columns :
        ?align:Latex.BEAMER.column_alignment -> Latex.t list -> Latex.t
    end
  module Beamer : BEAMER
  module Verbatim :
    sig
      val verbatim : string -> Latex.t
      val regexps :
        (Str.regexp * (string -> Latex.t)) list ->
        (string -> Latex.t) -> string -> Latex.t
      val keywords :
        ?apply:(Latex.t -> Latex.t) -> string list -> string -> Latex.t
      val pseudocode :
        ?trim:(string -> string) ->
        ?id_regexp:Str.regexp ->
        ?kw_apply:(Latex.t -> Latex.t) ->
        ?id_apply:(Latex.t -> Latex.t) ->
        ?rem_apply:(string -> Latex.t) ->
        ?keywords:string list ->
        ?symbols:(string * Latex.t) list ->
        ?keyword_symbols:(string * Latex.t) list ->
        ?underscore:Str.regexp -> string -> Latex.t
      val trim : char list -> string -> string
      val trim_begin : char list -> string -> string
      val trim_end : char list -> string -> string
      val split_lines : string -> string list
    end
  type mode = M | T | A
  val empty : Latex.t
  val is_empty : Latex.t -> bool
  val text : string -> Latex.t
  val concat : Latex.t list -> Latex.t
  val ( ^^ ) : Latex.t -> Latex.t -> Latex.t
  val command :
    ?packages:(string * string) list ->
    string ->
    ?opt:Latex.mode * Latex.t ->
    (Latex.mode * Latex.t) list -> Latex.mode -> Latex.t
  type arg_kind
  val bracket : Latex.arg_kind
  val brace : Latex.arg_kind
  val nobr : Latex.arg_kind
  val unusual_command :
    ?packages:(string * string) list ->
    string ->
    (Latex.mode * Latex.arg_kind * Latex.t) list -> Latex.mode -> Latex.t
  val within_braces : Latex.t -> Latex.t
  val environment :
    ?packages:(string * string) list ->
    string ->
    ?opt:Latex.mode * Latex.t ->
    ?args:(Latex.mode * Latex.t) list ->
    Latex.mode * Latex.t -> Latex.mode -> Latex.t
  val mode : Latex.mode -> Latex.t -> Latex.t
  val documentclass : ?opt:Latex.mode * Latex.t -> Latex.t -> Latex.t
  val required_packages : Latex.t
  val require_packages : (Latex.t * Latex.t) list -> Latex.t
  val documentmatter : Latex.t -> Latex.t
  val latex : Latex.t
  val usepackage : ?opt:Latex.t -> Latex.t -> Latex.t
  val input : Latex.t -> Latex.t
  val newcommand : int -> Latex.t -> Latex.t -> Latex.t
  val renewcommand : int -> Latex.t -> Latex.t -> Latex.t
  val block : Latex.t -> Latex.t
  val place_label : Latex.label -> Latex.t
  val atbegindocument : Latex.t -> Latex.t
  val addcontentsline : Latex.t -> Latex.t -> Latex.t -> Latex.t
  val pagestyle : Latex.t -> Latex.t
  val thispagestyle : Latex.t -> Latex.t
  val list_insert : '-> 'a list -> 'a list
  type env
  val get_in_env :
    ?position:Latex.position -> 'Latex.variable -> Latex.env -> 'a
  val to_buffer :
    ?mode:Latex.mode ->
    ?env:Latex.env -> Stdlib.Buffer.t -> Latex.t -> Latex.env
  val to_channel :
    ?mode:Latex.mode ->
    ?env:Latex.env -> Stdlib.out_channel -> Latex.t -> Latex.env
  val to_file :
    ?mode:Latex.mode -> ?env:Latex.env -> string -> Latex.t -> Latex.env
  val to_string : ?mode:Latex.mode -> Latex.t -> string
  val to_string_with_env :
    ?mode:Latex.mode -> ?env:Latex.env -> Latex.t -> string * Latex.env
end