---
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. 

