使用 R 从 Latex 即时转换为 PDF

问题描述 投票:0回答:1

我在 R 中有以下文本:

Here is a Multinomial Logistic Regression:


$$
P(Y=k|X_1, X_2, ..., X_p) = \frac{e^{(\beta_{k0} + \beta_{k1}X_1 + \beta_{k2}X_2 + ... + \beta_{kp}X_p)}}{1 + \sum_{j=1}^{K-1} e^{(\beta_{j0} + \beta_{j1}X_1 + \beta_{j2}X_2 + ... + \beta_{jp}X_p)}}
$$

for $k = 1, 2, ..., K-1$, and

$$
P(Y=K|X_1, X_2, ..., X_p) = \frac{1}{1 + \sum_{j=1}^{K-1} e^{(\beta_{j0} + \beta_{j1}X_1 + \beta_{j2}X_2 + ... + \beta_{jp}X_p)}}
$$

Where :

$$
\beta = 
\begin{bmatrix}
\beta_{10} & \beta_{11} & \beta_{12} & \ldots & \beta_{1p} \\
\beta_{20} & \beta_{21} & \beta_{22} & \ldots & \beta_{2p} \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
\beta_{(K-1)0} & \beta_{(K-1)1} & \beta_{(K-1)2} & \ldots & \beta_{(K-1)p}
\end{bmatrix}
$$

有什么方法可以将这种混合的英语/乳胶文本直接转换为 R 中的 PDF 文档吗?

我已经看到一些库/包可以完成部分工作 - 但是有一些直接的方法可以做到这一点吗?

例如

# imaginary function that converts text to pdf (while preserving spaces/indents):

latex_to_pdf_function(output = myfile.pdf, text = "Here is a Multinomial Logistic Regression:


$$
P(Y=k|X_1, X_2, ..., X_p) = \frac{e^{(\beta_{k0} + \beta_{k1}X_1 + \beta_{k2}X_2 + ... + \beta_{kp}X_p)}}{1 + \sum_{j=1}^{K-1} e^{(\beta_{j0} + \beta_{j1}X_1 + \beta_{j2}X_2 + ... + \beta_{jp}X_p)}}


$$ ..... ")
r latex
1个回答
0
投票

这不是超级简单,但这是可能的。首先,您可以编写一个处理相关输入的函数。你必须有一个序言和一个文档结尾 - 据我所知,你不能只渲染独立于上下文的乳胶文本。该函数可能如下所示 - 它使用可以更改的默认前导码和结束语:

latex_to_pdf_function <- function(
  output = "myfile.pdf", 
  text = NULL, 
  preamble = NULL, 
  closing = NULL, 
  ...){
  if(is.null(preamble)){
    pre <- "\\documentclass{article}\n\\usepackage{amsmath}\n\\usepackage{amssymb}\n\\begin{document}\n"
  }
  if(is.null(closing)){
    closing <- "\\end{document}"
  }
flnm <- gsub("\\.pdf?", "", output)  
tf <- tempfile(flnm, fileext=".tex")                      
cat(pre, text, closing, sep="\n", file=tf)
tinytex::pdflatex(tf, pdf_file = output)
}

接下来,您必须定义输入文本。在这种情况下,我们需要使用

r"(...)"
结构来读入和管理原始字符串。这会将文本中的所有
\
转换为
\\
,以确保完成适当的转义。例如:

txt <- r"(
Here is a Multinomial Logistic Regression:


$$
P(Y=k|X_1, X_2, ..., X_p) = \\frac{e^{(\beta_{k0} + \beta_{k1}X_1 + \beta_{k2}X_2 + ... + \beta_{kp}X_p)}}{1 + \sum_{j=1}^{K-1} e^{(\beta_{j0} + \beta_{j1}X_1 + \beta_{j2}X_2 + ... + \beta_{jp}X_p)}}
$$

for $k = 1, 2, ..., K-1$, and

$$
P(Y=K|X_1, X_2, ..., X_p) = \frac{1}{1 + \sum_{j=1}^{K-1} e^{(\beta_{j0} + \beta_{j1}X_1 + \beta_{j2}X_2 + ... + \beta_{jp}X_p)}}
$$

Where :

$$
\beta = 
\begin{bmatrix}
\beta_{10} & \beta_{11} & \beta_{12} & \ldots & \beta_{1p} \\
\beta_{20} & \beta_{21} & \beta_{22} & \ldots & \beta_{2p} \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
\beta_{(K-1)0} & \beta_{(K-1)1} & \beta_{(K-1)2} & \ldots & \beta_{(K-1)p}
\end{bmatrix}
$$)"

最后,我们可以使用该函数生成pdf:

latex_to_pdf_function(text = txt)

对我来说,这使得 R 的工作目录中的

myfile.pdf
包含以下内容:

© www.soinside.com 2019 - 2024. All rights reserved.