web-dev-qa-db-ja.com

knitrのpdf出力で図のキャプションで図の位置を保持する方法は?

Knitr(1.9.5および1.9.17)とrmarkdown(0.5.3.1)を使用していますが、pdf出力で図の位置を保持したいと思います。生成されたPDFファイルは、チャンクオプションfig.pos="H" 使用されている。

ただし、fig_caption: yesはyamlヘッダーに設定されます。

この問題を修正するにはどうすればよいですか?提案をありがとう。

編集:

ラテックスのフロート環境を学習した後。 floatパッケージをヘッダーに追加します。

\usepackage{float}

ただし、生成されたtexファイルは、htbp環境でfigureを使用し、fig.posオプションが使用されます。 htbpHに手動で変更すると、すべての図の位置が保持されます。

これはrmdファイルの私の例です:

---
title: "Untitled"
output:
  pdf_document:
    fig_caption: yes
    includes:
        in_header: mystyles.sty
---

# Section 1


Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.


```{r fig1, echo=FALSE, fig.height=8.5, fig.pos="H"}
plot(cars)
```

# Section 2

More test

```{r fig2, echo=FALSE, fig.height=8.5, fig.pos="H"}
plot(cars)
```

# Section 3

```{r fig3, echo=FALSE, fig.height=8.5, fig.pos="H"}
plot(cars)
```

More test
28
Bangyou

Yihuiが答えで言及したように( PDF with knitrおよびpandocに変換するときのマークダウンの図の位置 )、mardownからのフォーマットについてあまり期待することはできません。問題は、Rスクリプトをいくつか書いてhtbpHに置き換えるだけです。

Knitrパッケージのknitと比較して、rmarkdownのrendertexファイルをエクスポートする方がよいことがわかりました。 rmarkdownファイルのyamlヘッダーにkeep_tex: yesを追加することを忘れないでください。

library(rmarkdown)
render('filepath.Rmd')
x <- readLines('filepath.tex')
pos <- grep('begin\\{figure\\}\\[htbp\\]', x)
x[pos] <- gsub('htbp', 'H', x[pos])
writeLines(x, 'filepath.tex')
tools::texi2pdf('filepath.tex', clean = TRUE)  # gives foo.pdf

file.remove('filepath.tex')
4
Bangyou

アンドリューが指摘したように、このfig.posは一括では機能しませんが、グローバルオプションに配置されている場合は機能します。

```{r global_options, include=FALSE}
knitr::opts_chunk$set(fig.pos = 'H')
```

EDIT:明らかに動作するために使用される上記の\usepackage{float}プリアンブル内:

header-includes:
 \usepackage{float}

here もご覧ください。

17
Davor Josipovic

私にとっては、floatパッケージを追加してから\floatplacement{figure}{H} YAMLで次のような問題を解決しました:

---
title: "test"
date: "`r Sys.Date()`"
output: 
  pdf_document :
    keep_tex: true
    number_sections: true
header-includes:
 \usepackage{booktabs}
 \usepackage{longtable}
 \usepackage{array}
 \usepackage{multirow}
 \usepackage[table]{xcolor}
 \usepackage{wrapfig}
 \usepackage{float}
 \floatplacement{figure}{H}
---
13
user9112767

Updateこのより良い解決策を見てください here 。 (以下の問題の要約はまだ良いですが、より良い解決策へのリンクをたどってください)。

RStudioでのいくつかのテストを要約するには

Knitrチャンク引数fig.pos = "H"は、fig_caption: yesがyamlヘッダーにない限り機能します。

生成された.texの各図は次のようになります

\subsection{my_section}\label{my_section}

\includegraphics{path_to_fig.pdf}

ただし、fig_caption: yesがyamlヘッダーにある場合、.texは次のようになります

\subsection{my_section}\label{my_section}

\begin{figure}[htbp]
\centering
\includegraphics{path_to_fig.pdf}
\caption{}
\end{figure}

fig.pos = "H"は使用されていませんが、代わりに"htbp"があります。

RStudioを使用したこの回避策:

プット

fig_caption: yes
keep_tex: yes

同様にyamlで

header-includes: \usepackage{float}

次に、生成された.texファイルで[htbp]を検索して[H]に置き換えます

次に、RStudioで.texファイルを開き、[Compile PDF]ボタンを使用します。


例.Rmd

---
title: "Testing fig placement with captions"
author: "Andrew Dolman"
date: "1 September 2015"
output: 
  pdf_document: 
    fig_caption: yes
    keep_tex: yes
header-includes: \usepackage{float}
---

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

```{r}
summary(cars)
```

You can also embed plots, for example:

```{r, echo=FALSE, fig.pos="H"}
plot(cars)
```

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

```{r, echo=FALSE, fig.pos="H"}
plot(cars)
```
13
Andrew

@Bangyouが提供する答えは機能しますが、編み物を複雑にします。

YAMLヘッダーに含まれる以下を含む、latexでのFigure配置のグローバルデフォルトオプションを設定することもできます。

\makeatletter\renewcommand*{\fps@figure}{H}\makeatother

説明したように here (および here\makeat... part)。

この方法では、RStudioのニットボタンまたはrmarkdown :: renderを使用するだけで済みます。

問題は、すべての数字を強制的にHで塗りつぶし、1つを浮かせて設定できないことです。

7
Oscar de León

私のために働いたオプション:

先頭に置かれた.tex内で_\usepackage{float}_。

Rmdの先頭:knitr::opts_chunk$set(fig.pos = 'H')Hは大文字です)。

そして、画像を含むすべてのチャンク:_fig.cap="lorem blabla"_および_out.extra=''_(パラメーター値=空の文字列)。

No定義する必要がある:yamlで_fig_caption: yes_および_keep_tex: yes_.

これらのオプションは、_include_graphics_およびRコードによって生成されたプロットのいずれかのために、画像の位置を保持します。

bookdown環境でそれらを使用し、期待どおりにpdfとhtmlを生成しました:)

5
pablo_sci

PDFに変換するときのマークダウンの図の位置 からのコードは、私を助け、他の誰かがそれを有用であると思うのを助けます。

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

```{r}
knitr::knit_hooks$set(plot = function(x, options)  {
  knitr::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()
```
0
Shixiang Wang

他の誰かがこのスレッドに出くわした場合、小さなケース「h」を使用する必要があり、Rバージョン3.5.3およびlatex 2018で機能しました。

```{r, echo=FALSE, fig.pos="h"}
plot(cars)
```
0
tcratius