web-dev-qa-db-ja.com

PDF knitrとpandocで変換する場合のマークダウンの図の位置

Knitrとpandocを使用してPDFに変換するときに、プロットの位置を制御しようとしています。私の.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

テキストの2番目と3番目のブロックの間にプロットを配置するにはどうすればよいですか?ラテックスコードは、現在のところ機能していません。

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 
32
luciano

MarkdownドキュメントをLaTeXに変換するときに、Figureのフローティングオプションを設定するpandocのこのようなオプションを認識していません。 Markdownをシンプルにするために選択する場合、pandocのような強力なツールを使用しても、それほど強力な機能を期待しないでください。一番下の行:MarkdownはLaTeXではありません。 LaTeXではなくHTML用に設計されました。

2つの方法:

  1. rmd(R Markdown)( examples )の代わりにRnw構文(R + LaTeX)を使用します。プリアンブルでfig.pos='H'の後にチャンクオプション\usepackage{float}を使用できます。この場合、LaTeXの全機能を使用でき、pandocは関与しません

  2. pandocによって生成されたLaTeXドキュメントをハックします。何かのようなもの

    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
    

これらのソリューションが気に入らない場合は、Githubでpandocに 新しい機能をリクエストする を検討してから、しばらく待ってください。

26
Yihui Xie

代替ソリューションを紹介します。 [H]シンボルをラテックスドキュメントに事後的に挿入する代わりに、Figure環境を再定義して位置引数を無視し、[H]を使用することをお勧めします。

これを行うには、Figure環境を再定義する.Rmdファイルと同じディレクトリに.texファイルを作成し、.RmdのYAMLヘッダーを更新して、コンパイル中にファイルを含めます。

.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)
```
75
paleo13

私はRSTUDIOでKnitRとmarkdownを使用しています。私の場合の解決策は、プリアンブル\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
```
11
Ferran VilBer

.Rmdから.pdfに変換するプロジェクト(主にビーマースライドプレゼンテーション)があり、グラフがフロートしないようにしたい(フローティングフィギュアは実際にはスライドプレゼンテーションでは機能しません)。

私が使用するアプローチは、.mdファイルの行の後にエスケープスペースを追加することです。これは、グラフがそれ自体の段落ではなく段落の内側にあることを意味します。これは、pandocが図環境でそれをラップしないことを意味します(キャプションを使用できないことも意味します)。その位置。

Makefileを使用してすべての変換を行うため、Rとknitrを実行した後、プロットの挿入場所を見つけてエスケープされたスペースを追加するPerlスクリプト(Rまたは他のツールを使用して実行できますが)を自動的に実行します行の終わり。

7
Greg Snow

あなたが探しているのは、このウェブページを使用して、フィギュアを置く場所を手動で制御することだけである場合: 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
Tamara vdD

Knitrフックを使用する

私はどういうわけかこの質問につまずき、別のアプローチを追加したいと思います。ここでは、knitrフックが提供する素晴らしい柔軟性を利用しています。プロットフックを変更して、knitr関数hook_plot_tex()を使用します。その後、figure環境を配置するためにRnwドキュメントで使用されるように、チャンクオプションfig.posを使用できます(figure環境を呼び出すには、fig.capを設定する必要があります)。

これは、OPが提供する例で機能します。彼らは(何らかの形で)もっと複雑な例でも動作すると思います。なぜこれが簡単にできるのか、Rmdドキュメントのデフォルトではないのか、私にはわかりません。多分Yihuiはそれを明確にすることができます。

コードは次のとおりです。

---
title: "Example"
author: "Martin"
output: pdf_document
---

```{r}
knitr::knit_hooks$set(plot = function(x, options)  {
  hook_plot_tex(x, options)
})
```


```{r myplot, echo=FALSE, results='hide', fig.cap='Test', fig.pos='h'}
library(ggplot2)
ggplot(mtcars, aes(mpg, drat)) + geom_point()
```

fig.pos='h'がない場合、通常、プロットは2ページ目にジャンプします。

4

これはあなたが望んでいることです:

```{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
0
Tyler Rinker