Tables rmarkdown manuelles simples qui ont l'air bien en HTML, PDF et DOCX

Comment puis-je formater manuellement et simplement une table dans RMarkdown qui aura l'air bien lorsqu'elle sera convertie en HTML (en utilisant les paquets knitr et markdown), PDF (en utilisant pandoc et miktex) et docx (en utilisant pandoc)?

Je veux pouvoir écrire de petites tables dans RMarkdown qui ne sont pas le résultat de fonctions R qui ont l'air bien dans les trois formats que j'utilise le plus souvent. Jusqu'à présent, j'ai trouvé un format qui semble bon dans 2 des 3 formats, est 3/3 possible?

Un. Cela semble bon après tricot HTML mais pas bon dans le PDF ou docx

<table>
<tr>
<td>Eggs</td>
<td>Ham</td>
</tr>
<tr>
<td>Basil</td>
<td>Tomato</td>
</tr>
</table>

Deux. Celui-ci semble bon après tricot HTML mais pas bon dans le PDF ou docx

| Tables        | Are           | Cool  |
| ------------- |:-------------:| -----:|
| col 3 is      | right-aligned | $1600 |
| col 2 is      | centered      |   $12 |
| zebra stripes | are neat      |    $1 |

Trois. Celui-ci ne semble pas bon après Knit HTML mais est bon dans le PDF et docx (meilleure option jusqu'à présent)

V1         Tweedledee       Tweedledum
--------   --------------   ----------------
Age        14               14
Height     3'2"             3'2"
Politics   Conservative     Conservative
Religion   "New Age"        Syrian Orthodox
---------  --------------   ----------------

Quatre. Cela semble bon après tricoter HTML et faire PDF et docx (gagnant!) mais n'est pas le formatage manuel que je suis après.

```{r table1, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'}
require(pander)
panderOptions('table.split.table', Inf)
set.caption("Data on cars")
pander(mtcars, style = 'rmarkdown')
```

Voici comment je fais les fichiers PDF et docx:

filen <- "table" # name of my RMarkdown file without suffix
knit(paste0(filen,".Rmd"))

# make PDF
system(paste0("pandoc -s ", paste0(filen,".md"), " -t latex -o ", paste0(filen,".pdf"), " --highlight-style=tango  -S"))

# make docx
system(paste0("pandoc -s ", paste0(filen,".md"), " -o ", paste0(filen,".docx"), " --highlight-style=tango  -S"))
31
demandé sur Ben 2013-11-15 13:06:19

1 réponses

Inspiré par les commentaires de daroczig, en particulier l'indice que pander traduit par la syntaxe de pandoc, j'ai regardé de plus près la documentation pander et trouvé une référence à cat. Après quelques expérimentations, j'ai trouvé le gagnant:

```{r table2, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'}
tabl <- "  # simple table creation here
| Tables        | Are           | Cool  |
|---------------|:-------------:|------:|
| col 3 is      | right-aligned | $1600 |
| col 2 is      | centered      |   $12 |
| zebra stripes | are neat      |    $1 |
"
cat(tabl) # output the table in a format good for HTML/PDF/docx conversion
```

Cela produit des tableaux uniformément beaux en HTML, PDF et docx dans mes tests. Maintenant, je suis parti pour upvote daroczig sur d'autres questions pour le remercier de m'avoir amené à la solution.

Si vous avez besoin d'une légende pour votre table... alors vous aurez besoin pour le faire un peu différemment. Notez que la légende ne sera visible que dans le PDF, pas dans le HTML:

```{r table-simple, echo=FALSE, message=FALSE, warnings=FALSE, results='asis'}
require(pander)
panderOptions('table.split.table', Inf)
set.caption("My great data")
my.data <- " # replace the text below with your table data
  Tables        | Are           | Cool
  col 3 is      | right-aligned | $1600 
  col 2 is      | centered      |   $12 
  zebra stripes | are neat      |    $1"
df <- read.delim(textConnection(my.data),header=FALSE,sep="|",strip.white=TRUE,stringsAsFactors=FALSE)
names(df) <- unname(as.list(df[1,])) # put headers on
df <- df[-1,] # remove first row
row.names(df)<-NULL
pander(df, style = 'rmarkdown')
```
24
répondu Ben 2013-12-05 03:39:24