来自 Rmarkdown 的 pdf - landscape 和 aspectratio=169

pdf from Rmarkdown - landscape and aspectratio=169

提问人:user2338823 提问时间:10/30/2023 最后编辑:user2338823 更新时间:11/18/2023 访问量:236

问:

我从 Rmarkdown 文件制作了一个 PDF。 我希望以横向模式制作 pdf,以便它占据全屏。 横向模式有效,但不会占据全屏。我读过这篇文章,其中建议设置 aspectratio=169。这是我做不到的。

下面是一个可重现的例子:


---
title: "Testing landscape and aspect ratio"
output: 
  pdf_document:
    number_sections: true
classoption:
  - landscape
  - "aspectratio=169"
header-includes:
   - \usepackage{dcolumn} 
documentclass: article
geometry: margin=1.5cm
---

```{r}

plot(rnorm(100))

```

试过.这确实使它成为横向的,但不会占据整个屏幕。classoption: landscape

下面是输出的屏幕截图:

Picture which does not cover the whole page

这是我的会话信息():

> sessionInfo()
R version 4.3.1 (2023-06-16)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 11 (bullseye)

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.13.so;  LAPACK version 3.9.0

locale:
 [1] LC_CTYPE=en_IN       LC_NUMERIC=C         LC_TIME=en_IN       
 [4] LC_COLLATE=en_IN     LC_MONETARY=en_IN    LC_MESSAGES=en_IN   
 [7] LC_PAPER=en_IN       LC_NAME=C            LC_ADDRESS=C        
[10] LC_TELEPHONE=C       LC_MEASUREMENT=en_IN LC_IDENTIFICATION=C 

time zone: Asia/Kolkata
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] knitr_1.43

loaded via a namespace (and not attached):
[1] compiler_4.3.1 tools_4.3.1    xfun_0.39     
> 

更新:我的 R 版本已更改,但此代码的输出仍然相同。

这是我的新sessionInfo():

> sessionInfo()
R version 4.3.2 (2023-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 11 (bullseye)

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.13.so;  LAPACK version 3.9.0

locale:
 [1] LC_CTYPE=en_IN       LC_NUMERIC=C         LC_TIME=en_IN       
 [4] LC_COLLATE=en_IN     LC_MONETARY=en_IN    LC_MESSAGES=en_IN   
 [7] LC_PAPER=en_IN       LC_NAME=C            LC_ADDRESS=C        
[10] LC_TELEPHONE=C       LC_MEASUREMENT=en_IN LC_IDENTIFICATION=C 

time zone: Asia/Kolkata
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_4.3.2
> 

R-Markdown PDF 生成 针织

评论

0赞 jubilatious1 11/16/2023
您是否尝试过添加到您的代码块中?另外,您是否只打算将输出保留在显示设备上(而不是打印)?如果是这样,你有没有看过输出?fig.align='center'beamer

答:

4赞 Julian 11/7/2023 #1

您可以使用块选项。请参阅此帖子:“% 被转换为 \textheight 和 \linewidth 的比例因子)”out.extra='keepaspectratio=true'

---
title: "Testing landscape and aspect ratio"
output: 
  pdf_document:
    number_sections: true
classoption:
  - landscape
  - "aspectratio=169"
header-includes:
   - \usepackage{dcolumn} 
documentclass: article
geometry: margin=1.5cm
---

```{r, out.extra='keepaspectratio=true', out.height='100%', out.width="100%"}
plot(rnorm(100))
```

结果:

enter image description here

评论

0赞 user2338823 11/7/2023
非常感谢您的回复。不过它对我不起作用。我已经添加了我的会话信息。我们是否在使用不同版本的针织品?
0赞 Julian 11/7/2023
我在 knitr_1.43 和 R 4.3.1 上
0赞 Julian 11/13/2023
我想它仍然对你不起作用?
0赞 user2338823 11/13/2023
没错。它对我不起作用。
0赞 user101089 11/16/2023 #2

因为这是一个 base-R 图,所以您可以通过控制某些设置更轻松地执行一些您想要的事情。例如,为避免在绘图周围留出多余空间,请使用par()

par(mar=c(4,4,1,1)+.1)
plot(rnorm(100))
2赞 Olivier 11/18/2023 #3

以前的答案针对的是图形方向/比例,而实际问题涉及页面方向/比例。此外,关于页面方向和大小/比率,我认为在这种情况下不适合控制页面大小,因为它意味着在实际使用 (LaTeX) 类时使用了 (LaTeX) 类(并且它不会识别参数)。aspectratiobeamerarticleaspectratio

为了满足您的请求,您可以使用几何包的规范,而不是为类指定选项,例如替换当前标头:

---
title: "Testing landscape and aspect ratio"
output: 
  pdf_document:
    number_sections: true
classoption:
  - landscape
  - "aspectratio=169"
header-includes:
   - \usepackage{dcolumn} 
documentclass: article
geometry: margin=1.5cm
---

有了这个:

---
title: "Testing landscape and aspect ratio"
output: 
  pdf_document:
    number_sections: true
header-includes:
   - \usepackage{dcolumn} 
documentclass: article
geometry: margin=1.5cm, paperwidth=24cm, paperheight=13.5cm 
---

行的 和 参数告诉几何包为页面提供特定的尺寸/纵横比(16/9 纵横比由 13.5 = 9/16 * 24 或相反 24 = 16/9 * 13.5 这一事实确保)。当然,您可以更改确切的尺寸,这将影响相对字体大小和/或纵横比。此外,您不再需要该零件。paperwidthpaperheightgeometry:classoption

请注意,为了澄清问题的某些方面,您必须知道将 RMarkdown 文档编译为 PDF 文件使用 LaTeX 文档准备系统。标题中的几个参数实际上涉及 LaTeX 将如何生成最终的 PDF(、、、)、几何(和 dcolumn)作为 LaTeX 包。documentclassclassoptionheader-includesgeometry

关于这些值的选择:

和参数记录在LaTeX的“geometry”包中(参见例如 在CTAN上:https://ctan.org/pkg/geometry)。对于习惯于使用 LaTeX 的人来说,在这些行中“识别”LaTeX 选项是相对自然的,即使它们在 LaTeX 文档中的结构并不完全如此(但它们的名称是相同的)。paperwidthpaperheight

关于这些具体数字的选择,它是相对的 任意。要考虑的事项是:

  • 这些尺寸表示 pdf 页面的物理大小(在 感觉,如果文档没有打印,它们的大小会是多少 适应打印机中的纸张)
  • 如果这些尺寸减小...相对字体大小将增加 因为 LaTeX 会将相同的字体投射到较小的虚拟纸上,
  • 如果这些尺寸增加......相对字体大小将 减少,因为 LaTeX 会将相同的字体投射到更大的字体上 虚拟纸,
  • 它还可能影响页面上的图形显示,具体取决于图形尺寸的控制方式,
  • 我从 16x9cm 尺寸开始处理,特别是纸张宽度和 PaperHeight,并估计字体太大了,不符合我的口味, 然后把它们翻了一番,觉得字体太小了,不适合幻灯片, 然后我最终尝试将 16x9cm 乘以 1.5 倍,这 给了我 24x13.5 厘米,我发现还可以。
  • 但是可以任意改变这些尺寸(即使使用较小的 步数和比率与 16/9 不同),具体取决于目标 达到。
  • 也可以指定不同的单位(pt = points, in = 英寸...

评论

0赞 user2338823 11/18/2023
亲爱的奥利维尔,这很完美。非常感谢。我有一个小问题:你是怎么得出纸张宽度和纸张高度值的?我知道它们的比率必须是 16:9,但我如何获得精确的值?
1赞 Olivier 11/18/2023
我在原始回复中添加了与此特定方面相关的答案。