--- title: "Chunk engine for easy tex output in Rmarkdown and Quarto" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Chunk engine for easy tex output in Rmarkdown and Quarto} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r, message=FALSE, echo=FALSE} library(caracas) ``` ```{r, include = FALSE} inline_code <- function(x) { x } if (!has_sympy()) { # SymPy not available, so the chunks shall not be evaluated knitr::opts_chunk$set(eval = FALSE) inline_code <- function(x) { deparse(substitute(x)) } } ``` ```{rtex} def_sym(z, w) q <- z + z^2 + w^3 ``` We have added a chunk engine that outputs (an object) to tex format. That is, `tex()` is applied to the object and the output is put inside a display math environment. For example, if you write the following: ````{verbatim} ```{rtex} library(caracas) def_sym(x, y) p <- x^3 + y^2 der(p, c(x, y)) ``` ```` You will get this result: ```{rtex} library(caracas) def_sym(x, y) p <- x^3 + y^2 der(p, c(x, y)) ``` # Multiple lines ````{verbatim} ```{rtex} def_sym(z, w) q <- z + z^2 + w^3 # Comment der(q, c(z, w)) p <- z^2 + w^8 der2(p, c(z, w)) ``` ```` Gives ```{rtex} def_sym(z, w) q <- z + z^2 + w^3 # Comment der(q, c(z, w)) p <- z^2 + w^8 der2(p, c(z, w)) ``` Note that to achieve this, tidying code has been disabled for `rtex` chunks. # Check with no echo ````{verbatim} ```{rtex, echo = FALSE} der2(p, c(z, w)) ``` ```` ```{rtex, echo = FALSE} der2(p, c(z, w)) ``` # Custom `tex()` You can also create your own custom `tex()` function: ```{r} tex <- function(x) { caracas::tex(x, zero_as_dot = TRUE) } ``` ```{rtex} der2(p, c(z, w)) ``` The reason this works is because `rtex` just calls `tex()` and if you define one in global namespace, then this is previous in the search path than the one provided by `caracas`. ```{r, include = FALSE} rm(tex) ``` # Notes Note that all lines generating output will get `tex()`'ed.