1. wktkshn

    Posted

    wktkshn
Changes in title
+arXivでcleverefを使う
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,70 @@
+※cleverefについては[前の記事](http://qiita.com/wktkshn/items/110cd6007837938e6c88)を参照してください。
+※このページの内容は[ここの回答](http://tex.stackexchange.com/questions/276801/how-does-one-use-cleveref-in-an-arxiv-submission)と[cleverefのマニュアル](http://tug.ctan.org/macros/latex/contrib/cleveref/cleveref.pdf)を参考にしました。
+
+# arXivでcleverefを使う方法
+arXivはコンパイルの際に勝手にhyperrefを読み込む[^1]ため、cleverefを用いたコードを何も考えずに投稿すると正しく表示されません。
+[^1]: 00README.XXXなる名前のファイルを用いればhyperrefの読み込みを抑制できますが、何故かこの場合でも明示的に`\Crefname`によって設定をする必要があります。
+
+しかし、以下の2点を守れば正しく表示されるようになります。
+
+1. `\usepackage{hyperref}`を`\usepackage{cleveref}`よりも前に、ソースコードに自ら書く。
+2. `\Crefname`を用いて、`\Cref`での表示名を明示的に指定する。
+
+[cleverefのマニュアル](http://tug.ctan.org/macros/latex/contrib/cleveref/cleveref.pdf)に書いてあるように、(もし使うなら)hyperrefはcleverefよりも先に読み込まれなければいけません。
+そのため、arXivによってcleverefよりも後にhyperrefが読み込まれないように、自ら先にhyperrefを読み込む必要があります。
+また、2.に書いてある`\Cref`による指定は普段の環境では省略できる場合も多いため、忘れていたりそもそも知らなかったりする可能性がありますね。
+
+# poormanオプション
+arXivでは上記の方法でうまく行くと思いますが、他の状況でどうしてもうまく行かない場合にはpoormanオプションを用いることでほぼ確実に解決できます。
+このオプションは、cleverefを利用できないような"poor man"の環境でもコンパイルが通るようにするためのものです。
+
+具体例と使い方を述べましょう。
+
+```latex:hoge.tex
+\documentclass{article}
+\usepackage[poorman]{cleveref}
+\newtheorem{theorem}{Theorem}
+\Crefname{theorem}{Theorem}{Theorems}
+\begin{document}
+
+\begin{theorem}
+ \label{theorem:foo}
+ This is a theorem.
+\end{theorem}
+
+ By \Cref{theorem:foo}, we have ...
+
+\end{document}
+```
+
+上記のように、cleverefにpoormanオプションを指定して読み込みます。
+これをコンパイルすると、同じディレクトリに`hoge.sed`なるファイル[^2]が生成されます。
+[^2]: ファイル名は元々のTeXファイルの名前で決まります。
+これは`hoge.tex`からcleveref依存の部分を全て取り去る方法が記されたテキストファイルで、terminal上で次のように入力して利用します[^3]。
+[^3]: こちらで動作確認したのはubuntuのみ。macはhogeおそらくそのままで使えると思いますが、windowsは自分でsedをインストールする必要があるかもしれません。"windows sed"などでググってください。
+
+```
+sed -f hoge.sed hoge.tex > hogeforpoorman.tex
+```
+
+これを実行すると、次のようなファイルが生成されます。
+
+```latex:hogeforpoorman.tex
+\documentclass{article}
+
+\newtheorem{theorem}{Theorem}
+
+\begin{document}
+
+\begin{theorem}
+ \label{theorem:hoge}
+ This is a theorem.
+\end{theorem}
+
+ By Theorem\nobreakspace \ref {theorem:hoge}, we have ...
+
+\end{document}
+```
+
+確かにcleverefに依存する部分が全て取り除かれた上で、元々はcleverefによって補われていた`Theorem`がソースコードに挿入されていますね。
+このファイルであれば、おそらくどんな環境のLaTeXでも正しくコンパイルできると思います。