更改标题并在RMtable中将xtable中的粗体字体包含在.pdf中

时间:2017-04-18 00:22:48

标签: r markdown knitr xtable

我是RMarkdown和LaTex的初学者,虽然喜欢在R中创建报告!我已经选择了一些代码来创建我想要的.pdf报告,尽管它在某些美学方面有困难。

我的数据是保密的,但这里是使用内置R数据集的布局/图表和表的确切数量的副本。

---
title: <center> <h1>Call Centre Report</h1> </center>
mainfont: Arial
output:
  pdf_document:
    latex_engine: xelatex
sansfont: Arial
fig_crop: false
toc: true
classoption: landscape
fontsize: 14pt
geometry: margin=0.5in
header-includes:
- \usepackage{booktabs}
---
<style>
  .main-container {
    max-width: 1200px !important;
  }
</style>

```{r global_options, R.options=knitr::opts_chunk$set(warning=FALSE, message=FALSE)}
```
\newpage
# Iris 
```{r fig.width=18, fig.height=7, echo=FALSE, comment=" "}
library(ggplot2)
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) +
   geom_point() +
   theme_classic()
```
<br>
<br>
```{r, echo=FALSE, results='asis'}
library(knitr)
library(xtable)

t1 <- kable(subset(iris, Sepal.Length=="5.1", select = Petal.Length:Species),
            format = "latex", booktabs = TRUE, row.names = FALSE)
t2 <- kable(subset(chickwts, feed=="horsebean", select = weight:feed), 
            format = "latex", booktabs = TRUE, row.names = FALSE)
t3 <- kable(subset(mtcars, gear=="4", select = disp:wt), 
            format = "latex", booktabs = TRUE, row.names = FALSE, digits=2)

cat(c("\\begin{table}[!htb]
    \\begin{minipage}{.35\\linewidth}
      \\centering",
        t1,
    "\\end{minipage}%
    \\begin{minipage}{.35\\linewidth}
      \\centering",
        t2,
    "\\end{minipage}%
    \\begin{minipage}{.35\\linewidth}
      \\centering",
        t3,
    "\\end{minipage} 
\\end{table}"
)) 
```

我希望收拾以下内容,但我不确定该怎么做:

  • 使第2页上的Iris标题变为粗体并居中,但将其保留为目录中的标题。
    • 将这三个表格中的标题加粗
    • 将每个表格中的所有文字居中
    • 删除表1中1.7, 0.5, setosa之后的大差距,然后删除该行中的其他表。

非常感谢任何帮助或指向特定文档的链接。

更新

下面提供的答案很有效,除了我的数据包含一个百分比列,RMarkdown和LaTeX似乎不喜欢。我用一些虚拟数据更新了我的代码,这与我的机密数据非常相似,希望能够解决这个问题。

谢谢!

---
title: <center> <h1>Call Centre Report</h1> </center>
mainfont: Arial
output:
  pdf_document:
    latex_engine: xelatex
sansfont: Arial
fig_crop: false
toc: true
classoption: landscape
fontsize: 14pt
geometry: margin=0.5in
header-includes:
- \usepackage{booktabs}
---
<style>
  .main-container {
    max-width: 1200px !important;
  }
</style>

```{r global_options, R.options=knitr::opts_chunk$set(warning=FALSE, message=FALSE)}
```
\newpage

# Iris 

```{r fig.width=18, fig.height=7, echo=FALSE, comment=" "}
library(ggplot2)
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) +
   geom_point() +
   theme_classic()
```
<br>
<br>
```{r, echo=FALSE, results='asis'}
library(knitr)
library(xtable)

# Create some dummy data
Data <- data.frame(Fruit = sample(c("Apple", "Orange"), 10, replace = TRUE), 
                     Score = sample(1:10))
# Include percentage column
Data$Percentage <- (paste0(round(100 * Data$Score/100), "%"))

t1 <- kable({x <- subset(iris, Sepal.Length=="5.1", select = Petal.Length:Species);
             names(x) <- sprintf("\\textbf{%s}", names(x))
             x},
            format = "latex", booktabs = TRUE, row.names = FALSE,
            align = 'c', escape = FALSE)
t2 <- kable({x <- subset(chickwts, feed=="horsebean", select = weight:feed);
             names(x) <- sprintf("\\textbf{%s}", names(x))
             x},
            format = "latex", booktabs = TRUE, row.names = FALSE,
            align = 'c', escape = FALSE)
t3 <- kable({x <- subset(Data, Fruit=="Apple", select = Score:Percentage);
             names(x) <- sprintf("\\textbf{%s}", names(x))
             x},
            format = "latex", booktabs = TRUE, row.names = FALSE,
            align = 'c', escape = FALSE)

cat(c("\\begin{table}[!htb]
    \\begin{minipage}{.35\\linewidth}
      \\centering",
        t1,
    "\\end{minipage}%
    \\begin{minipage}{.35\\linewidth}
      \\centering",
        t2,
    "\\end{minipage}%
    \\begin{minipage}{.35\\linewidth}
      \\centering",
        t3,
    "\\end{minipage} 
\\end{table}"
)) 
```

1 个答案:

答案 0 :(得分:1)

对于与表格相关的问题,您可以使用以下内容来获得所需的布局。通过将列名称包装在 map.addListener('bounds_changed', function() { searchBox.setBounds(map.getBounds()); }); 中来获取粗体标题。如果您希望表格标题能够适应HTML输出,则需要额外的逻辑(或者您需要使用不同的表生成包)。这样,您需要在\code{textbf}来电中设置escape = TRUE

将内容居中,就像在kable函数中使用align参数一样简单。

kable

如果在t1 <- kable({x <- subset(iris, Sepal.Length=="5.1", select = Petal.Length:Species); names(x) <- sprintf("\\textbf{%s}", names(x)) x}, format = "latex", booktabs = TRUE, row.names = FALSE, align = 'c', escape = FALSE) 的上方和下方放置一行空白区域,则您的剖面标题会正确显示。

要使部分标题居中,您可能需要搜索https://tex.stackexchange.com/

上的提示

# Iris版本

由于某些原因我不明白,我必须在这些表中设置pixiedust参数。在tabcolsep环境中,您需要使用minipage。但是,这似乎可以很好地近似你想要的而不需要编辑数据源。

在使用百分比的情况下,您需要使用float = FALSE

sprinkle(halign = "center", sanitize = TRUE)