太行一粟

专注于网站及程序设计

安装

macOS

如果未安装Homebrew,安装Homebrew,命令如下:

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装Homebrew以后,运行一下命令:

1
brew install caddy

配置

编辑/etc/caddy/Caddyfile文件

1
touch /etc/caddy/Caddyfile

配置文件如下:

1
2
3
4
example.com {
root * /path/to/your/website
file_server
}

说明:

example.com:需要使用的域名,注意IP地址需要与主机IP一致。

root * /path/to/your/websiete:指向保存该域名相关文件的根目录

file_server:启动文件服务

file_server browse:打开目录浏览方式的文件服务

启动Caddy服务

命令行启动

1
caddy start

服务启动

1

Android Stuio下载与安装

下载地址:

https://developer.android.com/studio?hl=zh-cn

版本

2024.3.1.13:android-studio-2024.3.1.13

安装cosign

macOS

1
2
brew install cosign
cosign version # 检验是否安装成功

Windows

下载地址:

https://github.com/sigstore/cosign/releases/tag/v2.4.3

Pandoc使用指南

安装

Windows:

macOS

1
2
brew install pandoc
pandoc --version

pandoc命令行说明

1
2
# 增加或减少行标题层级,整数增加,负数减少。
pandoc --shift-heading-level-by=-1 -o output.md

MD转PDF

1
2
3
pandoc -f markdown -t pdf -o name.pdf name.md
pandoc test.md -o test.pdf --template=template.tex --pdf-engine=xelatex -V minted=true
pandoc input.md -o output.pdf --template=template.tex --pdf-engine=xelatex -V minted=true --pdf-options="-shell-escape"

生成默认模板

1
pandoc -D latex > default.tex

Windows

安装编译器

  1. WinLib下载GCC 14.2.0 (with POSIX threads) + LLVM/Clang/LLD/LLDB 19.1.7 + MinGW-w64 12.0.0 UCRT - release 3 (LATEST)
  2. 解压缩文件,将整个文件夹(mingw64)复制到C:
  3. 设置环境变量PATH,增加:C:
  4. 执行以下命令,显示软件版本号为止。
1
g++ --version

安装Visual Studio Code

  1. 浏览Visual Studio Code下载地址根据操作系统,下载相应的版本:

  2. Visual Studio Code for Windows 1.97.2

  3. Visual Studio Code for macOS

  4. 安装Visual Code for Windows

  5. 安装中文语言插件(Ctrl+Shift+X):输入Chinese,点击Install按钮。安装完成后,点击Change Language and Restart。重启后进入中文界面。

  6. 设置浅色界面:设置,主题,颜色主题(或按下Ctrl+K,Ctrl+T快捷键),选择浅色Visual Studio。

  7. 安装C++插件(Ctrl+Shift+X):输入C++,找到Microsoft的C++插件,点击安装

  8. 安装C++扩展插件,如上,找到Microsoft的C++ Extensions插件,点击安装。 ### 设置编译环境

  9. 设置C++编译环境,自动进入到欢迎界面,勾选Setup Your C++ Environment,Select My Default Compiler,选择使用G++.exe,在C:。

  10. 也可以再设置编译和调试的配置文件,如下:

创建C++源代码文件

  1. 在桌面上创建cpp文件夹作为工作区,C++源代码文件保存在此工作区。
  2. 新建hello.cpp文件,输入源代码
1
2
3
4
5
6
7
8
#include<iostream>
using namespace std;

int main()
{
char *str = "hello,world.";
cout << str;
}

配置编译任务

  1. Ctrl+Shift+P 打开命令面板,输入 Tasks: Configure Task,选择 Create tasks.json file from templateOthers
  2. 修改生成的 tasks.json 文件,配置编译任务:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "c:\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "c:\\mingw64\\bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}

配置调试(可选)

  1. 点击左侧调试图标(或按 Ctrl+Shift+D),点击 create a launch.json file,选择 C++ (GDB/LLDB)
  2. 修改 launch.json 文件,确保路径正确:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "gdb.exe",
"preLaunchTask": "cppbuild", // 关联编译任务
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}

]
}

编译

  • Ctrl+Shift+B 执行编译任务,生成 .exe 文件。

运行

  • 直接按 F5 启动调试(需配置 launch.json),或手动在终端运行生成的 .exe 文件。

macOS

安装 Xcode Command Line Tools

1
xcode-select --install # 弹出窗口后点击安装

安装 Visual Studio Code

  • 官网 下载并安装

安装 C++ 扩展插件

  1. 打开 VSCode
  2. Cmd+Shift+X 打开扩展市场
  3. 搜索并安装 C++ 扩展(由 Microsoft 提供)

创建项目文件夹

1
2
mkdir cpp
cd cpp

编写测试代码

新建文件 hello.cpp

1
2
3
4
5
6
7
#include <iostream>
using namespace std;

int main() {
cout << "Hello VSCode C++ on macOS!" << endl;
return 0;
}

配置编译任务 (tasks.json)

  1. Cmd+Shift+P 打开命令面板
  2. 输入 Configure Tasks,选择 Create tasks.json file from template
  3. 选择 Others
  4. 替换内容为以下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: clang 生成活动文件",
"command": "/usr/bin/clang++",
"args": [
"-fcolor-diagnostics",
"-fansi-escape-codes",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}

配置调试 (launch.json)

  1. 点击左侧 Run and Debug 图标(或按 Cmd+Shift+D
  2. 点击 create a launch.json file
  3. 选择 C++ (GDB/LLDB)
  4. 替换内容为以下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"configurations": [
{
"name": "(lldb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": true,
"MIMode": "lldb",
"preLaunchTask": "C/C++: clang 生成活动文件",
}
]
}

编译和运行

编译

  • Cmd+Shift+B 编译代码(自动生成可执行文件)

运行

  • F5 启动调试(或点击 Run > Start Debugging
  • 在终端中查看输出结果

常见问题

找不到头文件?

  • 确保已安装 Xcode Command Line Tools
  • 检查编译器路径:终端输入 which clang++ 应返回 /usr/bin/clang++

编译参数说明

  • -std=c++17: 指定 C++ 标准版本
  • -stdlib=libc++: macOS 默认 C++ 标准库
  • -g: 生成调试信息

直接使用终端编译

1
clang++ -std=c++17 -stdlib=libc++ hello.cpp -o hello && ./hello

通过以上步骤,你可以在 macOS 的 VSCode 中高效编译和调试 C++ 代码。

安装

镜像网站

清华大学镜像网站CTAN/

Windows

下载texlive.iso文件并安装,运行install-tl-windows.bat文件。

下载地址:texlive.iso

MacOS

下载MacTeX.pkg文件并安装。

下载地址:MacTeX.pkg

编译

配置编译引擎

1
cd ~/Library/TeXShop/Engines

编辑需要的引擎,比如:XeLaTeX.engine文件,为了支持minted等宏包,需要增加-shell-escape参数,引擎文件内容如下:

1
2
3
#!/bin/bash

xelatex -shell-escape "$1"

1
2
3
#!/bin/bash

latexmk -xelatex --shell-escape $1

重启TeXShop,新的引擎生效。

以后就可以选择XeLaTeX进行编译了。

LaTeX教程

lshort中文版

lshort英文版

常用命令

MacOS安装

1
2
sudo spctl --master-disable
sudo xattr -cr "Adobe Acrobat Pro DC 23.003.20244.pkg"

运行上述pkg文件

避免自动更新

1
2
3
# 删除Acrobat的自动更新程序Updater
cd '/Applications/Adobe Acrobat DC/Adobe Acrobat.app/'
sudo rm -f 'Contents/Plugins/Updater.acroplugin/Contents/MacOS/Updater'

在Python中,list 是一种非常常用的数据结构,用于存储有序的元素集合。它是可变的(可以修改其内容),可以包含不同类型的元素,如数字、字符串、对象等。

以下是一些常用的 list 操作方法及示例:

1. 创建 List

你可以使用方括号 [] 来创建一个新的列表。

1
2
3
4
5
6
7
8
9
10
11
12
python


复制代码
# 创建一个空列表
my_list = []

# 创建一个包含元素的列表
my_list2 = [1, 2, 3, 'hello', True]

# 使用 list() 函数创建列表
my_list3 = list((1, 2, 3)) # 从元组创建列表

2. 访问元素

列表的元素通过索引访问,索引从 0 开始。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
python


复制代码
my_list2 = [1, 2, 3, 'hello', True]

# 访问第一个元素
print(my_list2[0]) # 输出 1

# 访问最后一个元素
print(my_list2[-1]) # 输出 True

# 切片:获取子列表
print(my_list2[1:4]) # 输出 [2, 3, 'hello']

3. 修改元素

列表是可变的,你可以通过索引修改其中的元素。

1
2
3
4
5
6
python


复制代码
my_list2[2] = 99
print(my_list2) # 输出 [1, 2, 99, 'hello', True]

4. 添加元素

你可以使用 append() 方法将一个元素添加到列表的末尾,或者使用 insert() 方法将一个元素插入到指定位置。

1
2
3
4
5
6
7
8
9
10
11
python


复制代码
# 添加到列表末尾
my_list2.append('new_element')
print(my_list2) # 输出 [1, 2, 99, 'hello', True, 'new_element']

# 插入到指定位置
my_list2.insert(2, 'inserted')
print(my_list2) # 输出 [1, 2, 'inserted', 99, 'hello', True, 'new_element']

5. 删除元素

你可以使用 remove() 删除指定元素,或者使用 pop() 删除并返回指定位置的元素。如果不传递索引,pop() 会删除并返回最后一个元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
python


复制代码
# 删除指定元素
my_list2.remove('hello')
print(my_list2) # 输出 [1, 2, 'inserted', 99, True, 'new_element']

# 删除指定位置的元素并返回
removed_element = my_list2.pop(3)
print(removed_element) # 输出 99
print(my_list2) # 输出 [1, 2, 'inserted', True, 'new_element']

# 删除最后一个元素并返回
last_element = my_list2.pop()
print(last_element) # 输出 'new_element'

6. 查找元素

你可以使用 index() 方法查找元素的位置,使用 in 关键字判断元素是否在列表中。

1
2
3
4
5
6
7
8
9
10
11
python


复制代码
# 查找元素的索引
index_of_inserted = my_list2.index('inserted')
print(index_of_inserted) # 输出 2

# 判断元素是否在列表中
print('inserted' in my_list2) # 输出 True
print('not_in_list' in my_list2) # 输出 False

7. 排序

列表支持排序操作,可以使用 sort() 方法对列表进行排序(原地排序),或者使用 sorted() 返回一个新的排序后的列表。

1
2
3
4
5
6
7
8
9
10
11
12
13
python


复制代码
my_list4 = [3, 1, 4, 2]

# 原地排序
my_list4.sort()
print(my_list4) # 输出 [1, 2, 3, 4]

# 返回一个新的排序后的列表
sorted_list = sorted([3, 1, 4, 2])
print(sorted_list) # 输出 [1, 2, 3, 4]

8. 反转列表

你可以使用 reverse() 方法反转列表,或者使用切片反转列表。

1
2
3
4
5
6
7
8
9
10
11
12
13
python


复制代码
my_list5 = [1, 2, 3, 4]

# 使用 reverse() 方法
my_list5.reverse()
print(my_list5) # 输出 [4, 3, 2, 1]

# 使用切片反转
reversed_list = my_list5[::-1]
print(reversed_list) # 输出 [1, 2, 3, 4]

9. 列表的长度

你可以使用 len() 函数获取列表的长度。

1
2
3
4
5
python


复制代码
print(len(my_list2)) # 输出列表中的元素个数

10. 嵌套列表

Python 的列表可以包含其他列表,这样你就可以创建多维列表。

1
2
3
4
5
6
7
8
9
python


复制代码
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 访问嵌套列表的元素
print(nested_list[0]) # 输出 [1, 2, 3]
print(nested_list[0][1]) # 输出 2

总结

Python 中的 list 是一个非常灵活且强大的数据结构,适用于很多场景。你可以进行索引、切片、修改、添加、删除、排序等操作,非常适合存储一系列数据。

Brew安装

修改SHELL

1
chsh -u paul -s /bin/bash

退出后重新进入SHELL

1
2
3
4
5
sudo vim /etc/bashrc
在文件末尾,增加以下行:
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.ustc.edu.cn/homebrew-core.git"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles"

加载/etc/bashrc文件:

1
. /etc/bashrc

安装brew

1
/bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/Homebrew/install@HEAD/install.sh)"

安装

macOS

1
brew install python3 manim

获取源代码

1
git clone https://

快速开始

圆动画

代码:Circle.py

1
2
3
4
5
6
7
8
from manim import *

class CreateCircle(Scene):
def construct(self):
circle = Circle() # create a circle
circle.set_fill(PINK, opacity=0.5) # set the color and transparency
self.play(Write(Text("Draw a circle with PINK color.")))
self.play(Create(circle)) # show the circle on screen

生成动画:

1
manim -pql Circle.py CreateCircle

Manim Community v0.18.1

[12/09/24 18:12:36] INFO Animation 0 : Partial movie file written in ‘/Users/paul/Desktop/BaiduNetdisk/01 scene_file_writer.py:527

​ NOI/04数学动画/media/videos/Circle/480p15/partial_movie_files/CreateCircle/118581

​ 8338_41213021_223132457.mp4’

​ INFO Combining to Movie file. scene_file_writer.py:617

​ INFO scene_file_writer.py:737

File ready at ‘/Users/paul/Desktop/BaiduNetdisk/01

​ NOI/04数学动画/media/videos/Circle/480p15/CreateCircle.mp4’

​ INFO Rendered CreateCircle scene.py:247

Played 1 animations

​ INFO Previewed File at: ‘/Users/paul/Desktop/BaiduNetdisk/01 file_ops.py:231

​ NOI/04数学动画/media/videos/Circle/480p15/CreateCircle.mp4’

Manim 命令行参数

1
2
manim --help
manim render --help

–format [png|gif|mp4|webm|mov]

-p –preview: 完成后播放场景动画

-r –resolution: Resolution in “W,H” for when 16:9 aspect ratio isn’t possible.

-q, –quality [l|m|h|p|k] Render quality at the follow resolution framerates, respectively:

​ 【l】854x480 15FPS, 【m】1280x720 30FPS, 【h】1920x1080 60FPS, 【p】2560x1440 60FPS, 【k】3840x2160 60FPS

–fps, –frame_rate FLOAT Render at this frame rate.

动画示例二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from manim import *

class DotSample(Scene):
def construct(self):
t1 = Text("绘制正方形", color="#00FF00", font_size=36, font='Songti SC')
t2 = Text("删除正方形", color="#00FF00", font_size=36, font='Songti SC')
t3 = Text("重绘正方形", color="#00FF00", font_size=36, font='Songti SC')
s = Square(side_length=2, color=BLUE)
self.play(Write(t1.next_to([0, 2, 0], UP)))
self.play(Create(s))
self.wait(1)
self.remove(t1)
self.play(Write(t2.next_to([0, 2, 0], UP)))
self.remove(s)
self.wait(1)
self.remove(t2)
self.play(Write(t3.next_to([0, 2, 0], UP)))
self.play(Create(s))
self.wait(1)

Manim 是一个功能强大的 Python 库,用于生成数学动画。它包含了许多类来支持不同的动画、图形、文本和其他可视化效果的生成。

以下是 Manim 中的一些主要类,按照功能进行分类列出。需要注意,Manim 是一个庞大的库,因此这里只能列出核心和常用的类。


1. 场景相关类

这些类定义了动画场景的基本结构:

  • Scene - 所有场景的基类。
  • MovingCameraScene - 支持动态摄像机操作的场景。
  • ThreeDScene - 用于创建 3D 场景。
  • VectorScene - 用于矢量数学演示的场景。
  • ZoomedScene - 支持放大动画的场景。

2. Mobjects(动画对象)

Mobject 是 Manim 中所有图形对象的基类。以下是其子类:

2.1 几何图形类

  • Square - 绘制正方形。
  • Circle - 绘制圆。
  • Rectangle - 绘制矩形。
  • Polygon - 绘制多边形。
  • Ellipse - 绘制椭圆。
  • Line - 绘制线段。
  • Arrow - 绘制带箭头的线段。
  • DashedLine - 绘制虚线。
  • Dot - 绘制点。
  • Annulus - 绘制圆环。

2.2 文本类

  • Text - 显示普通文本。
  • MathTex - 显示 LaTeX 数学公式。
  • Code - 显示代码。
  • MarkupText - 支持 HTML 和 Markdown 格式的文本。

2.3 坐标系类

  • Axes - 绘制笛卡尔坐标系。
  • NumberLine - 绘制数轴。
  • ThreeDAxes - 绘制 3D 坐标系。
  • BarChart - 绘制柱状图。
  • Histogram - 绘制直方图。

2.4 图像类

  • ImageMobject - 用于加载和显示图像。
  • SVGMobject - 加载并显示 SVG 矢量图。
  • PMobject - 颗粒化对象。

2.5 曲线和路径

  • ParametricFunction - 绘制参数化曲线。
  • FunctionGraph - 绘制函数图像。
  • Arc - 绘制弧线。
  • BezierCurve - 绘制贝塞尔曲线。

3. 摄像机类

用于管理场景视角:

  • Camera - 摄像机的基础类。
  • MovingCamera - 支持动态移动的摄像机。
  • ThreeDCamera - 3D 摄像机类。

4. 动画类

用于控制对象的动态变化:

  • Animation - 所有动画的基类。
  • Create - 动画化创建一个对象。
  • FadeIn - 淡入动画。
  • FadeOut - 淡出动画。
  • Transform - 将一个对象变形为另一个对象。
  • Rotate - 旋转动画。
  • ScaleInPlace - 缩放动画。
  • Wiggle - 对象抖动动画。
  • MoveAlongPath - 沿路径移动。

5. 颜色和样式相关类

  • Color - 管理颜色。
  • VGroup - 组合多个 Mobject 的类。

6. 3D 专用类

  • Surface - 创建曲面。
  • Sphere - 绘制球体。
  • Cube - 绘制立方体。
  • Cone - 绘制圆锥。
  • Cylinder - 绘制圆柱。
  • ParametricSurface - 绘制参数化表面。

7. 实用工具类

  • ValueTracker - 动态值跟踪器,用于动态更新变量。
  • DecimalNumber - 显示动态数字。

如果你需要查看 Manim 的所有类,可以通过以下方法在代码中列出:

1
2
3
4
5
6
7
8
9
10
python


复制代码
import inspect
from manim import *

# 获取 Manim 中的所有类
manim_classes = [name for name, obj in inspect.getmembers(manim) if inspect.isclass(obj)]
print(manim_classes)

这个代码会输出 Manim 中的所有类。如果你需要详细了解某个类的功能,可以通过阅读 Manim 的文档或源代码进一步研究。