跳转至

2024

使用 BookML 为博客添加对原生 LaTeX 的支持

配置本地环境(MS Windows)

配置本地环境便于预览使用 LaTeXML 生成的 HTML 文件。

根据 BookML 的 官方指南 安装依赖。

对下载的模板文件进行 gmake 时,可能会有以下报错:

PS ...\bookml\template> gmake       
 Targets: template.zip SCORM.template.zip 
 pdflatex: template.tex  template.pdf 
texfot --no-stderr latexmk  -synctex=5  -g -norc -interaction=nonstopmode -halt-on-error -recorder -deps -deps-out="auxdir/deps/template.pdfdeps" -MP -output-directory="auxdir/pdf" -pdf -dvi- -ps- "template.tex"
c:\texlive\2021\texmf-dist\scripts\texfot\texfot.pl: aborting, open(>/tmp/fot) failed: No such file or directory at c:\texlive\2021\texmf-dist\scripts\texfot\texfot.pl line 66.
C:\texlive\2021\bin\win32\runscript.tlu:915: command failed with exit code 2:
perl.exe c:\texlive\2021\texmf-dist\scripts\texfot\texfot.pl --no-stderr latexmk  -synctex=5  -g -norc -interaction=nonstopmode -halt-on-error -recorder -deps -deps-out="auxdir/deps/template.pdfdeps" -MP -output-directory="auxdir/pdf" -pdf -dvi- -ps- "template.tex"
gmake: *** [bookml/bookml.mk:332: auxdir/pdf/template.pdf] Error 2

解决方案:将 TEXFOT 变量设置为空:通过 gmake TEXFOT= 构建,以禁用 texfot,绕过相关问题。

或者将 template/bookml/bookml.mk 中的 TEXFOT 变量设置为空:

# (9) texfot (optional, disable with TEXFOT=)
TEXFOT      =

适配性修改

支持中文

BookML 在默认情况下使用 pdflatex 编译 LaTeX 文档,而中文支持所需的 CJK 宏包并未包含在 LaTeXML 的 有限宏包列表 中。

即使直接向 latexmk 传递 -xelatex 选项,latexmk 仍会优先选择其内部的 pdflatex 规则。其根本原因在于 latexmk 默认启用了强制 pdflatex 的选项(如 -pdf-dvi--ps-),从而覆盖了 -xelatex 的设置。通过去除这些选项并明确指定 -xelatex,便可让 latexmk 使用 XeLaTeX。

解决方案:在 bookml/bookml.mk 中修改规则:

# ...existing code...
LATEKMKFLAGS ?= 
# ...existing code...

# build PDF and deps files (in $(AUX_DIR))
-include $(wildcard $(AUX_DIR)/deps/*.pdfdeps)

# force rebuild if pdfdeps file is missing
$(AUX_DIR)/pdf/%.pdf: %.tex $$(if $$(wildcard $(AUX_DIR)/deps/$$*.pdfdeps),,FORCE) | $(AUX_DIR)/pdf $(AUX_DIR)/deps
    @$(call bml.prog,xelatex: $*.tex  $*.pdf)
    @$(call bml.cmd,$(TEXFOT) $(TEXFOTFLAGS) $(LATEXMK) $(LATEKMKFLAGS) \
        -synctex=$(SYNCTEX) -g -norc -interaction=nonstopmode -halt-on-error \
        -recorder -deps -deps-out="$(AUX_DIR)/deps/$*.pdfdeps" -MP \
        -output-directory="$(AUX_DIR)/pdf" "$<")
    @$(PERL) -pi -e "if (s/^ +/\t/) { s/ /$(if $(bml.is.win),\\,\\\\) /g; s/^\t/    /; }" "$(AUX_DIR)/deps/$*.pdfdeps"
# ...existing code...

修改为

# ...existing code...
LATEKMKFLAGS ?= -xelatex
# ...existing code...

# build PDF and deps files (in $(AUX_DIR))
-include $(wildcard $(AUX_DIR)/deps/*.pdfdeps)

# force rebuild if pdfdeps file is missing
$(AUX_DIR)/pdf/%.pdf: %.tex $$(if $$(wildcard $(AUX_DIR)/deps/$$*.pdfdeps),,FORCE) | $(AUX_DIR)/pdf $(AUX_DIR)/deps
    @$(call bml.prog,xelatex: $*.tex  $*.pdf)
    @$(call bml.cmd,$(TEXFOT) $(TEXFOTFLAGS) $(LATEXMK) $(LATEKMKFLAGS) \
        -synctex=$(SYNCTEX) -g -norc -interaction=nonstopmode -halt-on-error \
        -recorder -deps -deps-out="$(AUX_DIR)/deps/$*.pdfdeps" -MP \
        -output-directory="$(AUX_DIR)/pdf" "$<")
    @$(PERL) -pi -e "if (s/^ +/\t/) { s/ /$(if $(bml.is.win),\\,\\\\) /g; s/^\t/    /; }" "$(AUX_DIR)/deps/$*.pdfdeps"
# ...existing code...

同时,在 .tex 源文件中的导言区添加以下内容:

\RequirePackage{bookml/bookml}
\iflatexml
    \documentclass{article}
    \usepackage[british]{babel}
\else
    \documentclass[UTF8]{ctexart}
\fi

这将使得在使用 LaTeXML 编译时,使用英文的 babel 宏包,而在使用 XeLaTeX 编译时,使用 ctex 宏包来支持中文。

由于 LaTeXML 生成出来的 HTML 文件使用 UTF-8 字符集,因此并不需要对中文进行特殊处理。上面的操作只是保证编译出来的 PDF 文件能够正确显示中文,并且消除了在 gmake 时的报错。

与 Material for MkDocs 集成

🔧

数据结构

本文系统梳理了研究生招生考试《计算机学科基础》科目中的数据结构部分的核心知识点。首先介绍了线性表的顺序表示和链式表示,比较了它们在插入和删除操作上的时间复杂度。接着,详细讨论了栈和队列的概念、存储结构及其应用,包括中缀表达式转后缀表达式的调度场算法。随后,文章介绍了数组的特殊矩阵压缩方法和稀疏矩阵的存储方式。

在树的部分,文章讲解了二叉树的遍历方法、线索二叉树、多叉树的转换与遍历、霍夫曼树的构造与编码,以及并查集的实现与路径压缩技术。图的部分涵盖了图的基本概念、存储结构、遍历算法、最短路径算法、最小生成树算法、拓扑排序和关键路径方法。

最后,文章深入探讨了各种排序算法,包括插入排序、冒泡排序、快速排序、选择排序、堆排序、归并排序、基数排序和计数排序,分析了它们的时间复杂度、空间复杂度和稳定性。通过本文的学习,读者可以全面掌握数据结构的基本理论和应用技巧,为研究生招生考试奠定坚实的基础。

(摘要由 OpenAI GPT 4o 生成)

操作系统

本篇文章系统梳理了研究生招生考试《计算机学科基础》科目中操作系统部分的核心知识点。首先介绍了操作系统概念和RISC-V环境下的系统调用机制,分析了硬件异常处理和用户态与内核态的切换流程。接着,阐述了操作系统引导过程,以及微内核和宏内核模型的差异与适用场景。随后,详细讨论了进程和线程的概念,进程调度算法、线程同步与互斥、信号量及死锁预防与检测的原理,并通过银行家算法等典型案例说明死锁避免方法。内存管理部分重点介绍了分页与分段、虚拟内存、页面置换算法以及工作集等概念。文件系统方面,则围绕文件结构、目录管理、磁盘空间分配策略等内容展开。最后讲解了I/O系统及磁盘调度算法,为研究生招生考试《计算机学科基础》科目中的操作系统部分提供了全面、系统的复习思路。

(摘要由 OpenAI o1-preview 生成)

计算机组成与体系结构

本文系统梳理了计算机组成与体系结构的核心内容,重点涵盖了计算机的基础概念、数据表示与运算、存储系统与层次结构、指令系统与CPU基本功能、流水线与多处理器系统,以及总线与I/O系统。通过详细阐述寄存器、ALU、控制单元和中断机制的工作原理,以及 Cache、DMA、TLB 等关键技术的实现方式,本文为读者提供了完善的理论框架和复习思路,帮助在研究生招生考试《计算机学科基础》中高效掌握计算机组成部分的要点与难点。

(摘要由 OpenAI o1-preview 生成)

计算机网络

本文系统梳理了研究生招生考试《计算机学科基础》科目中计算机网络部分的主要知识点。首先介绍了计算机网络的概念、体系结构及其交换技术,并对OSI七层模型与TCP/IP四层模型进行对比。随后阐述了物理层的相关概念,如码元、比特率、带宽及Nyquist与Shannon定理;接着详述了数据链路层,包括封装成帧、差错控制、流量控制与可靠传输,以及介质访问控制(含CSMA/CD、CSMA/CA、令牌传递等)。在网络层部分,介绍了IPv4/IPv6的首部字段、ARP、DHCP、ICMP、路由算法及NAT等核心机制;在传输层,重点分析了UDP与TCP,包括连接建立与释放、流量控制和拥塞控制。最后,在应用层讲解了DNS、FTP、HTTP、电子邮件等典型协议的原理和工作流程,为研究生招生考试《计算机学科基础》科目中的计算机网络部分提供了全面、系统的复习思路。

(摘要由 OpenAI o1-preview 生成)

三重积分

本文主要介绍了三重积分的概念、基本性质以及在不同坐标系下的计算方法。首先,阐述了三重积分的定义,并讨论了其线性性质、区域可加性和积分中值定理等代数性质。接着,介绍了三重积分的换元公式,说明了如何通过坐标变换简化积分计算。

随后,文章分别讲解了在直角坐标系、柱面坐标系和球面坐标系下三重积分的表示形式和计算方法。在每个坐标系中,都详细说明了积分区域的确定方法以及对应的体积元素的变化。通过这些内容,读者可以全面了解三重积分在不同坐标系下的应用,提高对复杂积分问题的处理能力。

(摘要由 OpenAI o1-preview 生成)

空间解析几何

本文概括了空间解析几何的核心内容。首先,介绍了向量的基本运算,如内积(用于计算夹角和投影)和外积(用于求取法向量和面积)。然后,讨论了空间中直线和平面的各种方程形式及其位置关系。接着,介绍了曲线和曲面的表示方法,特别是柱面和旋转曲面,以及曲面的切线和法线的求解方法。最后,简述了常见的二次曲面及其标准方程。本文有助于读者掌握空间解析几何的基本概念和计算技巧。

(摘要由 OpenAI o1-preview 生成)

无穷级数

本文概述了无穷级数的基本概念和性质。首先,定义了数项级数及其收敛性,并讨论了级数收敛的相关性质和判别方法。接着,介绍了正项级数的判别法,包括比较判别法、比值判别法、根值判别法和积分判别法。随后,讨论了交错级数的莱布尼茨判别法以及一般数项级数的绝对收敛和条件收敛。最后,介绍了幂级数的收敛域、性质及其应用。通过本文,读者可以全面了解无穷级数的基本理论和应用方法。

(摘要由 OpenAI GPT 4o 生成)

曲线积分与曲面积分

本文系统地介绍了曲线积分和曲面积分的基本概念和计算方法。首先讨论了标量场上的第一类曲线积分(线积分)的定义、性质和计算方法。接着探讨了第二类曲线积分(场积分)及其与第一类曲线积分的关系。随后介绍了曲面积分,包括第一类曲面积分(面积分)和第二类曲面积分(通量积分)的定义、性质及计算技巧。文章还阐述了各类积分之间的联系,以及它们在物理学中的实际应用。

(摘要由 Claude 3.5 Sonnet 生成)

使用一元函数定积分求面积、体积、周长、表面积

本文讲解了如何利用一元函数的定积分来计算面积、体积、弧长和表面积等常见问题。主要内容包括:

  • 计算曲线所围成的面积:通过将区域上的二重积分转化为定积分,求解曲线 \(y = f(x)\) 所围成的面积。
  • 计算旋转体的体积:
    • \(x\) 轴旋转:使用柱体截面积法,推导出体积公式 \(\displaystyle V = \pi \int_{a}^{b} [f(x)]^2 dx\)
    • \(y\) 轴旋转:利用壳体法,得到体积公式 \(\displaystyle V = 2\pi \int_{a}^{b} x f(x) dx\)
  • 计算平面曲线的弧长:提供了参数方程曲线 \(\displaystyle x = \varphi(t), y = \psi(t)\) 的弧长公式 \(\displaystyle L = \int_{t_1}^{t_2} \sqrt{[\varphi'(t)]^2 + [\psi'(t)]^2} dt\),并给出了推导过程。
  • 计算旋转曲面的表面积:推导了曲线绕 \(x\) 轴旋转一周所得旋转曲面的表面积公式 \(\displaystyle S = 2\pi \int_{t_1}^{t_2} y , ds\),其中 \(ds\) 为曲线的弧微分。

文章通过详细的推导和实例,帮助读者理解并掌握利用定积分解决实际几何问题的方法。

(摘要由 OpenAI o1-preview 生成)