Skip to main content

mac 干净安装 basictex

· 2 min read

basictex 是一个极简的 latex 版本,仅安装最基础的组件,不像 textlive 动辄两三 GB 的大小。 但是,basictex 带来的问题却是其安装比较复杂,本文主要记录其安装过程。

安装目录

和 textlive 一样,basictex 的安装包会将其自身会安装到系统目录,包括:

  • /usr/local/texlive/2022basic
  • /etc/paths.d/TeX
  • /etc/manpaths.d/TeX
  • /Library/TeX

这里,可能稍微有些洁癖,不喜欢安装包写入这些系统的目录。 目前的想法是,在其他地方建一些目录(普通用户可写的目录),将其软连接到这些系统目录中。 这样的好处是,随后用 tlmgr 工具安装各种包的时候,也不需要 sudo 权限了。
例如,可放到 ~/.local/texlive 下:

mkdir -p ~/.local/develop/texlive
cd ~/.local/develop/texlive
mkdir -p texlive etc.paths.d etc.manpaths.d library

cd /usr/local/
sudo ln -s ~/.local/develop/texlive/texlive ./texlive

cd /etc/paths.d
sudo ln -s ~/.local/develop/texlive/etc.paths.d TeX

cd /etc/manpaths.d
sudo ln -s ~/.local/develop/texlive/etc.manpaths.d TeX

cd /Library
sudo ln -s ~/.local/develop/texlive/library/ ./TeX

安装

使用 brew 安装 basictex 或者 下载 pkg 安装包进行安装。

brew install basictex
sudo chown -R genshen: ~/.local/develop/texlive #`genshen` 为普通用户名.

如果必要,可将路径 ~/.local/develop/texlive/texlive/2022basic/bin/universal-darwin加入PATH环境变量中。

安装包

例如 tlmgr install subfigure,这里不需要 sudo 权限即可安装。

配置镜像

https://mirrors.tuna.tsinghua.edu.cn/help/CTAN/。

mac 通过 sshfs 挂载远程 Linux 文件系统

· 9 min read

面对 mac 中浏览/下载/上传文件到远程linux服务器这个需求,无论是在终端中使用 sftp 交互命令, 还是使用一些 sftp 客户端(如 Termius,transmit),都有或者或那的不方便。 最大的问题是其不能很好地和本地文件系统融合,例如 Termius 无法通过拖拽的方式将文件拷贝到本地, 也无法通过 command + c/v 进行文件拷贝等等。 其他的需求就似乎更难满足了,像查看远程的 pdf 或者图片文件也显得比较麻烦(先下载到本地,在打开), 更别说类似于finder里面的"快速查看"功能来浏览远程文件或者显示简介了。

因此,或许我们可以将远程的文件挂载到本地目录,但是 mac 系统本身只提供了 SMB/CIFS、NFS、FTP、AFP 等服务连接, 似乎不能很好地满足需求(如果你是远程服务器等管理员的话,也可以配置linux 的 nfs 服务)。
通过一番探索,发现 sshfs 可以实现这个的需求。 本文后续内容主要就是一点关于 mac 上 sshfs 的配置步骤与使用方法的。

安装 OSXFUSE

brew cask install osxfuse # 3.11.0

另外,从 brew cask info osxfuse 的信息来看,需要重启系统才能生效。

You must reboot for the installation of osxfuse to take effect.

遂重启系统。安装完成后,在系统的偏好设置里面,就可以看到 FUSE 扩展的图标及信息了。 fuse-ext-in-system-preferenece

Rust 调用 Go 代码

· 8 min read

事情的起因是这样的。最近有个 rust 的程序, 想在 rust 代码中读取 minio (一种开源且兼容 AWS s3 api 的对象存储)中的文件, 但是无奈 rust 的 api 很不完善 且似乎现在也没啥维护(有一年没有更新了)。而另外一边,minio 的 go api 开发十分活跃且是最优先支持的。 因此我就想能不能让 rust 调用 go 的 minio api 来实现 minio 中的对象读取。

虽然网络上面似乎也没太多相关的教程,但实际上也很容易做到。Rust 是一门面向底层开发的语言,其提供来很好的与 C 语言的互操作能力。 因此可以将 Go 代码中的相关函数导出为 C 语言的头文件声明,然后让 rust 像调用 C 一样间接地调用 Go 代码。