review icon indicating copy to clipboard operation
review copied to clipboard

review-jlreqでコードハイライトのlistingが使えない

Open uyumyuuy opened this issue 2 years ago • 4 comments

review-jlreqでコードハイライトにlistingマクロを使うとemlistでエラーが出ます。

再現手順

reviewのバージョンは5.6.0

  1. review-init --latex-template review-jlreq reviewtestでjlreq環境をつくる
  2. config.ymlを編集
highlight:
  #   html: "rouge"
  latex: "listings"
  1. reviewtest.reを編集
= 

//emlist[][]{
test
//}
  1. 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を使わなければ大丈夫です。

uyumyuuy avatar May 04 '23 12:05 uyumyuuy

そういえばlistingsだとtcolorboxと食い合わせが悪く、mintedにする必要があるが-shell-escape問題が…というところでreview-jlreqのハイライトリストについては放置していました…。

upLaTeXでのワークアラウンド的には対策でひとまず問題ないかと思います。 LuaLaTeXのほうはplistingsが合わないことが原因なので、review-custom.styにコピーしたRequirePackage行で,plistingsを削除すればおそらく通るのではないでしょうか。

kmuto avatar May 04 '23 13:05 kmuto

ありがとうございます。,plistingsの削除で通るようになりました。

もうひとつ、review-jlreqとlistingsの組み合わせだとコード中の自動改行が効かないというのもあるのですが、これもtcolorboxとの相性なのでしょうか。(uplatex, lualatexとも)

手元ではmintedに移行してうまくいっています。

uyumyuuy avatar May 05 '23 02:05 uyumyuuy

jlreqでlistingsのbreaklines=trueが無視されるのはlistings側の問題っぽい感じがしますね…。 いずれにせよlistingsだといろいろ厳しいので、mintedのほうが安定しそうです。

kmuto avatar May 06 '23 01:05 kmuto

まず、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パッケージとの挙動に付き合えるなら、悪い選択肢でないです)

munepi avatar May 06 '23 02:05 munepi