代码之家  ›  专栏  ›  技术社区  ›  user123945

使用R实现从Latex到PDF的即时转换

  •  0
  • user123945  · 技术社区  · 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)}}
    
    
    $$ ..... ")
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   DaveArmstrong    1 年前

    这不是非常简单,但它是可能的。首先,您可以编写一个函数来处理相关的输入。你必须有一个序言和一个文件结尾——据我所知,你不能只是独立于上下文来呈现乳胶文本。以下是该函数的外观-它使用了一个默认的前导码和可以更改的结束语:

    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)
    

    对我来说,这使 myfile.pdf 在R的工作目录中,包含以下内容:

    enter image description here