我正在使用knitr(1.9.5和1.9.17)和rmarkdown(0.5.3.1),并希望在pdf输出中保持数字位置。生成的pdf文件在使用块选项fig.pos="H"
时正常工作。
但是,当设置fig_caption: yes
时,数字位置不成立
yaml header。
我该如何解决这个问题?感谢您的任何建议。
编辑:
了解乳胶的漂浮环境。我将float
包添加到标题中。
\usepackage{float}
但是生成的tex文件始终在htbp
环境中使用figure
,而不考虑使用的任何fig.pos
选项。手动将htbp
更改为H
后,所有数字的位置都会保留。
这是我的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
答案 0 :(得分:15)
正如安德鲁指出的那样,这个fig.pos
并没有在块中工作,但如果将它放在全局选项中它会起作用:
```{r global_options, include=FALSE}
knitr::opts_chunk$set(fig.pos = 'H')
```
编辑:以上显然习惯于在序言中工作并需要\usepackage{float}
:
header-includes:
\usepackage{float}
另见here。
答案 1 :(得分:13)
更新查看此更好的解决方案here。 (以下问题的摘要仍然很好,但请点击链接以获得更好的解决方案)。
总结一下RStudio中的一些测试
knitr chunk参数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文件并使用"编译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)
```
答案 2 :(得分:9)
对我来说,添加float
软件包,然后在YAML中添加\floatplacement{figure}{H}
解决了如下问题:
---
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}
---
答案 3 :(得分:6)
虽然@Bangyou提供的答案有效,但它使针织变得复杂。
您还可以为latex中的数字位置设置全局默认选项,包括在YAML标题中包括:
\makeatletter\renewcommand*{\fps@figure}{H}\makeatother
正如here所解释的那样(和\makeat...
部分here)。
这样你就可以使用RStudio或rmarkdown :: render中的编织按钮来完成它。
问题是,所有数字都用H强制填充,你不能设置一个浮动数据。
答案 4 :(得分:4)
正如Yihui在他的回答中提到的那样(Figure position in markdown when converting to PDF with knitr and pandoc),我们不能期望太多关于mardown的格式化。要解决此问题,只需编写一些R脚本以将htbp
替换为H
。
与knitr包中的knit
相比,我发现rmarkdown中的render
更适合导出tex
文件。只需记住在您的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')
答案 5 :(得分:4)
对我有用的选项:
在开头的.tex中:\usepackage{float}
。
在Rmd的开头:knitr::opts_chunk$set(fig.pos = 'H')
。大写的H
。
在每个带有图像的块中:fig.cap="lorem blabla"
和out.extra=''
(参数值=空字符串)。
否需要定义:
在yaml中fig_caption: yes
和keep_tex: yes
。
这些选项使图像保持其位置,可以是include_graphics
和R代码生成的图。
我在bookdown
环境中使用它们,按预期生成pdf和html:)
答案 6 :(得分:0)
如果其他人遇到此线程,我必须使用小写字母“ h”,并且它在R版本3.5.3和Latex 2018中有效。
```{r, echo=FALSE, fig.pos="h"}
plot(cars)
```
答案 7 :(得分:0)
official documentation中的代码可以帮助我,帮助其他人发现它有用。
---
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()
```