# zref-clever を使ってみた 相互参照で`\ref` するときには次のようにする. ```latex contentType~\ref{labelName} ``` このとき,`contentType` をいちいち打つのは面倒であり,これを変更する必要がある場合にはさらに面倒なことになる.これは自動化しておきたい. また,数式に関しては相互参照した数式のみに式番号を付与すべきである. この2つを同時に実現するには次のようなcleveref とautonum を組み合わせた方法が良く知られている. ## cleveref とautonum パッケージ 世の中にはすでにcleveref+autonum というような上手な相互参照の方法が普及している. しかしながら,autonum は少々厄介なように思う. と言うのは,次のような制約があると思うからである. - autonum がサポートしている数式環境しか式番号を操作できない - 参照しないが式番号を付与したい数式はequation+ 環境のみ ここで,autonum に似たmathtools から提供されているshowonlyrefs オプションを確認しておきたい. ただし,このmathtools によるshowonlyrefs はcleveref と並列に利用できないことに注意しておきたい. ## mathtools のshowonlyrefs オプション 参照した数式のみに式番号を付与したい場合にはmathtools のshowonlyrefs オプションを使用することもある. ```latex \mathtoolsset{showonlyrefs} ``` `\eqref` や`\refeq` で参照された数式に式番号を付与することが出来る. これに加えて,`\noeqref` を使うことで参照しない数式にも式番号を付与することも出来る. showonlyrefs ではautonum での制約がないものとなっていると思われる. ## zref-clever パッケージ > v0.1.1-alpha, released 2021-12-07 > > *Caution:* まだリリースされたばかりであり,使用が変更される場合があることに注意が必要になる. zref を利用したclever な相互参照を実現する. 次のようにプリアンブルで読み込めば良い. 日本語はデフォルトで対応していないので,`japanese` とエイリアスの`ja` を定義しておいた. 本来はbabel やpolyglossia を利用することで自動的に対応されるようだが,ちょっとヨクワカラナイのでスルーしておく.(手動でも対応できるので尚更) ```latex \usepackage[nameinlink,preposinlink,lang=ja]{zref-clever} \zcDeclareLanguage[allcaps]{japanese} \zcDeclareLanguageAlias{ja}{japanese} \usepackage{hyperref} ``` 今回は,オプションで`nameinlink` を与えている.これはcleveref と同じ仕様のものであり,ハイパーリンクを`式` や`定理` などの参照のタイプ名を含めて埋め込むようにしている. また,`preposinlink` としておくことで,相互参照番号の前後の文字(丸括弧など) にもハイパーリンクを埋め込むようにしている. `\zcDeclareLanguage` で日本語を宣言しており,`allcaps` オプションによって大文字小文字の違いがない(大文字のみ) の設定をしている. zref-clever では`\zcLanguageSetup` から各タイプごとに`Eq.` などを日本語に変更する. しかしながら,やたら長くなるためにプリアンブルが煩雑になってしまう.ちょっと面倒くさい. sty ファイルのあるディレクトリを漁ってみると,サポートされている言語ごとに`.dict` ファイルが作成されているようだ.また,試してみるとカレントディレクトリでも読んでくれるみたいだ. したがって,次のようなファイルをカレントディレクトリにおいた. zref-clever-english.dict を改造したものなので,上手い翻訳が分からないものに関してはそのままとなっている. > この下にあるファイル: > [zref-clever-japanese.dict](https://gist.github.com/Yarakashi-Kikohshi/347cd77e63a605603708adfc4747b1b4#file-zref-clever-japanese-dict) | Suffix | Meaning | | :----: | :------ | | `-sg` | 単数形 | | `-pl` | 複数形 | | `-ab` | 省略形 | zref を利用しているため,通常のラベルには`\zlabel` を使う必要がある.また,これを参照するには`\zcref` を利用する. しかし,数式環境では少し勝手が異なり,`\label` を利用する.ここでも同じように参照は`\zcref` で行う. ### showonlyrefs と並列する zref-clever ではmathtools のshowonlyrefs と並列して利用することが出来る. ```latex \usepackage{mathtools} \mathtoolsset{showonlyrefs} ``` 参照方法も`\zcref` のままで大丈夫である. ### cleveref パッケージとの関連性 このパッケージの謝辞を見ると,cleveref を強く意識していることが分かる. > The name of the package makes no secret that a major inspiration for the kind of “feel” I strove to achieve has been Toby Cubitt’s `cleveref`. Indeed, I have been an user of `cleveref` for several years, and a happy one at that. But the role `cleveref` played in the development of `zref-clever` extends beyond the visible influence in the design of user facing functionality. Some technical solutions and, specially, the handling of support for other packages were a valuable reference. Hence, the accumulated experience of `cleveref` allowed for `zref-clever` to start on a more solid foundation than would otherwise be the case. > > Quoted: The `zref-clever` package User manual (v0.1.1-alpha, released 2021-12-07) §14 Acknowledgments # Digression もっと上手に使える人がいれば,いい感じに記事にしてください:pray: mathtools のshowonlyrefs を使いたいけどcleveref が使えない人は是非に.