21.13 Bringing the LaTeX Together

latex_env <- function(expr) {
  
  # Unknown Functions
  calls <- calls_grabber(expr)
  call_list <- map(set_names(calls), seek_closure)
  call_env <- as_environment(call_list)

  # Known Functions
  known_func_env <- env_clone(known_func_env, call_env)

  # Unknown Symbols
  names <- names_grabber(expr)
  symbol_env <- as_environment(set_names(names), parent = known_func_env)

  # Known symbols
  greek_env <- env_clone(greek_env, parent = symbol_env)
  greek_env
}

to_math <- function(x) {
  expr <- enexpr(x)
  latex(              #return LaTeX code
    eval_bare(        #eval_bare to ensure use of latex environment 
      expr,           #expression (not quosure)
      latex_env(expr) #need to define latex_env
    ))
}

21.13.1 Check

to_math(sin(pi) + f(a))
#> <LATEX> \sin(\pi) + \mathrm{f}(a)