pandocでlualatexを使用してmdからpdfに変換ができない

pandocでlualatexを使用してmdからpdfに変換ができない

- liki の投稿
返信数: 16
pandoc 2.11.0.2
lualatex LuaHBTeX, Version 1.12.0 (TeX Live 2020/W32TeX)

pandoc test.md -o test.pdf --pdf-engine=lualatex

Error producing PDF.
! I can't write on file `input.log'.
Please type another transcript file name
! Emergency stop
! ==> Fatal error occurred, no output PDF file produced!

TeX Live 2020をインストール直後は問題なかったのに、tlmgrでアップデートしたらlualatexで変換できなくなりました
pdf-engineにXeTeXを指定すればpdfに変換できます
lualatex側の問題なのかpandoc側の問題なのか不明です

liki への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- Z. R. の投稿

Pandocの内部の動作を再現すると次のようになるようです。

rem C:\Users\zr\AppData\Local\Temp\SOMETEMPNAME\input.tex にファイルがある
set TEXINPUTS=C:\/Users/zr/AppData/Local/Temp/SOMETEMPNAME;
set TEXMFOUTPUT=C:\/Users/zr/AppData/Local/Temp/SOMETEMPNAME
lualatex -halt-on-error -interaction nonstopmode -output-directory C:\/Users/zr/AppData/Local/Temp/SOMETEMPNAME C:\/Users/zr/AppData/Local/Temp/SOMETEMPNAME/input.tex

ここで絶対パスの先頭が「C:\/」のようにスラッシュが二重になっていると、LuaTeXでエラーになるようです。(XeTeX・pdfTeXは正常。)

※「C:\\」「C:\/」「C://」はダメで「C:\」「C:/」はOK。

C:\/」のような表記はWindowsのパス表記としては正当(先に挙げた例は全部「C:\」に正規化される)なのですが、果たして「Kpathseaのパス」として正当であるかは微妙だと思います。

Z. R. への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- Akira Kakuto の投稿
同じバージョンで、32bit は失敗し、64bit は成功する
ようです。不思議です。
Akira Kakuto への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- はやて (h20y6m) の投稿

エラーになるのは -output-directory で指定したときのようです。

ProcessMonitor で見たところ .log ファイルを開くときに NAME INVALID で失敗していました。 Stack を見ると lua53.dll (の fu8open?)から wopen を呼んでいるところのようです。

デバッグしてみると _wopen\\?\C:\\tex\text.log のような不正なパスが渡されていました(\\?\ が前置されているので \\ は不正)。

\\?\ を前置する処理は r54881 ではいった?)

はやて (h20y6m) への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- Akira Kakuto の投稿
64bit がエラーにならないのがわかりませんが、
path のチェックをもう少し厳密にすることを考えてみます。
ただし、TeX Live における変更は 2021 になります。
Akira Kakuto への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- Akira Kakuto の投稿
> ただし、TeX Live における変更は 2021 になります。

lua[hb,jit,jithb]tex は比較的独立しているので、
Windows だけ update しても悪影響は無いだろうと考え、
すでに update したものをあげました。
こちらでは、
pandoc TEST.md -o test.pdf --pdf-engine=lualatex
が動くようになっています。
Akira Kakuto への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- liki の投稿
ありがとうございます
週明けに職場で試してみます
liki への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- Akira Kakuto の投稿
TeX Live のバイナリパッケージが準備できるまでに、
少し時間がかかるかもしれません。
Akira Kakuto への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- はやて (h20y6m) の投稿

同じバージョンで、32bit は失敗し、64bit は成功するようです。不思議です。

いろいろ試してみたところ UAC 仮想化が影響しているような気がします。 UAC 仮想化が有効になっていると \\?\C:\\tex\text.log のようなパスがエラーになるようです。 UAC 仮想化が無効になっていると \\?\ 付きでもドライブレター直後の二重 \\ はエラーにならないようです。

64bit プロセスは UAC 仮想化が無効になるのでエラーにならないと思われます。 32bit プロセスでも manifest で requestedExecutionLevel を指定するとエラーにならないようです。

Akira Kakuto への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- liki の投稿
tlmgr update実施
pandoc 2.11.0.4
lualatex --version
This is LuaHBTeX, Version 1.12.0 (TeX Live 2020/W32TeX)

pandoc test.md -o test.pdf --pdf-engine=lualatex
問題なくpdfに変換できました

しかし、別の問題が発生

test2.md
# test
- [x] test1
- [ ] test2

これが変換できない
Error producing PDF.
! Undefined control sequence.
<recently read> \square
l.63 \item[$\square$]

pdf-engineがlualatexでもxelatexでもエラーで変換できない

pandoc test2.md -s -o test2.tex
変換されたtexファイルを添付します
liki への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- liki の投稿
pandoc 2.11.04と2.10.1ではテンプレートが変更されてるようです
2.10.1では\usepackage{amssymb,amsmath}となっていますが、
2.11.04では\usepackage{amsmath}でamssymbは下記のようになっていました

\usepackage{amsmath}
\usepackage{ifxetex,ifluatex}
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp} % provide euro and other symbols
\usepackage{amssymb}
\else % if luatex or xetex
$if(mathspec)$
\ifxetex
\usepackage{amssymb}
\usepackage{mathspec}
\else
\usepackage{unicode-math}
\fi
...


liki への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- Z. R. の投稿

PandocのIssueで関連するのはこれですね。

unicode-mathの目的は「数式の文字を(従来のType1フォント群ではなく)OpenTypeフォントで出力する」ことなので、そこでamssymbを読み込むのは意味を成さない、というのは真っ当な議論でしょう。ただそうだとすると、自分の感想としては
「unicode-mathで\square命令が提供されないのが問題ではないか」
と思ってしまいます。

※ちなみに、「チェック付ボックス」を表す\boxtimesはunicode-mathで定義されています。

Z. R. への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- 奥村 晴彦 の投稿
なるほど。ちなみに

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{unicode-math}
\pagestyle{empty}
\begin{document}
$\square \boxtimes$
\end{document}

とすると \square は MSAM10,\boxtimes は Latin Modern Math で,高さが不揃いになってしまいますね。
奥村 晴彦 への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- Z. R. の投稿

\boxtimes(U+22A SQUARED TIMES)と外観が揃うのはU+25A1(WHITE SQUARE)で、これのunicode-mathでの命令名は「\mdlgwhtsquare」のようです。

\documentclass[a4paper]{article}
\usepackage{unicode-math}
%\setmathfont{latinmodern-math.otf}%←既定
%\setmathfont{texgyrebonum-math.otf}
%\setmathfont{texgyredejavu-math.otf}%←揃わない
%\setmathfont{texgyrepagella-math.otf}
%\setmathfont{texgyreschola-math.otf}
%\setmathfont{texgyretermes-math.otf}
\begin{document}
$\boxtimes$      % U+22A0 SQUARED TIMES
$\mdlgwhtsquare$ % U+25A1 WHITE SQUARE
\end{document}

従って、自前で回避するのであれば、次のようにすればいいでしょう。

---
title: テスト
author: 某ZR
documentclass: bxjsarticle
classoption:
  - pandoc
header-includes: |
  \providecommand{\square}{\mdlgwhtsquare}
...

- [ ] ソレ
- [x] アレ
Z. R. への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- liki の投稿
いろいろありがとうございます
フォント周りはややこしいですね

ちなみに直接関係ないですが、pandocとlualatexでwindowsのシステムフォントを使う方法を探していたらこれを見つけました

R Markdown + XeLaTeX で日本語含め好きなフォントを使って PDF を出力する
https://blog.atusy.net/2019/05/14/rmd2pdf-any-font/

Z. R. への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- liki の投稿
ありがとうございます

ちょっとした文書をmarkdownで作成し、pandocを使用するためにbxjsclsのpandocモードが便利だったんですが、しばらくwkhtmltopdfでやることにしました

liki への返信

Re: pandocでlualatexを使用してmdからpdfに変換ができない

- liki の投稿
自宅PCで試してみるとpandocもlualatexも同じバージョンなのにエラーなくpdfが作成できました
う~ん、何が違うのかさっぱりわからない