🌐
PlainTeXで使える\url{}
PlainTeXで使える\url{}

url.tex
\def\PrmsLnSlt#1{\LtrGl#1\LtrGlFin} %許改行
\def\LtrGl#1{%Litera gluo 字糊
\ifx#1\LtrGlFin\let\sekva\relax
\else#1\hskip0pt plus1pt\let\sekva\LtrGl\fi
\sekva}
\def\url{\bgroup\catcode`\#=11\catcode`\&=11
\catcode`\$=11\catcode`\_=11\catcode`\~=11
\catcode`\%=11\tt\urlA}
\def\urlA#1{\PrmsLnSlt{#1}\egroup\hskip3pt}
\input url
\hsize=10em
Aaaa \url{https://user:pa%24s@exa-mple.com:8080/dir1/dir-2/~user_name/file.ext;param=val!ue?x=1&y=2¬e=%23hash&obj=%7Bkey%3Dval%7D&sym=%5E%60%7C%5C%22%3C%3E%20#frag-ment_(sec)*[test]} bbbb. Cccc.
\bye
仕様
xurl (https://ctan.org/pkg/xurl) と同様に文字単位で改行できます。
LaTeX で hyperref を読み込んで使うと、自動でリンク付けしてくれました。命令名が\urlならそうしてくれるようです。
すぐに使うには
url.texをダウンロードして\inputします。
wget https://raw.githubusercontent.com/tnongk/pltilo/refs/heads/main/url.tex
解説
\PrmsLnSltでは何度も\LtrGlを呼んで一文字ずつ処理し、各文字で改行できるように、各文字間に閉じた糊\hskip0pt plus1ptを入れています。
\urlは実際には無引数で、文字の環境(\catcode)と書体を変えてから、引数を取る\urlAを置きます。
\urlAがURL文字列を引数として取って処理し、環境と書体をもとに戻し、空白を入れます。
他の方法
eplain や opmac にも \url があるようです。
良さ
本記事の方法は、他の機能を読み込まずに、また、動作を把握しながら使えます。
機能ごとに細かく\inputできたほうが、無駄がなく、依存関係も複雑にならず、使い勝手が良いと思っています。
その他
作ったばかりです。
考えが足りないところや変なところがあれば教えて下さい。
架空のURL
架空のURL例https://user:pa%24s@exa-mple.com:8080/dir1/dir-2/~user_name/file.ext;param=val!ue?x=1&y=2¬e=%23hash&obj=%7Bkey%3Dval%7D&sym=%5E%60%7C%5C%22%3C%3E%20#frag-ment_(sec)*[test]はChatGPTが作ってくれました。
Discussion