LaTeX 基本概念
这是关于 LaTeX 基础概念的笔记,不涉及具体的 LaTeX 语法细节,而是从宏观层面,包括历史和命令行用法等,来进一步理解 TeX 和 LaTeX 。(标准写法是 \(\TeX{}\) 和 \(\LaTeX{}\),但是显示效果不好,下文不采用) TeX 语言 TeX 排版系统是 Knuth 发明的一种宏语言,提供了几百个类似 \def 的基础指令用于排版,主要解决的是自动断行,以及公式布局等排版问题。TeX 语言的版本在升级到 3.0 之后,主版本号就不再发生变动,而是以 3.1,3.14,3.141 的形式在更新时不断接近 pi,这体现了 TeX 语言的稳定性。 关于排版系统的基本介绍,有一篇博客可以参考: 排版引擎纵谈:程序员的视角 TeX 语言并不适合直接使用: 最早设计时不支持非 ASCII 编码,更不要说 Unicode 字符和中文支持等 字体需要额外配置,不能利用系统现有的字体 原始的几百个基础指令太繁琐又太简陋,需要考虑很多细节 后续有很多基于 TeX 基本指令封装的宏集,让使用者可以忽略很多细节,例如在 LaTeX 格式中的 center...
LaTeX Tex Live 安装
整理一下 Tex Live 2024 在Windows和Linux(Ubuntu22)中的安装过程,主要参考TeX Live 2024 安装教程(Windows/WSL/Linux)以及一份简短的关于 LATEX 安装的介绍。 在Linux系统上的LaTeX编译速度普遍比Windows更快,而且速度提升非常明显,并且TexLive的安装也是如此,在Linux中的安装过程比Windows更快,这种优势即使是在WSL2中也是很明显的,因此我选择在Windows和WSL2中都进行安装。 下载Texlive镜像 随便找一个 CTAN 镜像站下载 texlive2024 即可,例如清华镜像。 texlive 的下载安装其实非常友好,在不同系统上都只需要同一个镜像文件(texlive2024.iso,大约 5 个...
Python 学习笔记——12.函数式编程
Python 虽说是一个面向对象的,动态语言,但是它对于函数式编程的支持其实也不错,下面是几个在函数式编程中常用的概念或内置函数。 高阶函数 高阶函数是指可以接受函数作为参数,或返回函数作为结果的函数,Python 直接支持这种语法,例如 1234def apply_func(func, value): return func(value)result = apply_func(lambda x: x * 2, 5) # 10 lambda expression lambda 表达式(匿名函数)是用来定义没有名字的函数,通常用于快速定义短小的函数体,尤其是在传递给其他高阶函数时。 Python 支持 lambda 表达式,但是可能是由于缩进等原因,Python只允许 lambda 表达式中含有一个语句作为返回值,例如 12add = lambda x, y: x + yprint(add(3, 4)) map map 的语义是将一个函数作用于给定序列的每个元素,将作用得到的结果组成一个新序列并返回。 Python 提供了内置函数...
Python 虚拟环境管理——conda
Anaconda 是一个用于科学计算的开源 Python 发行版,集成了包和虚拟环境管理器,包括了很多数据科学中常用的包,特别适合数据科学和机器学习。与之类似的还有 Miniconda,它和 Anaconda 的主要区别就是:Miniconda在安装时并没有附带很多科学计算常用的包,在使用时需要手动下载。除了安装包的大小不同,在实际使用中其实没多少区别。 安装 Anaconda的下载和安装都非常简单,只需要按照官网上的步骤进行即可。 实践中可以选择安装Miniconda而非Anaconda,安装包的体积会小很多。 Miniconda...
C语言 宏的学习笔记
对于宏有很多花里胡哨的用法,虽然C++已经不推荐使用复杂的宏,但是也要看得懂,因此整理一下。 基本概念 预处理器是一个正式编译C语言的源代码之前的文本处理工具,它负责执行预处理指令(#开头的指令),通常包括头文件包含,条件编译,宏等。 宏是预处理器支持的一种重要功能,允许程序员定义一些简单的代码替换规则:通过宏创建符号常量或者简单的代码片段,并在代码中多次使用。 这些宏会在编译前被预处理器替换为相应的内容。值得注意的是,预处理器只是文本处理工具,它不会分析任何语法层面的内容,行为完全是文本层面的。 预处理器支持的命令主要包括 文件包含:#include 用于在源文件中包含其他文件的内容 条件编译:#if、#ifdef、#ifndef、#elif、#else、#endif 用于条件编译,根据条件决定编译部分代码 宏定义:#define 用于创建宏,可以是简单的文本替换或带参数的宏 取消宏定义:#undef...
Git 配置文件
包括三种配置文件: .gitconfig .gitattributes .gitignore .gitconfig .gitignore是Git的忽略规则配置文件,Git 会在如下位置依次进行检查(优先级由高到低): 第一层是仓库级,在仓库目录下,文件为.git/config 第二层是用户级,在用户主目录下,文件为~/.gitconfig(主要修改的是用户级配置) 第三层是系统级,在安装目录下,安装时的选项会保存在这里 Git也可以使用符合XDG规范的配置文件:~/.config/git/config。 123456789101112131415161718192021[user] name = xxx email = xxx@xx.com[init] # 默认主分支名称 defaultBranch = main[core] # 默认编辑器 editor = vim # 确保git正确显示中文信息 quotepath = false # 在提交时将所有文本的换行符转换为LF,检出时不转换 autocrlf...
生命游戏及Python实现
生命游戏,如果我小时候能做出这玩意,我能自己玩一整天,看着各种复杂混沌的演化过程,最终归于寂静。 介绍 生命游戏(Game of Life)是由数学家 John Conway 在...
MPDE 方法以及 Mathematica 实现
MPDE方法是一类用来分析数值格式的耗散色散性质的方法,它的思路为: 对于求解问题PDE(a),我们通过离散设计得到了数值格式, 现在反过来,找出一个与数值格式最契合的PDE(b),通常是原本的PDE(a)加上一些高阶余项,分析PDE(b)的耗散和色散性质,尤其关注它相比于PDE(a)多出来的高阶项,就可以得到数值格式的耗散和色散性质。 准备 MPDE的分析依赖于下面的结论:对于PDE \[ 0 = u_t - P u = u_t - \sum_{j=1}^n a_j \frac{\partial^j u}{\partial x^j} \] 其中 \(a_i \in \mathbb{R}\) 。一般性的结论如下: \(u_x\):不会对耗散和色散做出任何贡献 \(u_{xx}\) 或者更高的偶数阶导数项:对耗散性有贡献,对色散性无贡献 \(u_{xxx}\) 或者更高的奇数阶导数项:对色散性有贡献,对耗散性无贡献 低阶项的贡献是主要的,因此通常可以忽略高阶项,只关注最低阶的系数非零的一个偶数阶导数项和一个奇数阶导数项(不含 \(u_x\)...