Подтвердить что ты не робот

Позиция позиции в уценке при преобразовании в PDF с помощью knitr и pandoc

Я пытаюсь контролировать положение сюжета при преобразовании в PDF с помощью knitr и pandoc. Мой .Rmd файл выглядит так:

# My report

Some text some text some text some text some text some text some text some text some text


```{r myplot, echo=FALSE, fig.pos="placeHere", results='hide'}

library(ggplot2)

ggplot(mtcars, aes(mpg, drat)) + geom_point()

```

Some text some text some text some text some text some text some text some text some text

\usepackage{graphicx}
\begin{figure}[placeHere]
  \centering
    \includegraphics[width=0.5\textwidth]{placeHere}
\end{figure}

Some text some text some text some text some text some text some text some text some text

Я конвертирую в PDF, используя предоставленные здесь функции: http://quantifyingmemory.blogspot.co.uk/2013/02/reproducible-research-with-r-knitr.html

Как разместить график между вторым и третьим блоками текста? Латексный код не работает, поскольку он в настоящее время стоит.

EDIT: Это то, что я сейчас пытаюсь сделать.

# My report

   ```{r setup, include=FALSE}
# set global chunk options
opts_chunk$set(cache=FALSE)
library(ggplot2)
```

```{r, echo=FALSE, fig.height=3}

ggplot(mtcars, aes(disp, hp)) + geom_point()


```



Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 

Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 


Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 


Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 


```{r, echo=FALSE, fig.height=3}



ggplot(mtcars, aes(vs, am)) + geom_point()


```



Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 

Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 


Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 


```{r, echo=FALSE, fig.height=6}



ggplot(mtcars, aes(disp, cyl)) + geom_point()

```


```{r, echo=FALSE, fig.height=6}

ggplot(mtcars, aes(hp, qsec)) + geom_point()


```


Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 




```{r, echo=FALSE, fig.height=3}

ggplot(mtcars, aes(hp, wt)) + geom_point()

```



Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 



```{r, echo=FALSE, fig.height=5}

ggplot(mtcars, aes(mpg, drat)) + geom_point()

```




Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 
4b9b3361

Ответ 1

Я не знаю такой опции для pandoc, чтобы установить плавающий параметр цифр при преобразовании документа Markdown в LaTeX. Если вы выберете Markdown за его простоту, вы не должны ожидать слишком много энергии, даже с мощными инструментами, такими как pandoc. Итог: Markdown не LaTeX. Он был разработан для HTML вместо LaTeX.

Два пути:

  • используйте синтаксис Rnw (R + LaTeX) вместо Rmd (R Markdown) (примеры); то вы сможете использовать опцию chunk fig.pos='H' после \usepackage{float} в преамбуле; в этом случае у вас есть полная мощность LaTeX, и pandoc не будет задействован

  • взломать документ LaTeX, созданный pandoc, например. что-то вроде

    library(knitr)
    knit('foo.Rmd')  # gives foo.md
    pandoc('foo.md', format='latex')  # gives foo.tex
    x = readLines('foo.tex')
    # insert the float package
    x = sub('(\\\\begin\\{document\\})', '\\\\usepackage{float}\n\\1', x)
    # add the H option for all figures
    x = gsub('(\\\\begin\\{figure\\})', '\\1[H]', x)
    # write the processed tex file back
    writeLines(x, 'foo.tex')
    # compile to pdf
    tools::texi2pdf('foo.tex')  # gives foo.pdf
    

Если вам не нравятся эти решения, рассмотрите запрос новой функции для pandoc в Github, затем сидите и ждите.

Ответ 2

Я представляю альтернативное решение. Вместо того, чтобы вставлять символы [H] в латексный документ поспечным способом, я предлагаю переопределить среду фигур, чтобы игнорировать любые аргументы позиции и использовать [H].

Для этого создайте .tex файл в том же каталоге, что и файл .Rmd, который переопределяет среду рисунков и обновляет заголовок YAML в .Rmd, чтобы включить файл во время компиляции.

Вот пример файла .tex:

\usepackage{float}
\let\origfigure\figure
\let\endorigfigure\endfigure
\renewenvironment{figure}[1][2] {
    \expandafter\origfigure\expandafter[H]
} {
    \endorigfigure
}

Вот пример .Rmd, который включает его (предполагая, что вы вызвали файл .tex 'preamble-latex.tex'):

---
title: "example"
author: "you"
date: "`r format(Sys.time(), '%d %B %Y')`"
output:
  rmarkdown::pdf_document:
    fig_caption: yes        
    includes:  
      in_header: preamble-latex.tex
---

```{r, fig.cap='Markdownvellous!'}
plot(1:10, 1:10)
```

Ответ 3

У меня есть несколько проектов, в которых я конвертирую из .Rmd в .pdf(в основном презентацию слайдера) и хочу, чтобы графики не плавали (плавающие цифры действительно не работают со слайд-презентациями).

Подход, который я использую, заключается в том, чтобы добавить экранированное пространство после строки в файле .md. Это означает, что график находится внутри абзаца, а не является его собственным абзацем, это означает, что pandoc не будет обертывать его в среде рисунков (это также означает, что я не могу использовать надпись с ним), и поэтому он помещает его точно это положение.

Я использую Makefile для выполнения всех преобразований для меня, поэтому после запуска R и knitr он автоматически запустит Perl script (хотя это можно сделать с помощью R или других инструментов), который находит, где находятся графики и добавляет экранированное пространство в конце строки.

Ответ 4

Я использую KnitR и уценку в RSTUDIO, решение для моего случая добавляет в преамбулу \usepackage{float}:

    ---
title: "Proyect 2"
author: "FV"
date: "2016-12-3"
output:
  pdf_document:
    fig_caption: yes
    fig_crop: no
    fig_height: 2
    fig_width: 3
    highlight: haddock
    keep_tex: yes
    number_sections: yes
    toc: yes
    toc_depth: 2
  html_document:
    fig_caption: yes
    theme: journal
    toc: yes
    toc_depth: 2
header-includes: 
- \usepackage{graphicx}
- \usepackage{float}
---

И затем добавив эти строки кода (fig.pos = 'H') в самые первые строки:

```{r echo=FALSE,warning=FALSE}
 library(knitr)
  opts_chunk$set(fig.path='figure/graphics-', 
                 cache.path='cache/graphics-', 
                 fig.align='center',
                 external=TRUE,
                 echo=TRUE,
                 warning=FALSE,
                 fig.pos='H'
                )
  a4width<- 8.3
  a4height<- 11.7
```

Ответ 5

Если вы хотите просто контролировать вручную, где поставить свои цифры, используя эту веб-страницу: http://www.rci.rutgers.edu/~ag978/litdata/figs/, я обнаружил, что если вы добавите одну обратную косую черту "\" где-то после ваших графических команд, графики не будут плавать, а будут напечатаны в их текущем местоположении.

Если вам нужны только некоторые графики, вы можете изменить эту опцию для каждого.

В вашем примере:

# My report

```{r setup, include=FALSE}
# set global chunk options
knitr::opts_chunk$set(cache=FALSE)

library(ggplot2)
```

Some text Some text Some text Some text Some text Some text Some text Some       text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 

```{r, echo=FALSE, fig.height=3}
ggplot(mtcars, aes(disp, hp)) + geom_point()
```
\

Some text Some text Some text Some text Some text Some text Some text Some       text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some text Some textSome text Some text Some text 

(и т.д.)

Ответ 6

Это то, что вам нужно:

```{r setup, include=FALSE}
# set global chunk options
opts_chunk$set(cache=FALSE)
library(ggplot2)
```

# My report

Some text some text some text some text some text some text some text some text some text

Some text some text some text some text some text some text some text some text some text

```{r myplot, echo=FALSE}

ggplot(mtcars, aes(mpg, drat)) + geom_point()

```

Some text some text some text some text some text some text some text some text some text

Ответ 7

Решение не слишком просто, может быть, кто-то еще сможет его оптимизировать.

Основные шаги. (Windows 7)

  • Вы можете добавить аргумент fig.pos="H" к параметрам knitr, глобально или для каждого отдельного фрагмента. ПРИМЕЧАНИЕ: столица H. Это указывает латекс на то, чтобы поместить фигуры точно так, как они вызывают в файле Rmd.

  • НО, для этого требуется, чтобы пакет использовался латекс, это можно указать в шаблоне, который pandoc использует для создания pdf файлов. Вы делаете это, добавляя строку \usepackage{float}

  • НО, сначала вам нужно найти текущий файл шаблона для изменения. Я ничего не мог найти, но вы можете заставить pandoc распечатать содержимое шаблона в консоли с помощью этой команды: pandoc -D latex

  • Вырезать и вставить этот код шаблона в пустой текстовый файл.

  • Добавьте строку: \usepackage{float}

  • Сохраните под именем файла "default.latex" в каталоге, например C:\Users\YOURNAME\pandoc\templates

  • Добавьте опцию --data-dir=C:/Users/YOURNAME/pandoc/templates" к вашему вызову pandoc OR Pandoc.convert("my file.md", format="pdf", options=c("--data-dir=C:/Users/YOURNAME/pandoc/templates")), если используете pander в R.

Я надеюсь, что это сработает для вас.