Как сделать отступ в rmarkdown для вывода текстового документа? - PullRequest
0 голосов
/ 09 октября 2018

Я пишу код внутри цикла, который выглядит следующим образом:

for (i in c(1:5)) {

    cat("  ", i,".","**", "Header one","**" , " "  , sep = "\n")
    cat("A)", "Subheader one"  , sep = "\n")
    cat("B)", "Subheader two"  , sep = "\n")
    } 

Я хочу, чтобы он отображался в отображаемом файле как:

  Header One  
          A) Subtitle one
          B) Subtitle two

как это сделать?Редактировать Это предназначено для экспорта в слово .docx

1 Ответ

0 голосов
/ 09 октября 2018

Несколько соображений:

  1. Используйте параметр чанка results="asis", это говорит knitr - записать необработанные результаты из R в выходной документ (которыйпредполагает, что он действителен в файле уценки) (ref: https://yihui.name/knitr/options/#text-results)

  2. На самом деле вам не нужно принудительно увеличивать число для списка верхнего уровня, сами цифры игнорируются pandocи преобразован в последовательный список (ref: https://pandoc.org/MANUAL.html#ordered-lists)

  3. Если вы добавите слишком много пробелов в подсписки, их можно считать предварительно отформатированным блоком кода, поэтому будьте осторожны. А именно, 8 слишком много, 4 работы.

Это работает:

---
output: html_document
---

```{r chunk1, echo=FALSE, results="asis"}
for (i in 1:5) {
  cat("1. Header one",
      "    A) Subheader one",
      "    B) Subheader two",
      sep = "\n")
}
```

производит это:

markdown output screenshot

с этим базовым HTML:

<ol style="list-style-type: decimal">
<li>Header one</li>
</ol>
<ol style="list-style-type: upper-alpha">
<li>Subheader one</li>
<li>Subheader two</li>
</ol>
<ol style="list-style-type: decimal">
<li>Header one</li>
</ol>
<ol style="list-style-type: upper-alpha">
<li>Subheader one</li>
<li>Subheader two</li>
...

Примечания:

  • Мне кажется странным иметь так много пустых строк и тому подобное в вашем примере, поэтому я "эффективность"Выделите их. Если у вас есть определенные форматы, которые вы хотите / нуждаетесь, то вы можете сделать что-то вроде этого с помощью sprintf:

    ---
    output: html_document
    ---
    
    ```{r chunk1, echo=FALSE, results="asis"}
    for (i in 1:5) {
      cat(sprintf("1. Header %d", i),
          sprintf("    A) Subheader one - %d", i),
          "    F) Subheader two",
          sep = "\n")
    }
    ```
    

    для создания этогоs:

    more markdown output screenshot

  • c(1:5) соответствует 1:5, нет c() требование

  • несколько вызовов на cat в порядке, понимая, что вам необходимо тщательно управлять sep с между частями одного вызова и всем необходимым между вызовами на cat (я предпочитаю один вызов)

Редактировать

Я также экспортировал это в Word с:

---
output: word_document
---

, и подуровни также правильно с отступом:

screenshot of word output

Если вы видите что-то другое, то это может быть связано со стилем DOCX.Это обычно контролируется в справочном документе, ссылка: https://rmarkdown.rstudio.com/word_document_format#style_reference. Я использую rmarkdown-1.10 на R-3.5.1, если это отличается от вас, рассмотрите ваши варианты обновления.

...