我使用R制作了流程图,并将其包含在R Markdown文件中。

现在的样子:
r - R Markdown : How do I make text float around figures?-LMLPHP

代码:

```{r flowchart-data, echo = FALSE, message = FALSE, fig.cap = "Ablauf der Datenverarbeitung", fig.align = "right",  fig.width = 7, fig.height = 6, out.extra = 'trim = {0 1.1cm 0 0}, clip', out.width=".7\\textwidth"}
library(grid)
library(Gmisc)

# grid.newpage()
# set some parameters to use repeatedly
leftx <- .2
midx <- .5
rightx <- .8

myBoxGrob <- function(text, ...) {
  boxGrob(label = text, bjust = "top", box_gp = gpar(fill = "lightgrey"), ...)
}

# create boxes
(Pharmazie <- myBoxGrob("Verbrauchsdaten von der\n Spitalpharmazie  (Excel-Tabelle)", x=leftx, y=1, width = 0.36))
(Finanzen <- myBoxGrob("Belegzahlen vom Ressort\n Finanzen (Excel-Tabelle)", x=rightx, y=1, width = 0.36))
(A <- myBoxGrob("Import der Daten aus Excel ins\n Microsoft Access (Datenbanksoftware)", x=midx, y=0.83, width = 0.45))
(B <- myBoxGrob("Zusammenführen der Informationen\n und erstellen neuer, berechneter Tabellen", x=midx, y=.66, width = 0.45))
(C <- myBoxGrob("Export der neu erstellten Tabellen\n in Form von Excel-Tabellen", x=midx, y=.49, width = 0.45))
(D <- myBoxGrob("Import der neuen Tabellen in R", x=midx, y=.32,  width = 0.45))
(E <- myBoxGrob("Berechnung und grafische Darstellung\n der Grafiken und Tabellen", x=midx, y=.19, width = 0.45))


connectGrob(Pharmazie, A, "L")
connectGrob(Finanzen, A, "L")
connectGrob(A, B, "N")
connectGrob(B, C, "N")
connectGrob(C, D, "N")
connectGrob(D, E, "N")
```

我想要的是:
  • 我希望文本使用图左侧的空格。
  • 我希望图形标题与图形的中心对齐。现在,标题位于页面中间,而忽略图形居中,右对齐或左对齐。

  • 我该如何实现这些目标?

    编辑1:我想编织到pdf。

    编辑2:按照评论中的要求,我的页面现在看起来如何:
    r - R Markdown : How do I make text float around figures?-LMLPHP

    最佳答案

    有一个名为fig.env的块选项,使用该选项可以从figure切换到marginfigure环境。
    不幸的是,可能的环境列表不包括wrapfigure。因此,我们将更改图块:

    defOut <- knitr::knit_hooks$get("plot")  # save the default plot hook
    knitr::knit_hooks$set(plot = function(x, options) {  # set new plot hook ...
      x <- defOut(x, options)  # first apply the default hook
      if(!is.null(options$wrapfigure)) {  # then, if option wrapfigure is given ...
        # create the new opening string for the wrapfigure environment ...
        wf <- sprintf("\\begin{wrapfigure}{%s}{%g\\textwidth}", options$wrapfigure[[1]], options$wrapfigure[[2]])
        x  <- gsub("\\begin{figure}", wf, x, fixed = T)  # and replace the default one with it.
        x  <- gsub("{figure}", "{wrapfigure}", x, fixed = T)  # also replace the environment ending
      }
      return(x)
    })
    

    这些评论应阐明我们在这里实际所做的事情。注意,wrapfigure的期望值是两个元素的列表。第一个告诉LaTeX将图形移到页面的任一侧。第二个元素告诉LaTeX包装图形的宽度。若要将宽度为0.7\\textwidth的图形移至右侧,请设置wrapfigure = list("R", 0.7)(您可能已经猜到了,L将其移至左侧)。
    现在我们要做的就是在YAML中包括wrapfig包,并设置此chunk选项。这是一个可重现的示例:
    ---
    header-includes:
      - \usepackage{wrapfig}
      - \usepackage{lipsum}
    output:
      pdf_document:
        keep_tex: true
    ---
    
    ```{r, include = F}
    defOut <- knitr::knit_hooks$get("plot")  # save the default plot hook
    knitr::knit_hooks$set(plot = function(x, options) {  # set new plot hook ...
      x <- defOut(x, options)  # first apply the default hook
      if(!is.null(options$wrapfigure)) {  # then, if option wrapfigure is given ...
        # create the new opening string for the wrapfigure environment ...
        wf <- sprintf("\\begin{wrapfigure}{%s}{%g\\textwidth}", options$wrapfigure[[1]], options$wrapfigure[[2]])
        x  <- gsub("\\begin{figure}", wf, x, fixed = T)  # and replace the default one with it.
        x  <- gsub("{figure}", "{wrapfigure}", x, fixed = T)  # also replace the environment ending
      }
      return(x)
    })
    ```
    
    
    Vivamus vehicula leo a justo. Quisque nec augue. Morbi mauris wisi, aliquet vitae, dignissim eget, sollicitudin molestie, ligula. In dictum enim sit amet risus. Curabitur vitae velit eu diam rhoncus hendrerit. Vivamus ut elit. Praesent mattis ipsum quis turpis. Curabitur rhoncus neque eu dui. Etiam vitae magna. Nam ullamcorper. Praesent interdum bibendum magna. Quisque auctor aliquam dolor. Morbi eu lorem et est porttitor fermentum. Nunc egestas arcu at tortor varius viverra. Fusce eu nulla ut nulla interdum consectetuer. Vestibulum gravida.
    
    ```{r echo = F, warning = F, message = F, fig.width=7, fig.height = 6, out.width = ".7\\textwidth", fig.cap = "My Flowchart", fig.align="right", wrapfigure = list("R", .7)}
    plot(mpg ~ hp, data = mtcars)
    ```
    
    Morbi mattis libero sed est. Vivamus vehicula leo a justo. Quisque nec augue. Morbi mauris wisi, aliquet vitae, dignissim eget, sollicitudin molestie, ligula. In dictum enim sit amet risus. Curabitur vitae velit eu diam rhoncus hendrerit. Vivamus ut elit. Praesent mattis ipsum quis turpis. Curabitur rhoncus neque eu dui. Etiam vitae magna. Nam ullamcorper. Praesent interdum bibendum magna. Quisque auctor aliquam dolor. Morbi eu lorem et est porttitor fermentum. Nunc egestas arcu at tortor varius viverra. Fusce eu nulla ut nulla interdum consectetuer. Vestibulum gravida. Morbi mattis libero sed est.
    

    注意,该解决方案很可能仅与创建单个图的块一起使用。应该可以将其扩展到包含多个图形的块。

    r - R Markdown : How do I make text float around figures?-LMLPHP

    09-10 09:50