R包管理
基本包列表+辅助包列表相组合
使用openxlsx::read.xlsx()
读取xlsx文件
交叉引用
引用标签
{#simple-regression}
替换为{#sec-simple-regression}
表格交叉引用
在Rstudio界面下进行查找替换。
regex语法:(表\\@ref\(tab:)(.*?)(\))
替换为 @tbl-$2
。其中(.*?)
表示非贪婪匹配(non-greedy),也即一旦匹配即停止搜索。$2
为Rstudio
特定的组模式(group)用法(参看 )。
例如,表\@ref(tab:data-mess-wide-q)
将被替换为@tbl-data-mess-wide-q
图交叉引用
在Rstudio界面下进行查找替换。
regex语法:(图\\@ref\(fig:)(.*?)(\))
替换为 @fig-$2
。
例如,图\@ref(fig:new-workfile)
将被替换为@fig-new-workfile
公式
环境说明
Latex
数学模式下(Latex math mode)不允许出现空行:
Empty lines are not allowed in Latex math mode.
pdf输出时,公式环境\begin{aligned} ... \end{aligned}
需要以某种数学模式进行囊括(例如双美元符号对$$ ... $$
)。
如果有空白行,则pdf渲染时会报错:
Package amsmath Error: \begin{aligned} allowed only in math mode.
环境替换
在Rstudio界面下进行查找替换align
或equation
。
regex语法:
例如,$$\begin{align}
将被替换为$$\begin{aligned}
;\end{align}$$
将被替换为\end{aligned}$$
公式环境内索引
在Rstudio界面下进行查找替换。
regex语法:\(\\#eq:(.*?)\)
替换为 {#eq-$1}
。
例如,(\#eq:var-b2)
将被替换为{#eq-var-b2}
交叉引用
在Rstudio界面下进行查找替换。
regex语法:(\\@ref\(eq:)(.*?)(\))
替换为 @eq-$2
。
例如,\@ref(eq:demon-SRM)
将被替换为@eq-demon-SRM
定理定义
引用标签
有序号定义:Theorem
、Lemma
、Corollary
、Proposition
、Conjecture
、Definition
、 Example
、Exercise
。直接使用::: {#thm-}
类型的div块。 、
无序号定义:proof
, remark
, and solution
。直接使用::: {.proof}
的div块。因此也不存在引用标签。
交叉引用
在Rstudio界面下进行查找替换。
定义definition:regex语法(\\@ref\(def:)(.*?)(\))
替换为 @def-$2
。例如,\@ref(def:fitness)
将被替换为@def-fitness
节交叉引用
在Rstudio界面下进行查找替换。
regex语法:(节\\@ref\()(.*?)(\))
替换为 @sec-$2
。
例如,\@ref(workfile-create)
将被替换为@sec-workfile-create
数学符号处理
图表标题包含数学符号
使用如下的语法:
fig-cap: !expr sprintf( "通过命令视窗计算得到理论$t$值$t_{1-\\alpha/2}(f)=t_{0.975}(125)$ ")
knitr::kable()渲染下tibble表格包含数学符号
tibble表格包含数学符号,且使用knitr::kable()
进行渲染,那么需要设定:
tibble表格里的希腊符号使用单美元对符号$\\beta$
,并且希腊字母要额外使用一个逃逸符(escape)\
。(如果表格内容是存放在.xlsx
文件里,则不需要额外使用一个逃逸符)
knitr::kable(escape = FALSE)
需要设定escape = FALSE
(默认设置为escape = FALSE
)
```{r}
#| label: tibble-math
#| tbl-cap: "escape and special character"
tibble(
"$\\alpha$" = letters[1:2],
"$\\Delta$T" = 1:2,
"$\\beta$" = c("\u0394F~0-100~", "\u0394F~100-200~")
) %>%
knitr::kable(escape = FALSE)
```
escape and special character
a
1
ΔF0-100
b
2
ΔF100-200
图表布局
多图布局
```{r}
#| label: fig-5-scatter-comparison1
#| fig-cap: "辅助回归方程A1-A3"
#| fig-subcap:
#| - "a1"
#| - "a2"
#| - "a3"
#| layout-ncol: 3
include_graphics(
c("image/3-A1.png",
"image/3-A2.png",
"image/3-A3.png")
)
```
渲染输出
html输出
基本上大部分website
的风格样式定义都可以用于book
项目。
每章的节目录标题动态显示各不相同
节目录标题的全局设定很容易实现(参看官方文档 ):
---
format :
html :
toc-depth : 4
toc-title : "章节目录"
---
每章的节目录标题动态显示各不相同,例如第7章-节目录
。只需要给对应章的.qmd
源文件(例如chpt07-your-file.qmd
)里添加yaml
定义(参看GitHub问答 ):
---
toc-title : '第7章-节目录'
---
pdf输出
渲染工作流
两种渲染链条:
(1)通过render book
按钮进行渲染。会发生如下过程:
(2)通过命令行渲染。具体可以参看官方文档 。其作用和过程如下:
主要作用:方便进行LaTeX
源代码的测试和风格调整修改。
命令行执行:quarto render --to latex
渲染结束后会在_site/book-latex/
下存放LaTeX
源文件,包括.tex
以及picture/
文件夹等。
提升LaTex渲染速度
当图书项目较大,章节内容较多时,LaTex渲染pdf的耗时会特别长。
例如,在Rstudio的Background Jobs
界面下会显示如下信息:
running xelatex - 1
This is XeTeX, Version 3.141592653-2.6-0.999994 (TeX Live 2022) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
running xelatex - 2
This is XeTeX, Version 3.141592653-2.6-0.999994 (TeX Live 2022) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
running xelatex - 3
This is XeTeX, Version 3.141592653-2.6-0.999994 (TeX Live 2022) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
一个提升渲染速度的办法是给出两个渲染引擎(ps:目前已经失效),并把xelatex
引擎作为备选:
---
format :
pdf :
pdf-engine : latexmk
pdf-engine-opt : -xelatex
---
待处理问题
速度与报错
从这两个维度来衡量,初步的结果是:html
> docx
> pdf
内容的条件输出(不同格式下)
How to PDF render Quarto books with dynamic content? 参看
相对路径转为绝对路径
相对路径语法一般为:"../pic/logo/nwafu-logo-circle-wb.png"
绝对路径则需要改语法为:here("pic/logo/nwafu-logo-circle-wb.png")
具体操作可以在Rstudio中进行regex匹配替换:
也即,将\"\.\./(.*?)"
替换为here("$1")
某些脚本文件可能需要特殊处理:
(1)Xaringan文件.Rmd可能存在其他的相对路径,建议是还是保持相对路径语法。
layout: false
class: middle,right, hide_logo
background-size: contain
background-image: url("../pic/chpt02-search-google.png")