🌐

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&note=%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文字列を引数として取って処理し、環境と書体をもとに戻し、空白を入れます。

他の方法

https://tex.stackexchange.com/questions/177340/typesetting-url-uri-iri-in-plain-tex
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&note=%23hash&obj=%7Bkey%3Dval%7D&sym=%5E%60%7C%5C%22%3C%3E%20#frag-ment_(sec)*[test]はChatGPTが作ってくれました。

Discussion