LaTeX 定理与证明环境 + tcolorbox 宏包使用
amsthm 宏包提供了定理类和证明类环境,但是它们并不是开箱即用的,这里记录一下相关的使用方式和配置。 定理类环境 基于 amsthm 包可以创造定理类环境,语法包括如下几类 123456\newtheorem{name}{text} % 独自使用计数器\newtheorem{name}{text}[section-level] % 基于section层级设置计数器\newtheorem{name}{text}[counter] % 基于计数器层级设置下一层的计数器\newtheorem{name}[counter]{text} % 共享其它环境的计数器\newtheorem*{name}{text} % 不使用计数器 其中 name:必选的定理类环...
LaTeX 数学公式与字体
整理一下 LaTeX 关于数学公式、数学字体以及相关的细节内容。 AMS 宏包 AMS 提供了一系列最常用的 LaTeX 数学宏包: amsmath 宏包: 提供了一套增强的数学排版命令和环境,使得数学公式的编辑和排版更加灵活和方便。 引入了一些新的数学环境,例如 align 和 gather,以便更好地控制多行公式的排版。 提供了诸如 \text, \DeclareMathOperator 等命令,用于在数学模式中插入文本或定义新的运算符。 amssymb 宏包:扩展了 amsmath,提供了额外的数学符号,如各种箭头、关系符号、集合符号等。 amsfonts 宏包:提供了一些额外的字体,例如 \mathbb 命令用于黑板粗体字母。 amsthm 宏包:提供了 theorem, lemma, proof 等定理或证明环境,方便用户在文档中定义和使用定理。 下面的数学公式绝大部分都需要这些宏包,默认已经被导入 1\usepackage{amsmath,amssymb,amsfonts,amsthm} 这些宏包在实际使用时可能要注意一下导入的先后顺序,...
LaTeX Tex Live 安装
整理一下 Tex Live 2025 在 Windows 和 Linux(Ubuntu22)中的安装过程,主要参考 TeX Live 2025 安装教程(Windows/WSL/Linux)以及一份简短的关于 LATEX 安装的介绍。 在 Linux 系统上的 LaTeX 编译速度普遍比 Windows 更快,而且速度提升非常明显,并且 TexLive 的安装也是如此,在 Linux 中的安装过程比 Windows 更快,这种优势即使是在 WSL2 中也是很明显的,因此可以选择在 Windows 和 WSL2 中都进行安装。 下载Texlive镜像 随便找一个 CTAN 镜像站下载 texlive2025 即可,例如清华镜像。 texlive 的下载安装其实非常友好,在不同系统上都只需要同一个镜像文件(texlive2025.iso,大约 6 个 G)。 安装Texlive Windows 直接点击 install-tl-windows.bat 脚本即可安装,默认有 GUI 显示,根据提示进行确认即可。 其实也可以加上 --no-gui 选项关掉 GUI,此时的安装过程和 Lin...
Cpp 构建和编译笔记——9. CMake 库的开发
这个环节我们从库的使用者切换为库的开发者,假设我们开发了一个库 Abc,那么如何处理 Abc 库的安装和导入?在导入环节,如何按照 modern cmake 的规范提供 AbcConfig.cmake? 尤其在这部分内容,网上教程非常混乱,CMake 官方文档写的非常复杂难懂,似乎是为超复杂的大型库开发所准备的,而且早期语法和 modern cmake 语法混杂在一起,难以分辨。本文将从简单的示例开始,吸取各个教程的内容,逐渐完善。 方式一:直接安装 我们首先考虑一种最无脑的安装方式:直接把可执行文件,库文件和头文件放到需要的地方去,并且不考虑复用。(CMake 不会导出它的配置信息文件) CMake 支持这种直接无脑的安装,不需要我们真的在文件系统中进行手动拷贝。 示例如下 123install(TARGETS demo4lib1 demo4lib2 demo4exe1 demo4exe2)install(DIRECTORY include/Demo4 TYPE INCLUDE)install(FILES src/Demo4_b.h TYPE INCLUDE) 这里安装四个 t...
Cpp 构建和编译笔记——8. CMake 依赖管理
这一篇关注 CMake 的依赖管理,这是最重要的部分:由于 C++没有如 pip,npm 那样统一的包管理(既有历史原因,也是 C/C++的包管理需求太复杂导致的),在使用第三方库时通常需要使用源码编译安装,然后手动管理依赖,涉及到的 CMake 操作非常繁琐。 本文围绕以下内容展开: 项目安装命令 第三方库的使用: 库已经安装到本地,并且支持 CMake:需要导入库的信息 库并不在本地:需要从仓库拉取源码,合并到当前项目中 我们面临很多问题: 不同平台的影响:例如 Windows 平台下的安装位置等非常混乱,而 Linux 则比较统一,使得安装和第三方库的导入都非常规范化 不同的语法风格:例如 CMake 早期的语法风格需要如何导入库,Modern CMake 的语法风格需要如何导入库。CMake 为了适应不同的第三方库,提供了许多不同的接口,语法越来越混乱。 项目安装命令 单独的安装命令通常如下(当前位置是项目根目录,而非在 build 子文件夹中) 12345678(1)make install(2)cmake --build build --target in...
Cpp 构建和编译笔记——7. CMake 语法结构
在上一篇已经学习了作为一门语言的最基本内容,接下来是进一步的内容 流程控制(条件语句,循环语句) 函数和宏 cmake 脚本/模块(不是 CMakeLists,而是.cmake 文件) 条件判断 if 语句 最完整的 if 语法结构如下 1234567if(<condition>) <commands>elseif(<condition>) # optional block, can be repeated <commands>else() # optional block <commands>endif() 其中的 elseif 和 else 都是可选的,例如 1234567if(WIN32) message(STATUS "Now is Windows")elseif(APPLE) message(STATUS "Now is Apple systens.")elseif(UNIX) message(STATUS "...
Cpp 构建和编译笔记——6. CMake 基本语法
CMake 和 make,shell 脚本一样,本质是一种 DSL 语言。在了解 CMake 的基本概念和用法之后,作为一种编程语言,还是得从最基本的变量,流程控制(for 循环,if 条件),函数等开始学习。在最开始,我们强调一点——CMake 作为一门语言是区分大小写的!只是具体到通常使用的内置命令/自定义函数/自定义宏,不区分大小写。 不得不说,CMake 这一类文本化的语言语法都非常反人类,而且CMake 的官方文档写的真是垃圾中的垃圾。 本文的主要内容 调试输出(IO) 变量 字符串操作 列表操作 数学表达式 调试输出 在 CMakeLists 中,有着和 echo 类似的用于向控制台输出信息的 message 命令 1message([<mode>] "message text") 其中的 mode 通常为 NOTICE: 缺省时默认的选项,表示正常输出到控制台的重要提示信息 WARNING: 表示输出到控制台的警告信息,但不会中断 CMake 的运行 STATUS: 表示正常输出到控制台的一般提示性信息,和 CMake 自动输出...
Cpp 构建和编译笔记——5. CMake 与 CMakeLists
关于 CMake 的内容可能比较多,计划是分成以下几部分: Modern CMake 的基本使用 CMake 基本语法与变量 CMake 语法结构(条件,循环,函数,模块等) CMake 依赖管理(作为库的使用者) CMake 库的开发(作为库的开发者) CMake 命令速查 完全CMake风格的四步命令:构建+编译+测试+安装 1234cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/path/to/install/cmake --build buildcmake --build build --target testcmake --build build --target install 上述命令完全不依赖具体平台。 经典Linux风格的四步命令:构建+编译+测试+安装 123456mkdir buildcd buildcmake ..make -j8ctestmake install 这里需要依赖make命令,主要命令都在build/中进行。 Windows平台...
Cpp 构建和编译笔记——4. make 与 Makefile
make 介绍 make(GNU make)是一个项目构建工具,用于方便地编译、链接多个源代码文件,自动决定哪些源文件需要重新编译,从而高效地构建自己地项目,普遍用于处理 c/c++项目,但也可以用于其他语言。 make 的通常用法是: 在项目目录下把编译链接的命令,写入 Makefile(指定文件名的一个文本文件,类似于 shell 脚本) 在项目命令下,执行make命令,会自动读取当前目录下的 Makefile 并解析执行 make命令可以后接参数: make,相对于执行make all,通常代表从头编译整个项目 make install,通常代表把当前项目安装到系统中,还可以附加一些参数指定安装位置等,例如prefix=/usr/local make clean,通常代表清理项目中的杂项文件,不包括源文件 注意这些只是约定俗成的作法,具体的命令行为其实完全取决于 Makefile 中写入的内容 这里的 make 是 GNU make,但是其实在各种 IDE 中,也都集成了一个类似的项目构建工具,例如 VS 的 nmake,它们发挥着类似的作用。 (nmake 遵循的...
Cpp 构建和编译笔记——3. gcc 选项
未分类选项 -o outfile: 指定编译的输出文件名称,缺省时默认为 a.out -std=c++11: 指定使用的 c++标准 优化相关 编译器的优化选项有 4 个级别 —O0: 默认情形,不进行优化(大写字母 O 后接数字 0) -O1 -O: 较低的优化级别,编译器会尝试减少空间大小和优化程序的执行时间,但不执行需要消耗大量编译时间的优化 -O2: 较高的优化级别,牺牲更多编译时间来提高程序的性能 -O3: 最高的优化级别,宁愿牺牲空间来提升程序的执行速度 -Og: 主要使用-O1优化, 除了那些影响调试的部分 -Os: 侧重于优化文件的体积 注意: 这里优化通常不是压缩可执行文件的大小,指的是优化运行速度等,优化得到的可执行文件体积可能还更大 优化的必然代价就是编译时间更长,执行逻辑与源代码不再逐行对应,难以调试,因此 debug 模式最好不要用高等级的优化 调试相关 -g: 在编译的时候,同时产生基本的调试信息 -ggdb: 尽可能的生成 gdb 的可以使用的调试信息。重复使用-g和-ggdb是无用的,从结果看,gcc 会忽略-g,使-ggdb生效 ...
