如何解决预订重现性
我正在处理一个大规模的bookdown 项目。源在 git repo 中,我们有两个作者和各种计算机。我们发现我们无法复制这本书 - 每台机器的构建方式略有不同,导致分页略有不同,最终导致 500 页以上的书中出现 2-3 页长度的变化。
作为一个具体的例子,我在两台 Mac 上构建了这本书,并且包都更新了。具体:
- R 4.0.5
- pandoc 2.13
- 预订 0.22
- rmarkdown 2.8
- 降价 1.1
- knitr 1.33
- 造型器 1.4.1
我无法解释为什么我们得到不同的输出。我们得到了不同的 .md 文件,所以它看起来像是工具链的 bookdown/markdown/knitr 部分。这是其中的几行:
19c19
< {\centering \includegraphics[height=3in]{images/facecone}
---
> {\centering \includegraphics[width=9.17in,height=3in]{images/facecone}
684c684
< mean(replicate(10000,t.test(rnorm(10,1),mu = 1)$p.value < .05))
---
> mean(replicate(10000,mu = 1)$p.value < .05))
大多数差异似乎是由于 styler
,因为我们使用的是
knitr::opts_chunk$set(tidy="styler")
书中的选项。不过,我仍然不明白为什么它在两台机器上的行为会有所不同。包含图形的差异一定是由于其他原因造成的。
当我们深入到本书的最终布局时,当我们无法在不同的机器上获得相同的结果时,就很难完成工作。对可能影响我们构建的其他环境因素的任何猜测将不胜感激。
感谢@yihui 的帮助,这里有更多信息应要求...
> xfun::session_info(c('rmarkdown','bookdown','styler'))
R version 4.0.5 (2021-03-31)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Catalina 10.15.7,RStudio 1.4.1106
Locale: en_US.UTF-8 / en_US.UTF-8 / en_US.UTF-8 / C / en_US.UTF-8 / en_US.UTF-8
Package version:
backports_1.2.1 base64enc_0.1.3 bookdown_0.22 cli_2.5.0
crayon_1.4.1 digest_0.6.27 ellipsis_0.3.2 evaluate_0.14
fansi_0.4.2 glue_1.4.2 graphics_4.0.5 grDevices_4.0.5
highr_0.9 htmltools_0.5.1.1 jsonlite_1.7.2 knitr_1.33
lifecycle_1.0.0 magrittr_2.0.1 markdown_1.1 methods_4.0.5
mime_0.10 pillar_1.6.1 pkgconfig_2.0.3 purrr_0.3.4
R.cache_0.15.0 R.methodsS3_1.8.1 R.oo_1.24.0 R.utils_2.10.1
rematch2_2.1.2 rlang_0.4.11 rmarkdown_2.8 rprojroot_2.0.2
stats_4.0.5 stringi_1.6.2 stringr_1.4.0 styler_1.4.1
tibble_3.1.2 tinytex_0.31 tools_4.0.5 utf8_1.2.1
utils_4.0.5 vctrs_0.3.8 withr_2.4.2 xfun_0.23
yaml_2.2.1
Pandoc version: 2.13
session_info
的结果在两台机器上是相同的(用 diff 检查),唯一的例外是我的另一台计算机运行的是 macOS High Sierra 10.13.6。
renv
听起来我们应该开始了,谢谢你的提示。
我从 .tex
文件的差异开始,我非常确信这些文件中的唯一差异来自 .md
文件中的差异。它们都是 Tok
命令的问题,在这里和那里有额外的空格和换行符(以及包含图形的更改)。尝试区分 tex 日志文件具有挑战性,因为行号不匹配,因此每个未满的 hbox 警告都显示在 diff 中,但我已经查看了它们,除了行号不匹配之外,日志匹配。
再猜测一下 - 这可能是由 .Rproj.user
中的某些东西引起的吗?它位于 .gitignore
文件中,因此两台机器之间可能不同步。
另一个更新:我关闭了 styler
,这消除了除 includegraphics
更改之外的所有差异。我们使用了很多图形,唯一导致这种差异的两个是我们指定 out.height
的图形。通常我们设置out.width
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。