繁体   English   中英

如何使用rmarkdown和pandoc在表中编写多级(项目符号)列表

[英]How to write multi-level (bullet) lists in a table using rmarkdown and pandoc

我期待通过创建一个PDF文档中的表格rmarkdownknitrpander 我能够创建一个简单的项目符号列表,但现在需要该列表中的另一个级别。 在下表中,我要求“ Rave reviews”项目符号是“ Offers workshops ...”项目符号的子项目符号。

多项目符号http://i59.tinypic.com/jtmk43.png

我遇到的问题与“ Description列中的mytable数据框中的以下代码行有关。 尽管我尝试使用\\x20 [1]创建子项目符号所需的4个空格,但这些空间不会出现-因此没有子项目符号(尽管未显示错误)。 我还尝试了最简单的方法,简单地在代码中添加4个空格无济于事。 还尝试将我的R选项设置为包括strip.white = FALSE ,但这也没有被证明有用(请参阅下文)。

---
title: "xxx"
author: "xxx"
output:
  pdf_document:
    fig_height: 4
    fig_width: 10
    highlight: tango
  word_document: default
geometry: margin=3cm
---

```{r global_options, include=FALSE, echo=FALSE}
require(knitr)
opts_chunk$set(fig.width=8, fig.height=4, fig.path='figs/', dpi=500,
               echo=FALSE, warning=FALSE, message=FALSE, results='hide', strip.white = FALSE)
```

```{r pandoc_options, include=FALSE, echo=FALSE}
require(pander)
panderOptions('digits', 3)
panderOptions('round', 3)
panderOptions('keep.trailing.zeros', TRUE)
panderOptions('keep.line.breaks', TRUE)
```

```{r concepts, echo=FALSE}
mytable = data.frame(
    Concept     = c("Decoded", "XXX"),
    Description = c("* Founded in 2011\ \n* Offers workshops to take people from zero skills and knowledge in programming through to coding a multi-platform app using HTML, CSS and Javascript in a single day\ \n\x20\x20\x20\x20+ Rave reviews", "XXX"),
    Website     = c("http://decoded.com/uk/","XXX"))
```

``` {r concepts_descriptions, results = 'asis'}
pander::pander(mytable, keep.line.breaks = TRUE, style = 'grid', justify = 'left')
```

参考

[1]在尝试了\\\\s\\s\\ \\s\\\\\\s等无济于事后( 这里建议),我从这里得到了\\x20提示。

您可以将项目嵌套在项目符号内:

```{r concepts, echo=FALSE}
mytable = data.frame(
    Concept     = c("Decoded", "XXX"),
    Description = c("* Founded in 2011\ \n
    * Offers workshops to take people from zero skills and knowledge in programming through to coding a multi-platform app using HTML, CSS and Javascript in a single day\ \n
    \\begin{itemize}
      \\item Rave reviews \n
      \\item e.t.c
    \\end{itemize}", "XXX"),
    Website     = c("http://decoded.com/uk/","XXX"))
```

编辑:我不知道您正在使用pdf,但这是html解决方案

  1. 我会用一个矩阵
  2. 我会使用htmlTable包,该包允许比kable或pander更高级的表

首先为您的列表做一个包装

make_list <- function(...) {
  paste0("<ul>", sprintf('<li>%s</li>', substitute(...())), '</ul>', collapse = '')
}

make_list(one, two, three)

# [1] "<ul><li>one</li></ul><ul><li>two</li></ul><ul><li>three</li></ul>"


library('htmlTable')
mytable <- matrix(c("Decoded", "XXX",
                    make_list('Founded in 2011', 'Offers workshops to take people from zero skills and knowledge in programming through to coding a multi-platform app using HTML, CSS and Javascript in a single day','Rave reviews'),
                    "XXX",
                    "http://decoded.com/uk/","XXX"), 2,
                  dimnames = list(NULL, c('Concept','Description','Website')))

htmlTable(mytable, align = 'lll')

在此处输入图片说明

很好,但是垂直对齐不好,并且框太宽。 但是我们可以使用htmlTable的css参数之一进行htmlTable 垂直对齐将文本推到顶部而不是中心,max-width设置文本换行,自动宽度使每个文本都有自己的宽度

htmlTable(mytable, align = 'lll', align.header = 'lll',
          css.cell = "width: auto; max-width: 250px; vertical-align: top;")

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM