review-jlreqでコードハイライトのlistingが使えない
review-jlreqでコードハイライトにlistingマクロを使うとemlistでエラーが出ます。
再現手順
reviewのバージョンは5.6.0
review-init --latex-template review-jlreq reviewtestでjlreq環境をつくる- config.ymlを編集
highlight:
# html: "rouge"
latex: "listings"
- reviewtest.reを編集
=
//emlist[][]{
test
//}
rake pdfを実行
./reviewtest.tex:4: LaTeX Error: Environment reviewemlistlst undefined.
対策
jsbookでインストールした環境からplistings.styを持ってきて、review-base.styから \ifdefined\review@highlightlatex以下をコピーしてreview-custom.styに移植すると、コンパイルできます。
さらに
対策後にTeX環境をuplatexからlualatexに切り替えると、
//emlist[][]{
’
//}
こちらをコンパイルしたときに
[3] [4] (./reviewtest.tex
./reviewtest.tex:6: Undefined control sequence.
\ltj@lst@ProcessJALetter ...num \postbreakpenalty
`#1>0 \ltj@lst@setopenflag...
l.6 \end{reviewemlistlst}
というエラーが出ます。’の文字がだめみたいです。uplatexのときや、lualatexでもlistingを使わなければ大丈夫です。
そういえばlistingsだとtcolorboxと食い合わせが悪く、mintedにする必要があるが-shell-escape問題が…というところでreview-jlreqのハイライトリストについては放置していました…。
upLaTeXでのワークアラウンド的には対策でひとまず問題ないかと思います。
LuaLaTeXのほうはplistingsが合わないことが原因なので、review-custom.styにコピーしたRequirePackage行で,plistingsを削除すればおそらく通るのではないでしょうか。
ありがとうございます。,plistingsの削除で通るようになりました。
もうひとつ、review-jlreqとlistingsの組み合わせだとコード中の自動改行が効かないというのもあるのですが、これもtcolorboxとの相性なのでしょうか。(uplatex, lualatexとも)
手元ではmintedに移行してうまくいっています。
jlreqでlistingsのbreaklines=trueが無視されるのはlistings側の問題っぽい感じがしますね…。 いずれにせよlistingsだといろいろ厳しいので、mintedのほうが安定しそうです。
まず、review-jlreqがLuaLaTeX対応していません。
- (u)pLaTeX: listingsパッケージの日本語対応はplistingsパッケージ
- LuaLaTeX: luatexjaパッケージの下で、listingsパッケージが読み込まれると、lltjp-listingsパッチが当たります。
もうひとつ、review-jlreqとlistingsの組み合わせだとコード中の自動改行が効かないというのもあるのですが、 これもtcolorboxとの相性なのでしょうか。(uplatex, lualatexとも)
これは、
% ハイフネーション禁止。@M=10000。@m=1000
% latexdef 〜 で確認
\hyphenpenalty\@M\relax
\exhyphenpenalty\@M\relax
が影響しています。そこで、LaTeX標準の値を
\newcommand{\loosehyphen}{%
\hyphenpenalty=50\relax\exhyphenpenalty=50\relax}
と与えておいて、listingsのフォント指定で\loosephypenも添えてあげると、「コード中の自動改行」も通るはずです。
あまりLaTeX事にとらわれずに、syntax highlightingをPygmentsと合わせるなら、mintedパッケージを利用するほうがお手軽だと思います。 (listingsパッケージも、自身のオプションたちの挙動とtcolorboxパッケージとの挙動に付き合えるなら、悪い選択肢でないです)