Awesome Languages
关于一些有趣的编程语言和具有编程能力的排版语言,以及如何配置它们的开发环境。
LaTeX
sudo pacman -S perl-tk ## Option
cd /tmp
wget2 https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/texlive2025-20250308.iso
sudo mkdir /mnt/iso
sudo mount texlive2025-20250308.iso /mnt/iso/
sudo perl ./install-tl --gui ## Advanced => checkmake Create symlinks in standard directory.
## Post install
sudo tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet
sudo tlmgr update --all # sudo tlmgr update --self --all
tlmgr
使用tlmgr install [package]时,如果给出tlmgr install: package [package] not present in repository.,则应当考虑package为一子包的可能,应安装其父包。
Global TeX Font
sudo cp /usr/local/texlive/[version]/texmf-var/fonts/conf/texlive-fontconfig.conf /etc/fonts/conf.d/09-[context].conf
sudo fc-cache -fv
Debug
latex-git-log =>
-- Can't locate IPC/System/Simple.pm in @INC (you may need to install the IPC::System::Simple module) (@INC entries checked: /usr/lib/perl5/5.40/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/5.40/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/5.40/core_perl /usr/share/perl5/core_perl) at /usr/local/texlive/2025/bin/x86_64-linux/latex-git-log line 15.
-- BEGIN failed--compilation aborted at /usr/local/texlive/2025/bin/x86_64-linux/latex-git-log line 15.
in terminal:
sudo perl -MCPAN -e shell
## xor cpan shell
# <= o conf urllist unshift https://mirrors.tuna.tsinghua.edu.cn/CPAN/
# <= o conf pushy_https 0
# <= o conf commit
# <= quit
install IPC/System/Simple.pm
Typst
至少在2026年早期,在typst官方版本中,导出.typ到.html仍是一项实验性功能:
typst watch --features html
## or
TYPST_FEATURES=html
Install
cargo install --git https://github.com/typst/typst.git --locked typst-cli
on VSC
sudo pacman -S code && ext install myriad-dreamin.tinymist
Option
cargo install font-manager
github:e-ricus/font-manager-cli.
Quarto/R markdown \deprecated\
wget https://github.com/quarto-dev/quarto-cli/releases/download/v[version]/quarto-[version]-linux-[arch].tar.gz
mkdir $QUARTO_PATH
tar -C $QUARTO_PATH/v[version]/ -xvzf quarto-[version]-linux-[arch].tar.gz
cat .zshrc =>
export PATH="$QUARTO_PATH/v[version]/bin:$PATH"
GNU APL \deprecated\
(require 'apl)
(set-input-method "apl-ascii") ;; https://www.metalevel.at/unicapl/
;;; apl.el --- APL input method for Emacs -*- lexical-binding: t; -*-
;; Author: Markus Triska <triska@metalevel.at>
;; Homepage: https://www.metalevel.at/unicapl/
;; Keywords: languages
;; Public domain code.
;;; Commentary:
;; Copy apl.el to your load-path and add to your .emacs:
;; (require 'apl)
;; Enable the APL input method with
;; M-x set-input-method RET apl-ascii RET
;; Then enter {iota}, {times}, {execute} etc.
;;; Code:
(defconst apl-version "0.9-PRE")
(defvar apl-ascii-codepoint
'(("{#%}" . ?\x2339)
("{#&}" . ?\x233a)
("{#/=}" . ?\x236f)
("{#/\\}" . ?\x234d)
("{#/}" . ?\x2341)
("{#:}" . ?\x2360)
("{#<}" . ?\x2343)
("{#=}" . ?\x2338)
("{#>}" . ?\x2344)
("{#?}" . ?\x2370)
("{#O}" . ?\x233c)
("{#\\/}" . ?\x2354)
("{#\}" . ?\x2342)
("{#^}" . ?\x2353)
("{#o}" . ?\x233b)
("{#v}" . ?\x234c)
("{%}" . ?\xf7)
("{&_}" . ?\x235a)
("{&}" . ?\x22c4)
("{'_}" . ?\x2358)
("{,-}" . ?\x236a)
("{->}" . ?\x2192)
("{-|}" . ?\x22a3)
("{-}" . ?\x2212)
("{/=_}" . ?\x2262)
("{/=}" . ?\x2260)
("{/\\_}" . ?\x2359)
("{/\\|}" . ?\x234b)
("{/\\}" . ?\x2206)
("{/match}" . ?\x2262)
("{0~}" . ?\x236c)
("{;_}" . ?\x236e)
("{<-}" . ?\x2190)
("{<=}" . ?\x2264)
("{=_}" . ?\x2261)
("{>=}" . ?\x2265)
("{>\"}" . ?\x2369)
("{@}" . ?\x235d)
("{I-beam}" . ?\x2336)
("{I}" . ?\x2336)
("{O*}" . ?\x235f)
("{O-}" . ?\x2296)
("{O\"}" . ?\x2365)
("{O\\}" . ?\x2349)
("{O_}" . ?\x235c)
("{O}" . ?\x25cb)
("{T}" . ?\x22a4)
("{\"}" . ?\xa8)
("{\\/~}" . ?\x236b)
("{abs}" . ?\x2223)
("{alpha-underbar}" . ?\x2376)
("{alpha_}" . ?\x2376)
("{alpha}" . ?\x237a)
("{and-overbar}" . ?\x22bc)
("{and}" . ?\x2227)
("{assign}" . ?\x2190)
("{backslash-bar}" . ?\x2340)
("{base}" . ?\x22a5)
("{box}" . ?\x2395)
("{branch}" . ?\x2192)
("{caret}" . ?\x2227)
("{cat-bar}" . ?\x236a)
("{catenate1}" . ?\x236a)
("{catenate}" . ?\x2c)
("{ceiling}" . ?\x2308)
("{circle-backslash}" . ?\x2349)
("{circle-dash}" . ?\x2296)
("{circle-diaeresis}" . ?\x2365)
("{circle-jot}" . ?\x233e)
("{circle-star}" . ?\x235f)
("{circle-stile}" . ?\x233d)
("{circle-underbar}" . ?\x235c)
("{circle_}" . ?\x235c)
("{circle}" . ?\x25cb)
("{comma-bar}" . ?\x236a)
("{comment}" . ?\x235d)
("{compress1}" . ?\x233f)
("{compress}" . ?\x2f)
("{deal}" . ?\x3f)
("{decode}" . ?\x22a5)
("{del-diaeresis}" . ?\x2362)
("{del-stile}" . ?\x2352)
("{del-tilde}" . ?\x236b)
("{delta-stile}" . ?\x234b)
("{delta-underbar}" . ?\x2359)
("{delta_}" . ?\x2359)
("{delta}" . ?\x2206)
("{del}" . ?\x2207)
("{depth}" . ?\x2261)
("{dex}" . ?\x22a3)
("{diaeresis}" . ?\xa8)
("{diamond-underbar}" . ?\x235a)
("{diamond_}" . ?\x235a)
("{diamond}" . ?\x22c4)
("{diaresis-dot}" . ?\x2235)
("{disclose}" . ?\x2283)
("{divide}" . ?\xf7)
("{domino}" . ?\x2339)
("{down-arrow}" . ?\x2193)
("{down-caret}" . ?\x2228)
("{down-shoe}" . ?\x222a)
("{down-tack}" . ?\x22a4)
("{down-vane}" . ?\x2356)
("{downcaret-tilde}" . ?\x2371)
("{downshoe-stile}" . ?\x2366)
("{downtack-diaeresis}" . ?\x2361)
("{downtack-jot}" . ?\x2355)
("{downtack-overbar}" . ?\x2351)
("{downwards-vane}" . ?\x2356)
("{drop}" . ?\x2193)
("{each}" . ?\xa8)
("{enclose}" . ?\x2282)
("{encode}" . ?\x22a4)
("{enlist}" . ?\x2208)
("{epsilon-underbar}" . ?\x2377)
("{epsilon_}" . ?\x2377)
("{epsilon}" . ?\x2208)
("{execute}" . ?\x234e)
("{expand1}" . ?\x2340)
("{expand}" . ?\x5c)
("{exp}" . ?\x22c6)
("{find}" . ?\x2377)
("{first}" . ?\x2191)
("{floor}" . ?\x230a)
("{format}" . ?\x2355)
("{frog}" . ?\x2362)
("{gets}" . ?\x2190)
("{goto}" . ?\x2192)
("{grade-down}" . ?\x2352)
("{grade-up}" . ?\x234b)
("{greater-of}" . ?\x2308)
("{greater-than-diaeresis}" . ?\x2369)
("{greater-than-equal}" . ?\x2265)
("{holler}" . ?\x2365)
("{hoot}" . ?\x2364)
("{index-of}" . ?\x2373)
("{index}" . ?\x2337)
("{index}" . ?\x2373)
("{intersection}" . ?\x2229)
("{intersect}" . ?\x2229)
("{inverted-caret}" . ?\x2228)
("{iota-underbar}" . ?\x2378)
("{iota_}" . ?\x2378)
("{iota}" . ?\x2373)
("{is}" . ?\x2190)
("{jot-diaeresis}" . ?\x2364)
("{jot-underbar}" . ?\x235b)
("{jot_}" . ?\x235b)
("{jot}" . ?\x2218)
("{laminate1}" . ?\x236a)
("{laminate}" . ?\x2c)
("{lamp}" . ?\x235d)
("{left-arrow}" . ?\x2190)
("{left-shoe}" . ?\x2282)
("{left-tack}" . ?\x22a3)
("{left-vane}" . ?\x2345)
("{leftbrace}" . ?\x7b)
("{leftshoe-stile}" . ?\x2367)
("{leftwards-vane}" . ?\x2345)
("{less-than-equal}" . ?\x2264)
("{lesser-of}" . ?\x230a)
("{lev}" . ?\x22a2)
("{ln}" . ?\x235f)
("{log}" . ?\x235f)
("{mat-divide}" . ?\x2339)
("{mat-inverse}" . ?\x2339)
("{match}" . ?\x2261)
("{max}" . ?\x2308)
("{member-of}" . ?\x2208)
("{member}" . ?\x2208)
("{minus}" . ?\x2212)
("{min}" . ?\x230a)
("{nabla}" . ?\x2207)
("{nand}" . ?\x2372)
("{nazg}" . ?\x2218)
("{negative}" . ?\x2212)
("{nor}" . ?\x2371)
("{not-equal}" . ?\x2260)
("{not-match}" . ?\x2262)
("{not}" . ?\x223c)
("{o\"}" . ?\x2364)
("{o_}" . ?\x235b)
("{omega-underbar}" . ?\x2379)
("{omega_}" . ?\x2379)
("{omega}" . ?\x2375)
("{or-overbar}" . ?\x22bd)
("{or}" . ?\x2228)
("{o}" . ?\x2218)
("{partition}" . ?\x2282)
("{paw}" . ?\x2235)
("{pi-times}" . ?\x25cb)
("{pick}" . ?\x2283)
("{pow}" . ?\x22c6)
("{quad->}" . ?\x2348)
("{quad-backslash}" . ?\x2342)
("{quad-circle}" . ?\x233c)
("{quad-colon}" . ?\x2360)
("{quad-delta}" . ?\x234d)
("{quad-del}" . ?\x2354)
("{quad-diamond}" . ?\x233a)
("{quad-divide}" . ?\x2339)
("{quad-down-arrow}" . ?\x2357)
("{quad-downcaret}" . ?\x234c)
("{quad-equal}" . ?\x2338)
("{quad-greater-than}" . ?\x2344)
("{quad-jot}" . ?\x233b)
("{quad-left-arrow}" . ?\x2347)
("{quad-less-than}" . ?\x2343)
("{quad-nabla}" . ?\x2354)
("{quad-not-equal}" . ?\x236f)
("{quad-question}" . ?\x2370)
("{quad-right-arrow}" . ?\x2348)
("{quad-slash}" . ?\x2341)
("{quad-up-arrow}" . ?\x2350)
("{quad-up-caret}" . ?\x2353)
("{quad<-}" . ?\x2347)
("{quad<}" . ?\x2343)
("{quad>}" . ?\x2344)
("{quad}" . ?\x2395)
("{quote-quad}" . ?\x235e)
("{quote-underbar}" . ?\x2358)
("{quote_}" . ?\x2358)
("{rank}" . ?\x2364)
("{ravel}" . ?\x2c)
("{reciprocal}" . ?\xf7)
("{reduce1}" . ?\x233f)
("{reduce}" . ?\x2f)
("{replicate1}" . ?\x233f)
("{replicate}" . ?\x2f)
("{represent}" . ?\x22a4)
("{reshape}" . ?\x2374)
("{residue}" . ?\x2223)
("{reverse}" . ?\x233d)
("{rho}" . ?\x2374)
("{right-arrow}" . ?\x2192)
("{right-shoe}" . ?\x2283)
("{right-tack}" . ?\x22a2)
("{right-vane}" . ?\x2346)
("{rightbrace}" . ?\x7d)
("{rightwards-vane}" . ?\x2346)
("{ring}" . ?\x2218)
("{roll}" . ?\x3f)
("{rotate}" . ?\x2296)
("{rotate}" . ?\x233d)
("{scan1}" . ?\x2340)
("{scan}" . ?\x5c)
("{semicolon-underbar}" . ?\x236e)
("{shape}" . ?\x2374)
("{signum}" . ?\xd7)
("{slash-bar}" . ?\x233f)
("{slashbar}" . ?\x233f)
("{slope-bar}" . ?\x2340)
("{smirk}" . ?\x2368)
("{snout}" . ?\x2361)
("{sourpuss}" . ?\x2363)
("{squad}" . ?\x2337)
("{squish-quad}" . ?\x2337)
("{star-diaeresis}" . ?\x2363)
("{star}" . ?\x22c6)
("{stile-tilde}" . ?\x236d)
("{stile}" . ?\x2223)
("{take}" . ?\x2191)
("{tilde-diaeresis}" . ?\x2368)
("{tilde}" . ?\x223c)
("{times}" . ?\xd7)
("{transpose}" . ?\x2349)
("{type}" . ?\x2208)
("{union}" . ?\x222a)
("{up-arrow}" . ?\x2191)
("{up-caret}" . ?\x2227)
("{up-shoe}" . ?\x2229)
("{up-tack}" . ?\x22a5)
("{up-vane}" . ?\x234f)
("{upcaret-tilde}" . ?\x2372)
("{upshoe-jot}" . ?\x235d)
("{uptack-jot}" . ?\x234e)
("{uptack-underbar}" . ?\x234a)
("{upwards-vane}" . ?\x234f)
("{w}" . ?\x2375)
("{x}" . ?\xd7)
("{zilde}" . ?\x236c)
("{|-}" . ?\x22a2)
("{|~}" . ?\x236d)
("{~\"}" . ?\x2368)
("{~^}" . ?\x2372)
("{~v}" . ?\x2371)
("{~}" . ?\x223c))
"Correspondence between ASCII transliterations and Unicode codepoints.")
(defvar apl-aplus-pairs
'((254 . ?\x22c4) (126 . ?\x223c) (161 . ?\xa8) (224 . ?\x2336)
(162 . ?\xaf) (230 . ?\x236b) (231 . ?\x2352) (164 . ?\x2264)
(232 . ?\x234b) (166 . ?\x2265) (244 . ?\x2349) (225 . ?\x2296)
(168 . ?\x2260) (240 . ?\x235f) (169 . ?\x2228) (185 . ?\x2371)
(94 . ?\x2227) (176 . ?\x2372) (171 . ?\xd7) (223 . ?\xf7)
(247 . ?\x233d) (173 . ?\x2339) (215 . ?\x2375) (197 . ?\x2208)
(229 . ?\x2377) (210 . ?\x2374) (217 . ?\x2191) (213 . ?\x2193)
(201 . ?\x2373) (233 . ?\x2378) (207 . ?\x25cb) (239 . ?\x2365)
(42 . ?\x22c6) (179 . ?\x235f) (251 . ?\x2190) (253 . ?\x2192)
(220 . ?\x2340) (252 . ?\x2359) (193 . ?\x237a) (225 . ?\x2296)
(211 . ?\x2308) (196 . ?\x230a) (189 . ?\x2261) (199 . ?\x2207)
(231 . ?\x2352) (200 . ?\x2206) (202 . ?\x2218) (234 . ?\x2364)
(167 . ?\x233c) (204 . ?\x2395) (236 . ?\x235e) (45 . ?\x2212)
(219 . ?\x22a2) (188 . ?\x2342) (221 . ?\x22a3) (187 . ?\x233c)
(218 . ?\x2282) (216 . ?\x2283) (195 . ?\x2229) (227 . ?\x235d)
(214 . ?\x222a) (194 . ?\x22a5) (226 . ?\x234e) (206 . ?\x22a4)
(238 . ?\x2355) (124 . ?\x2223) (175 . ?\x233f) (205 . ?\x2223))
"Correspondence between custom A+ encoding and Unicode codepoints.")
(defvar apl-aplus-table
(mapcar (lambda (pair)
(cons (decode-char 'ucs (car pair))
(decode-char 'ucs (cdr pair))))
apl-aplus-pairs)
"Translation table mapping A+ characters to Unicode symbols.")
(defun apl-set-font (font)
"Set font for APL characters. FONT is a font as passed to
set-fontset-font and should provide glyphs for all APL characters
that you want to use. An example is GNU unifont. Try
-gnu-unifont-*-r-*--*-*-*-*-*-*-ISO10646-1. Emacs is becoming
increasingly better at handling Unicode and may choose the right
glyphs for all characters out of the box, sometimes drawing from
various fonts. You therefore probably do not not need this
function at all, except maybe for enforcing a uniform font for
all APL characters."
(let ((all-symbols (mapcar (lambda (x)
(decode-char 'ucs (cdr x)))
apl-ascii-codepoint)))
(dolist (s all-symbols)
(set-fontset-font "fontset-default" s font))))
(defvar apl-aplus-keyboard nil)
(defun apl-toggle-aplus-keyboard ()
"Toogle translation of A+ keyboard input to Unicode characters."
(interactive)
(setq apl-aplus-keyboard (not apl-aplus-keyboard))
(dolist (pair apl-aplus-table)
(keyboard-translate (car pair)
(if apl-aplus-keyboard
(cdr pair)
(car pair)))))
(defun apl-aplus-to-unicode (begin end)
"Convert A+ symbols in region to Unicode characters."
(interactive "r")
(translate-region begin end (make-translation-table apl-aplus-table)))
(defun apl-flip (f) (cons (cdr f) (car f)))
(defun apl-unicode-to-aplus (begin end)
"Convert APL Unicode characters in region to A+."
(interactive "r")
(translate-region begin end
(make-translation-table (mapcar #'apl-flip
apl-aplus-table))))
(defun apl-ascii-to-unicode ()
"Translate ASCII transliterations to Unicode APL codepoints in the buffer.
In transient mark mode, if the region is active, operate on the region."
(interactive)
(save-excursion
(save-restriction
(when (and transient-mark-mode mark-active)
(narrow-to-region (region-beginning) (region-end)))
(dolist (pair apl-ascii-codepoint)
(goto-char (point-min))
(while (search-forward (car pair) nil t)
(replace-match (string (decode-char 'ucs (cdr pair))) nil t))))))
(when (require 'quail nil t)
(quail-define-package
"apl-ascii" "APL" "apl" t
"APL ASCII input method. Use {rho}, {iota} etc."
'(("\t" . quail-completion))
t nil nil nil nil nil nil nil nil t)
(dolist (pair apl-ascii-codepoint)
(quail-defrule (car pair) (decode-char 'ucs (cdr pair)))))
(defun apl-version ()
(interactive)
(message "Using version %s of apl.el" apl-version))
(provide 'apl)
;;; apl.el ends here
SPAD && FriCAS Algebra
sudo pacman -S sbcl
git clone --depth=1 git@github.com:fricas/fricas.git
cd fricas
./configure
make
sudo make install
Idris2 && Pack v0.7 \deprecated\
git clone --depth=1 git@github.com:racket/ChezScheme.git
cd ChezScheme
./configure --threads
make
sudo make install
git clone --depth=1 git@github.com:stefan-hoeck/idris2-pack.git
cd idris2-pack
./install.sh
export PATH=$PATH:~/.pack/bin
Agda
cabal update
cabal install Agda
wget -O agda-stdlib.tar.gz https://github.com/agda/agda-stdlib/archive/v2.2.tar.gz
tar -xvf agda-stdlib.tar.gz
cd agda-stdlib-2.2
cabal install
Lisp
CommonLisp && Roswell
sudo pacman -S rlwrap
git clone -b release https://github.com/roswell/roswell.git
cd roswell
sh bootstrap
./configure --prefix=$HOME/.local
make
make install
echo 'PATH=$HOME/.local/bin:$PATH' >> ~/.zshrc
ros setup
ros lisp=sbcl-bin/system setup
ros install qlot
lem
sudo pacman -S sdl2 sdl2_ttf sdl2_image
mkdir $HOME/common-lisp
cd common-lisp
git clone --depth=1 https://github.com/lem-project/lem.git
cd lem
make sdl2
Rust
rustup toolchain uninstall stable && rustup toolchain install stable
Uiua
cargo install --git https://github.com/uiua-lang/uiua uiua -F full