はじめに
zref-clever は、カウンタの種類に応じて自動的に相互参照に参照タイプ名を追加して相互参照をより簡便するパッケージです。
非常に似たパッケージ、cleveref の代替パッケージと思っても良いでしょう。cleveref は Qiita 内でもいくつか取り上げられており、使っている人も多いのではないかと思います。
本記事では、あまり知られていない zref-clever の基本的な使い方から日本語対応の方法などを紹介します。
本記事は zref-clever v0.4.5 (2024-05-20) に準拠します。
この節では、まず cleveref の気になる点と zref-clever の使い方について紹介します。
cleveref の気になる点
実用上ほとんど問題はありませんが、cleveref では以下のような点が気になることもあるでしょう。
-
hyperref との読み込み順序がある
-
autonum と併用する場合:
- 読み込み順序がある
- cleveref に由来するいくつかのコマンドがサポートされていない(参考)
- autonum が提供する数式環境しか使えない
-
よく知られている方法で日本語に対応させている際、
\cref{fig:1}
としたときに “図” と “1” の間は~
であり、和欧文間スペースにならない(参考)
作成コード(折りたたみ)
以下のコードを LuaLaTeX で実行し、当該箇所をスクリーンショットした。
\documentclass{ltjsbook} \usepackage{amsthm} \usepackage[unicode]{hyperref} %%%%% ----- cleveref ----- %%%%% \usepackage[nameinlink]{cleveref} \crefname{theorem}{定理}{定理} \crefname{lemma}{補題}{補題} \crefname{chapter}{第}{第} \creflabelformat{chapter}{#2#1章#3} %% %%%%% ----- zref-clever ----- %%%%% \usepackage{zref-clever} \zcDeclareLanguage[allcaps]{japanese} \zcLanguageSetup{japanese}{ type = chapter , Name-sg = 第 , Name-pl = 第 , refbounds = {,,章,} , type = theorem , Name-sg = 定理 , Name-pl = 定理 , type = lemma , Name-sg = 補題 , Name-pl = 補題 , } \zcsetup{lang=japanese} \AddToHook{env/lemma/begin}{% \zcsetup{countertype={theorem = lemma}} } %% \theoremstyle{definition} \newtheorem{theorem}{定理}[chapter] \newtheorem{lemma}[theorem]{補題} \title{すごい文章} \author{だめぽ} \begin{document} \maketitle \chapter{すごい内容} \label{chap:main} にゃーん。にゃにゃ?にゃーお。 \begin{lemma}[すごい補題] \label{lem:bar} みゃおーん。 \end{lemma} \begin{theorem}[すごい定理] \label{thm:foo} 何がにゃーんですか。にゃおーん。 \end{theorem} \chapter{あとがき} 第\ref{chap:main}章の定理\ref{thm:foo}は……すごい! 補題\ref{lem:bar}も、すごい!(手動)\par \zcref{chap:main}の\zcref{thm:foo}は……すごい! \zcref{lem:bar}も、すごい!(zref-clever)\par \cref{chap:main}の\cref{thm:foo}は……すごい! \cref{lem:bar}も、すごい!(cleveref) \end{document}
zref-clever ではこれらの気になる点がありません。
また、mathtools の showonlyrefs
オプションと併用できます。
zref-clever の使い方
zref-clever は、多くの西欧言語にある文頭の case の違い (capitalization)、単数・複数形 (pluralization)、“equation” に対する “eq.” のような略称 (abbreviation)、名詞の性 (gender)、格変化 (declension) に対応することが出来ます。
加えて、英語、イタリア語、オランダ語、スペイン語、ドイツ語、フランス語、ポルトガル語、ロシア語の 8 ヶ国語に対応しています。(現状では日本語には対応していないため、この節 で紹介します)
言語の切り替えは、プリアンブルで \zcsetup
から以下のように記述します。
%% ドイツ語を指定する例
\usepackage{zref-clever}
\zcsetup{ lang = german }
zref-clever では \zcref
を使って \label
を参照します。
\zcref
は、カウンタの種類に応じて “図” や “表” 等の参照タイプ名を与えたり、複数のラベルを同時に処理することが出来ます。
すなわち、次のような形で参照することが出来ます。(結果が分かりやすいようにラベルは通し番号にしています)
- single 参照
\zcref{fig:1}
- pair 参照
\zcref{fig:1, fig:2}
- range 参照
\zcref{fig:1, fig:2, fig:3} % または \zcref[range]{fig:1, fig:3}
- list 参照
\zcref{fig:1, fig:3, fig:4}
加えて、複数の参照タイプを同時に参照する場合、参照スタイルは以下の 2 つのパターンがあります。
- type pair 参照
\zcref{fig:1, tbl:1}
- type list 参照
\zcref{fig:1, tbl:2, tbl:3, eqn:1}
cleveref と同様に、カウンタに応じて参照タイプ名が与えられるため、非常に楽な相互参照ができます。
zref-clever の日本語対応
zref-clever の言語構成では、capitalization 1、abbreviation は省略できます。また、gender、declension はオプションのため必ずしも課す必要はありません。(単数・複数形は省略できません)
したがって、日本語対応では単数・複数形だけ気にすれば良いです。
具体的には、プリアンブルで \zcDeclareLanguage
によって japanese
を宣言し、\zcLanguageSetup
に言語構成を記述します。(ちょっと長いため折りたたみにしておきます)
日本語を構成した zref-clever の使い方(折りたたみ)
\usepackage{zref-clever}
\zcDeclareLanguage[allcaps]{japanese}
\zcLanguageSetup{japanese}{
namesep = {\nobreak} ,
pairsep = {と} ,
listsep = {、} ,
lastsep = {、および} ,
tpairsep = {および} ,
tlistsep = {、} ,
tlastsep = {、および} ,
notesep = {:} ,
rangesep = {から} ,
type = book ,
Name-sg = 第 ,
Name-pl = 第 ,
refbounds = {,,編,},
type = part ,
Name-sg = 第 ,
Name-pl = 第 ,
refbounds = {,,部,},
type = chapter ,
Name-sg = 第 ,
Name-pl = 第 ,
refbounds = {,,章,} ,
type = section ,
Name-sg = 第 ,
Name-pl = 第 ,
refbounds = {,,節,} ,
type = paragraph ,
Name-sg = 第 ,
Name-pl = 第 ,
refbounds = {,,段落,} ,
type = appendix ,
Name-sg = 付録 ,
Name-pl = 付録 ,
type = page ,
Name-sg = p. ,
Name-pl = pp. ,
rangesep = \textendash ,
rangetopair = false ,
type = line ,
Name-sg = l. ,
Name-pl = l. ,
rangesep = \textendash ,
rangetopair = false ,
type = figure ,
Name-sg = 図 ,
Name-pl = 図 ,
type = table ,
Name-sg = 表 ,
Name-pl = 表 ,
type = item ,
Name-sg = 項目 ,
Name-pl = 項目 ,
type = footnote ,
Name-sg = 脚注 ,
Name-pl = 脚注 ,
type = endnote ,
Name-sg = 後注 ,
Name-pl = 後注 ,
type = note ,
Name-sg = 注意 ,
Name-pl = 注意 ,
type = equation ,
Name-sg = 式 ,
Name-pl = 式 ,
refbounds = {,(,),} ,
type = theorem ,
Name-sg = 定理 ,
Name-pl = 定理 ,
type = lemma ,
Name-sg = 補題 ,
Name-pl = 補題 ,
type = corollary ,
Name-sg = 系 ,
Name-pl = 系 ,
type = proposition ,
Name-sg = 命題 ,
Name-pl = 命題 ,
type = definition ,
Name-sg = 定義 ,
Name-pl = 定義 ,
type = proof ,
Name-sg = 証明 ,
Name-pl = 証明 ,
type = result ,
Name-sg = 結果 ,
Name-pl = 結果 ,
type = remark ,
Name-sg = 備考 ,
Name-pl = 備考 ,
type = example ,
Name-sg = 例 ,
Name-pl = 例 ,
type = algorithm ,
Name-sg = アルゴリズム ,
Name-pl = アルゴリズム ,
type = listing ,
Name-sg = コード ,
Name-pl = コード ,
type = exercise ,
Name-sg = 演習 ,
Name-pl = 演習 ,
type = solution ,
Name-sg = 解法 ,
Name-pl = 解法 ,
}
\zcsetup{ lang = japanese }
これによって、日本語文章で zref-clever を使えるようになりました。
以降では、日本語構成に関するより詳細な方法を紹介します。
上の日本語対応で十分な場合は この節 まで飛ばして大丈夫です。
複数参照の区切り
複数のラベルを参照する場合、(type) pair 参照や range 参照はラベルとラベルの間に “と” や “から” 等の区切りとなる並立助詞が入ります。これらはそれぞれ (t)pairsep
、rangesep
から構成されます。
% pairsep
% ↓
図 1 と 2
% ----- ----- ----- -----
% rangesep
% ↓
図 1 から 3
% ----- ----- ----- -----
% tpairsep
% ↓
図 1 と表 1
加えて、(type) list 参照は、“A, C and D” のようなスタイルになるため、最後の (t)lastsep
と途中までの (t)listsep
の 2 つあります。
% lastsep
% ↓
図 1、3、および 4
% ↑
% listsep
% ----- ----- ----- -----
% tlastsep
% ↓
図 1、表 1、および式 (1)
% ↑
% tlistsep
日本語に対応させるには、以下のような対応関係にあれば良いでしょう。2
参照の種類 | zref-clever | 例 |
---|---|---|
pair | pairsep |
と |
list | listsep |
、 |
list | lastsep |
、および |
range | rangesep |
から |
type pair | tpairsep |
、 |
type list | tlistsep |
、 |
type list | tlastsep |
、および |
実際の構成では key-value 形式で次のようにします。
pairsep = {と} ,
listsep = {、} ,
lastsep = {、および} ,
rangesep = {から} ,
tpairsep = {、} ,
tlistsep = {、} ,
tlastsep = {、および} ,
加えて、参照タイプ名と参照番号の間で改行されるべきではないとされているため、namesep
に \nobreak
を課します。
これによって、図{\nobreak}1
のような状況になります。
namesep = {\nobreak} ,
参照タイプ名
ここではあまりに多くの構成が考えられるため、言語は日本語に限りかつ一部の参照タイプを用いた具体例で紹介します。
詳細はパッケージガイドを参照してください。
特定の参照タイプに関する構成は、最小構成は次のような key-value 形式で表現します。(LaTeX の key-value 形式のためインデントに意味はありませんが、見た目の分かりやすさのためにインデントしています)
type = <カウンタタイプ名> ,
Name-sg = <参照タイプ名> ,
Name-pl = <参照タイプ名> ,
<カウンタタイプ名>
とはカウンタの種類を指します。カウンタそのものを指すこともあります。具体的には figure
や table
などです。
<参照タイプ名>
は参照番号の前に付く “図” や “表” などです。
Name-sg
は single 参照の場合、Name-pl
は pair・range・list 参照の場合に利用される参照タイプ名です。3
日本語では単数・複数に対して言い方を替えませんが、zref-clever でこれらを省略することは出来ません。
組み込みで対応するカウンタタイプ一覧(折りたたみ)
組み込みで対応するカウンタタイプは基本的にカウンタ名に対応していますが、一部のカウンタタイプは複数のカウンタを総称しているものがあります。4
組み込みで対応するカウンタタイプは以下の 28 があります。
カウンタタイプ | カウンタの意味 |
---|---|
book |
編(\book :memoir 文書クラス等で \part と同じレベルの見出しとして定義される) |
part |
部(\part ) |
chapter |
章(\chapter ) |
section |
節(\section ) |
paragraph |
段落(\paragraph ) |
appendix |
付録(\appendix ) |
page |
ページ |
line |
行(memoir 文書クラスの poemline と listings パッケージの lstnumber に対応) |
figure |
図(figure 環境) |
table |
表(table 環境) |
item |
番号付きリストの項目(enumerate 環境) |
equation |
数式 |
footnote |
脚注 |
endnote |
後注 |
note |
footnote ・endnote 以外のノート |
algorithm |
アルゴリズム(algorithms パッケージなどのキャプション番号) |
listing |
コード(listings パッケージのキャプション番号) |
theorem , corollary , definition ,example , exercise , lemma , proof ,proposition , remark , result , solution
|
定理環境で作成される |
参照タイプ名のみの場合
図表など通し番号の前に参照タイプ名を置くだけの場合は、次のようにします。
type = figure ,
Name-sg = 図 ,
Name-pl = 図 ,
type = table ,
Name-sg = 表 ,
Name-pl = 表 ,
これが最も簡単な例です。
参照番号を括弧で囲う場合
数式を参照する場合、参照番号を丸括弧で囲うことが一般的です。このような場合は refbounds
を用いて次のようにします。
type = equation ,
Name-sg = 式 ,
Name-pl = 式 ,
refbounds = {,(,),} ,
もしも特定の参照を丸括弧とは異なるものにしたい場合は、\zcref
のオプションでも refbounds
の変更ができます。
\zcref[refbounds = {,[,],}]{eqn:1}
作成コード(折りたたみ)
mathtools の \newtagform
・\usetagform
を使うことで、数式番号の丸括弧を変更できます。
refbounds
オプションを課すと参照しているラベルのすべてに影響するため、single 参照以外では注意が必要です。
\documentclass{jlreq}
\usepackage{amsmath, mathtools}
\usepackage{zref-clever}
\zcDeclareLanguage[allcaps]{japanese}
\zcLanguageSetup{japanese}{
%% ...省略
}
\zcsetup{ lang = japanese }
\newtagform{bracket}{[}{]}
\begin{document}
\begin{align}
f(x)
& = ax^2 + bx + c
\label{eqn:1}
\\
& = a \left( x + \frac{b}{2a} \right)^2 - \frac{b^2}{4a} + c
\label{eqn:2}
\end{align}
\zcref[refbounds={,[,],}]{eqn:qf}は、\zcref{eqn:2}を\( f(x) = 0 \)の下で\( x \)について解くことで得られます。
\usetagform{bracket}
\begin{equation}
x = \frac{- b \pm\sqrt{b^2 - 4ac}}{2a}
\label{eqn:qf}
\end{equation}
\end{document}
参照ブロックの後にも続く場合
章節を参照する場合、「第 1 章」のように参照番号の後ろにも続きます。このような場合も refbounds
を用いて次のようにします。
type = chapter ,
Name-sg = 第 ,
Name-pl = 第 ,
refbounds = {,,章,} ,
ここで “第” を省略すれば、“章” だけが付くようになります。(Name-sg
・Name-pl
は空でも構いません)
次のようにすれば常に「第 1 節」のようになります。
type = section ,
Name-sg = ,
Name-pl = ,
refbounds = {,第,節,} ,
より高度な構成として、ページ参照の「5 ページ」、「2 〜 3 ページ」のように、常に参照ブロックの最後に参照タイプ名を置く場合、refbounds
のオプション 5 を用いて次のように構成します。6
type = page ,
Name-sg = ,
Name-pl = ,
rangesep = 〜 ,
rangetopair = false ,
refbounds-first-sg = {,,ページ,} ,
+refbounds-last = {,,ページ,} ,
+refbounds-re = {,,ページ,} ,
pege タイプでは、rangetopair = false
としているので、連続したページを \zcpageref[range]{page:1, page:2}
のように range
オプション付きで参照すると、pair 参照ではなく range 参照になります。
相互参照のハイパーリンク
zref-clever でも hyperref パッケージと併用することで自動的に相互参照にハイパーリンクを与えることが出来ます。読み込み順序はありません。
hyperref によって簡単にハイパーリンクを与えることが出来ますが、zref-clever でのハイパーリンクは次の 2 点に気を付ける必要があります。
-
参照タイプ名まで含めるか
この挙動は
nameinlink
オプションによって制御できます。nameinlink
値ハイパーリンクを与える範囲 tsingle
(default)single 参照、type pair・type list 参照内の single 参照のみ参照タイプ名から参照番号まで single
single 参照のみ参照タイプ名から参照番号まで true
すべての参照タイプ名から参照番号まで false
参照番号のみ -
refbounds
をハイパーリンクに含めるかrefbounds
系は常にハイパーリンクを課す部分と課さない部分があります。例えば、以下のような
refbounds
が課された数式の参照があった場合、\zcref{eqn:1}
の参照結果は “式 ab1cd” となります。refbounds = {a,b,c,d}
このとき、ハイパーリンクは
b1c
に与えられ、a
・d
には与えられません。
本記事で示す日本語対応例では、nameinlink = true
を前提とし、refbounds
に含まれる文字はすべてハイパーリンクに含まれるように構成しています。
独自の参照タイプ
基本的な参照タイプの構成は紹介したので、発展的な独自の参照タイプの構成方法を紹介します。
zref-clever がデフォルトでサポートしていないカウンタやカウンタタイプに対して、独自にカウンタタイプを構成することが出来ます。
実用上、特に \newtheorem
による新しいカウンタの作成はよく行われると思われます。そのため、以下では \newtheorem
による 3 つの具体例からそれぞれの対応を紹介します。
新しい参照タイプの追加
新たなカウンタを追加したい場合も、組み込みのカウンタタイプと同じように指定すれば良いです。
例えば、\newtheorem
で conjecture 環境を定義したとします。
\newtheorem{conjecture}{予想}
この場合のカウンタは conjecture
となるので、日本語構成としては次のようにします。これを \zcLanguageSetup{japanese}
に追加します。
type = conjecture ,
Name-sg = 予想 ,
Name-pl = 予想 ,
これによって、\zcref{cnjc:1}
は “予想 1” となります。
日本語の言語構成は 1 から作成しているので、それらに含めてしまえば良いですが、組み込みで提供されている言語では \zcRefTypeSetup
を使うと便利です。
%% lang = english に対する対応例
\zcRefTypeSetup{conjecture}{
Name-sg = Conjecture ,
Name-pl = Conjectures ,
name-sg = conjecture ,
name-pl = conjectures ,
}
カウンタをカウンタタイプに一致させる
\zcsetup
で countertype
オプションを構成することで、任意のカウンタを既存のカウンタタイプに一致させることができます。
例えば、定理環境を以下のように定義している場合、カウンタは thm
・lem
となっています。
\newtheorem{thm}{定理}
\newtheorem{lem}{補題}
そのままではカウンタ thm
・lem
が theorem・lemma タイプであると認識されないため、以下のように countertype
を構成します。
\zcsetup{
countertype = {
thm = theorem ,
lem = lemma ,
}
}
これによって、thm 環境は theorem タイプとして、lem 環境は lemma タイプとして扱われます。(もちろん、zref-clever が提供するカウンタタイプ名に倣った定理環境名にすれば、このような変更は不要です)
カウンタの共有
\newtheorem{lemma}[theorem]{補題}
などとしてカウンタを別の環境と共有している場合、プリアンブルでちょっとしたトリックを課します。(ref. Share counter - § 11.2 \newtheorem
- zref-clever-doc.pdf)
\AddToHook{env/lemma/begin}{%
\zcsetup{ countertype = { theorem = lemma }}
%% lemma 環境の直前で
%% カウンタ theorem のカウンタタイプは lemma だとしている
}
\newtheorem{theorem}{定理}
\newtheorem{lemma}[theorem]{補題}
これによって、theorem 環境と lemma 環境のカウンタが共有されるようになります。
作成例コード(折りたたみ)
\documentclass{jlreq}
\usepackage{zref-clever}
%%%%% ----- 日本語対応 ----- %%%%%
\zcDeclareLanguage[allcaps]{japanese}
\zcLanguageSetup{japanese}{
%% ...省略
}
\zcsetup{lang = japanese, countertype = { thm = theorem } }
%%
%%%%% ----- theorem と lemma を構成 ----- %%%%%
\AddToHook{env/lemma/begin}{%
\zcsetup{ countertype = { theorem = lemma } }
}
\newtheorem{theorem}{定理}
\newtheorem{lemma}[theorem]{補題}
\begin{document}
\begin{theorem} \label{thm:1} これは非常によく知られた定理です。 \end{theorem}
\begin{lemma} \label{lem:1} これはあまり知られていない補題です。 \end{lemma}
\zcref{thm:1, lem:1}
\end{document}
組み合わせ
以上 3 つの例を踏まえると、2 つの fact 環境と claim 環境をカウンタを thm 環境のカウンタ thm
と共通させて定義した場合、以下のように構成すれば良いです。
\AddToHook{env/fact/begin}{%
\zcsetup{ countertype = { thm = fact } }
}
\AddToHook{env/claim/begin}{%
\zcsetup{ countertype = { thm = claim } }
}
\zcsetup{ countertype = { thm = theorem } }
\newtheorem{thm}{定理}
\newtheorem{fact}[thm]{事実}
\newtheorem{claim}[thm]{主張}
\zcRefTypeSetup{fact}{
Name-sg = 事実 ,
Name-pl = 事実 ,
}
\zcRefTypeSetup{claim}{
Name-sg = 主張 ,
Name-pl = 主張 ,
}
これによって、thm 環境と fact 環境、claim 環境のカウンタが共有されるようになります。
作成例コード(折りたたみ)
\documentclass{jlreq}
\usepackage{zref-clever}
%%%%% ----- 日本語対応 ----- %%%%%
\zcDeclareLanguage[allcaps]{japanese}
\zcLanguageSetup{japanese}{
%% ...省略
}
\zcsetup{ lang = japanese }
%%
%%%%% ----- thm・fact・claim 環境を構成する ----- %%%%%
\AddToHook{env/fact/begin}{%
\zcsetup{ countertype = { thm = fact } }
}
\AddToHook{env/claim/begin}{%
\zcsetup{ countertype = { thm = claim } }
}
\zcsetup{ countertype = { thm = theorem } }
%% zcRefTypeSetup の内容は、上の zcLanguageSetup に含めていても良い
\zcRefTypeSetup{fact}{
Name-sg = 事実 ,
Name-pl = 事実 ,
}
\zcRefTypeSetup{claim}{
Name-sg = 主張 ,
Name-pl = 主張 ,
}
\newtheorem{thm}{定理}
\newtheorem{fact}[thm]{事実}
\newtheorem{claim}[thm]{主張}
%%
\begin{document}
\begin{thm} \label{thm:1} これは遠い昔の偉い人が示した定理です。 \end{thm}
\begin{fact} \label{fact:1} これは私が見つけた驚愕の事実です。 \end{fact}
\begin{claim} \label{claim:1} これは私のスゴイ主張です。 \end{claim}
\zcref{thm:1, fact:1, claim:1}
\end{document}
余談
日本では cleveref がほとんど覇権を握っているらしいので、zref-clever を使っている人はいなさそうでした [要出典]。
もし興味があれば使ってみてはどうでしょうか。
現在 zref-clever の組み込みの言語構成に日本語はありません。これも興味があれば、開発リポジトリ に PR を出すと良いでしょう。
実際、日本語の言語構成が組み込まれれば、本記事のおよそ半分は不要になります。
言語の構成方法の詳細はパッケージガイドを参照してほしいですが、他言語の構成も見ておくとより理解できるでしょう。
zref-clever に組み込みのそれぞれの言語が構成されているコードは以下にあります。
英語、イタリア語、オランダ語、スペイン語、 ドイツ語、フランス語、ポルトガル語、ロシア語 |
以降では、これまで紹介していなかった zref-clever の基本的な情報に関して紹介します。
オプションのデフォルト
代表的なオプションのデフォルト値は以下のようになってます。これらはパッケージオプションとコマンドオプションの両方で使用できます。
オプション (デフォルト値) |
説明 |
---|---|
sort ( true ) |
順序通りの並び替え |
comp ( true ) |
3 つ以上連続するラベルを list 参照から range 参照にする |
range ( false ) |
pair・list 参照を range 参照にする |
rangetopair ( true ) |
range = true 下で range 参照を pair 参照にする |
cap ( false ) |
参照タイプ名をタイトルケースに変更 |
abbrev ( false ) |
参照タイプ名を略称に変更 |
nameinlink ( tsingle ) |
参照タイプ名をハイパーリンクに含めるか ( tsingle , single , true , false ) |
lang ( english ) |
参照タイプ名の言語 |
この他に、type list 参照において出力する参照タイプの順序を制御する sorttype
などがあります。
\zcref
のオプション
cleveref ではコマンドに多くのバリエーションがありましたが、zref-clever の \zcref
はコマンドオプションで表現します。
ここでは cleveref のコマンドに対比する形でいくつか紹介します。
参照の種類 | zref-clever | cleveref |
---|---|---|
範囲参照 | range |
\crefrange |
ページ参照 | page |
\cpageref |
参照タイプのみ参照 | noref |
\namecref |
ラベルのみ参照 |
noname 7
|
\labelcref |
行頭用 |
S (cap noabbrev ) |
\Cref |
ハイパーリンク無し | \zcref* |
\cref* |
加えて、\zcref[page]
と等価な \zcpageref
も提供されています。
この他の cleveref のコマンドはオプションを組み合わせれば良いので、例えば、\Cpagerefrange
は \zcref[S, page, range]
あるいは \zcpageref[S, range]
と等価になります。
対応パッケージと互換モジュール
zref-clever は以下の機能と 8 のパッケージに対応しています。細かな対応方法に関しては パッケージガイド を参照してください。
\newtheorem , amsmath, breqn, enumitem, listings, newfloat, tcolorbox, zref-vario, zref-xr. |
加えて、以下の機能と 9 のパッケージの互換モジュールがあります。
\appendix , amsmath, appendices, breqn, enumitem, listings, mathtools, memoir, subcaption, subfig. |
デフォルトでこれらの互換モジュールは有効になっています。
もしもこれを無効化したい場合は、nocompat
オプションから無効化したいモジュールを指定します。
beamer に関しては公式に対応していませんが、対処方法が § 14 Work-arounds - zref-clever-doc.pdf に記載されています。
\label
と \zlabel
zref-clever は zref を使って作成されているため、本来 \zlabel
を使ってラベルを作成します。
しかし、zref-clever は \label
とすることで \zlabel
も呼び出されるようになっています。これは labelhook
オプションで制御されています。
そのため、\label
でラベリングしたものを \zcref
で参照することが出来ます。
より詳細な話は パッケージガイド の § 6 を参照してください。
LaTeX Workshop での対応
デフォルトの LaTeX Workshop では、\zlabel
を使っても \label
と同じように \ref
系で参照する際に候補としてラベル名を表示しません。
そのため、以下の設定で zlabel
を追加します。
"latex-workshop.intellisense.label.command": [
"label",
"linelabel",
"zlabel", // <-- これを追加
]
\zlabel
を使う人は追加しておくと便利でしょう。
-
capitalization は、
\zcDeclareLanguage
でallcaps
オプションを課すことで省略されます。 ↩ -
zref-clever と cleveref を対応させると以下のようになります。
zref-clever cleveref pairsep
\crefpairconjunction
listsep
\crefmiddleconjunction
lastsep
\creflastconjunction
rangesep
\crefrangeconjunction
tpairsep
\crefpairgroupconjunction
tlistsep
\crefmiddlegroupconjunction
tlastsep
\creflastgroupconjunction
-
Name
・name
における-sg
と-pl
は単数形と複数形を表しています。-
-sg
: single form(単数形) -
-pl
: plural form(複数形)
-
-
対応するカウンタタイプがまとめられている経緯は zref-clever-code.pdf の § 10 Language files に記載されています。 ↩
-
refbounds
には 16 のオプションがあります。若干難解ですが、これらを利用することで複雑な参照スタイルを表現できます。(cf. Table 2: Advanced reference format options and their scopes - § 9.1 Advanced reference formatting - zref-clever-doc.pdf) ↩ -
rangesep
を〜
にするなら、アラビア数字との間を和欧文間スペースにした方が良さそうです。 ↩ -
noname
オプションでは、refbounds
が付随します。そのため、refbounds
を課している参照タイプで参照番号のみを得たい場合は、以下のようにします。↩\zcref[noname, refbounds = {}]{eqn:1}