Macもwindowsもlatexmkを使ってLuaLaTeXでコンパイルするようにしたいのですがMacではコンパイルできwindowsではコンパイルできません。試しに保存場所をOneDriveからダウンロードに変えるとWindowsでもコンパイルできるようになりました。おそらく,OneDriveにファイルを保存したときパス上に日本語が含まれるのが原因だと思うのですがなんとかすることはできないのでしょうか。
なお,settings.jsonは,添付のようにしています。もし,おかしなところがあればご指摘いただけますと幸いです。
よろしくお願いします。
%USERPROFILE%\OneDrive\ドキュメント\test.tex を作成して
試してみましたが、問題なく PDF は作成できる様です。
ログを見ているとあちこちで「ドキュメント」の部分が
文字化け表示されますが、ビルド作業は行われています。
ファイルシステムの文字コードが気になるのであれば
Document を作成して バツバツプロジェクト のようなショートカット作成
にしてみてはいかがでしょうか。
動きを見ていると「シートカットのパス」は「通常のパス」
に置き換えている様なので。
また、%USERPROFILE% にノンアスキー文字が含まれているならば
C:\My-Document などとショートカットを貼る方法もあると思います。
さて、vscode などで latex ファイルのビルドを行うには、今回の場合
latexmk オプションなどなど ファイル名
を発行します。この latexmk を起動した時のパラメータ情報は、
latexmk が perl スクリプトなので、当該ディレクトリに
latexmkrc (テストなので .(dot) をつけない)を以下の様に
設置することでどのようなパラメータが渡ってきているか
確認可能です。
use Cwd;
print "DEBUG PWD " . Cwd::getcwd() . "\n";
while ( my( $index, $argc ) = each @ARGV ) {
print "DEBUG ARG[$index] = $argc\n";
}
参考になれば幸いです。
和田様
ご返信ありがとうございます。そして返信が遅くなり申し訳ございません。
Takashima Jun様への返信でコンパイルが完全に成功したかのように書いていますが返信する時に検証したのとは別のファイルで検証するとエラーが出ながらもpdfが表示される状況になってしまいました。
さて,和田さんはWindows11でcp932のままで%USERPROFILE%\OneDrive\ドキュメント\test.texを作成して試されたということですが私がコンパイルしようとしたファイルは,およそ次のようなパスにあります(パスに個人情報が含まれるのでその部分を置換,usernameは,アスキー文字です,所属組織名は削除できません)。C:\Users\asciiusername\OneDrive - 所属組織名\2021\ほげ\ハンドブック\Ver.2\handbook\ハンドブックVer.2.tex
>それとlatexmkrc (テストなので .(dot) をつけない)を以下の様に設置することでどのようなパラメータが渡ってきているか確認可能です。・・・ とのことですがそれをどう確認するのか分かりませんでした。
乱文の返信となりますがよろしくお願いします。
ログファイルを見ると原因がわかると思います。
あるいはシステムの文字コードを utf-8 にした影響かもしれません。
◆ vscode 内でコマンド発行された latexmk のパラメータなどの確認方法(添付画像を参考にしてください)
「表示」→「出力」と進み、ちょっとわかりにくいけど右側にプルダウンメニューがありますので
今回のケースだと「LaTeX Compiler」を選ぶと、cmd プロンプト実行時のように出力されたものが表示できます。
文字化けしたように表示されています。おそらく latexmk の中では単なるバイト列として
ファイル操作しているので問題なく処理できると考えています。
なお、その上に LaTeX workshop もありますのでそちらも参考にされると良いでしょう。
これらの情報で、先頭の問題の現象も掴めると良いのですが。
和田様
再度のご返信ありがとうございます。
LaTeX Compilerの出力を添付させていただきます。
そして,問題が発生するファイルと同じディレクトリで和田さんが検証されたのと同じようなtexファイルをコンパイルしたところ問題なく完了しました。
また,問題が発生するファイルの保存場所をOneDriveからダウンロードに変えるとやはりコンパイルできるようになりました。
問題となるファイルは,ファイルはほかのファイルをincludeしたりしているのでそういったことが関係しているのかもしれませんが(そのファイルを公開出来たらいいのですがかなり個人的な内容になるので...)。
またもや乱文での返信になってしまったように思いますがよろしくお願いします。
latexmk はスクリプトとしては内部的にはファイルパスは、単なるバイト列の様ですが、
それから起動される子プロセスが関係すると S-JIS utf-8 の問題が生じる様ですね。
この辺がクリアできればエクスプリメンタルな utf-8(65001) 問題がクリアになりそうですね。
可能であれば、その辺の状況をレポートしていただければ、windows の full-utf-8 化に
貢献しそうだと思うのは考えすぎかな?
ということで、TeXlive の発展のため、Windows の full-utf-8 化のためにも
可能な限り、情報を公開していただけると助かります。
和田様
「問題となるファイルは,ファイルはほかのファイルをincludeしたりしているのでそういったことが関係しているのかもしれませんが...」というように予想しておりましたがふと思い立って以下のような簡単なソースに変更してコンパイルをしてみたところ問題のファイルと同様にエラーが表示されるがpdfが表示されるという状態になります。ただ,これも別のディレクトリに移動するとエラー無くコンパイルが完了しました。
\documentclass[paper=a4,fontsize=12pt,head_space=20mm,foot_space=20mm,line_length=180mm,book,openany]{jlreq}
\usepackage{hanb}
\begin{document}
おはようございます。
こんにちは。
こんばんは。
\end{document}
一連のファイル等を含めたものをzipファイルで添付させていただきます(問題となる元のファイルを添付することも考えましたが内容が多く,一部私以外の個人情報が含まれるので勝手ながら控えさせていただきまました)。
よろしくお願いします。
P.S. 最初の投稿で空のzipファイルを投稿してしまいました。申し訳ございません。
さて、「エラーになるけどPDF ができている」に関してですが、
昨夜のログを再度眺めたところ
相互参照を行なっているので、何度か lualatex を起動しているが
相互参照問題が解決できていないためにエラーになっているように
思えます。
まずとりあえずコンパイルして pdf 作ってみる
Running 'lualatex -synctex=1 -interaction=nonstopmode -file-line-error -recorder "./ハンドブックVer.2.tex"'
LaTeX Warning: Citation `10029838636' on page 4 undefined on input line 33.
LaTeX Warning: Reference `eq:rpm' on page 5 undefined on input line 21.
LaTeX Warning: There were undefined references.
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.
Output written on ハンドブックVer.2.pdf (7 pages, 358836 bytes).
Latexmk: Log file says output to 'ハンドブックVer.2.pdf'
相互参照されている箇所があるので、も一回コンパイル
Running 'lualatex -synctex=1 -interaction=nonstopmode -file-line-error -recorder "./ハンドブックVer.2.tex"'
LaTeX Warning: Citation `10029838636' on page 4 undefined on input line 33.
LaTeX Warning: There were undefined references.
Output written on ハンドブックVer.2.pdf (7 pages, 359668 bytes).
pdf は作ったけどまだ相互参照に問題ありエラーに
Failure to make 'ハンドブックVer.2.pdf'
Latexmk: Log file says output to 'ハンドブックVer.2.pdf'
Latex failed to resolve 1 citation(s)
lualatex: failed to create output file
C:\texlive\2022\bin\win64\runscript.tlu:915: command failed with exit code 12:
上記ファイルの 915 行目は 「 local ret = assert(os.spawn(ARGV))」となっているので
2回目のコンパイルがエラーと判定されているのだと思います。
ですので、お試しのソースに \ref{eq:rpm} を入れるとエラーになると思います。
IDE だとなんとなくうまくいっているように思えますが、ログをチェックする癖をつけると良いと思います。
ちょっと専門的になりますが、この手のものを検出するとき ripgrep (コマンドは rg) を
使うと思わぬものを見つけることが可能です。
今回は、以下のようなコマンドで調べました。
rg -e Citation -e Running -e Warning -e exit -e failed -e 2.pdf
ripgrep は mac では homebrew などで、windows は chocoletty とか scoop で導入できます。
以上、参考までに
ご返信ありがとうございます。
>相互参照問題が解決できていないためにエラーになっているように思えます。
とのことですが別ディレクトリに移動したときエラーが出ずpdfが表示される(画面上に赤い警告のポップアップが表示されない)。
さらにhttps://okumuralab.org/tex/mod/forum/discuss.php?d=3458#p21071にあるように相互参照していないものでもエラーが出る(画面上に赤い警告のポップアップが表示される)。
そのため,保存場所に問題があるのではないかと思っています。私の浅い知識からの発言ですのでお気を悪くされたら申し訳ございません。
参考になるように述べておきます。
latexmk.pl について
設定ファイル latexmkrc などの位置を確定するために、 abs_pathを使用して
起動ディレクトリの存在しているpathを探索している。
これがtexliveやstrawbery Perlなどの実装でCP932に正しく対応していないので
「ソ表構」など5cをsjisの2バイト目に含むpathで実行できない。
カレントディレクトリを問題のないpathに設定した場合には、絶対pathで対象ファイル
を指定することになるが、「ファイルが見つかりません」とopenに失敗する。
https://winperler01.com/article/post-1238
によるとActivePerl 5.16までの実装では問題なかったが現在では同じエラーとのこと。
CP932のままでの解決策は管理者としてmklink /D alphaname Kanjiname
等の形でシンボリックリンクを作成すること(ショートカットではない)
vs-codeはCP932で5cを含むディレクトリが含まれていても問題なく動作する。
ところで伊藤さん、「画面上に赤い警告のポップアップが表示される」というのは
なんなのか想像がつきませんが、具体的に中身を説明してください。
ご返信ありがとうございます。
>「画面上に赤い警告のポップアップが表示される」というのは
なんなのか想像がつきませんが、具体的に中身を説明してください。
分かりにくい表現となってしまい申し訳ございません。実際に表示されるものについて画像を添付させていただきます。この表示はありますが生成されるpdfに特に問題はありません。
また,Takashima様にして頂いた検証はシステムロケールがCP932の時だと思いますので現在のUTF-8から戻して検証してみたいと思います。的外れなことを言っていたらすみません。
>「ソ表構」など5cをsjisの2バイト目に含むpathで実行できない。
とのことですが私が実行しようとしているパスに[構」という文字が含まれていました。ただ,これは[構」という文字が含まれている別のpathで実行すると添付のようなエラーのポップアップ表示が出ないのでなぜだろうと思っています。
◆ 「構」という文字が含まれている別のpathで実行すると添付のようなエラーのポップアップ表示が出ないのでなぜ
「表示」→「出力」(Ctrl+Shift+U) で表示される情報に何か記録されていると推測しています。
可能な範囲で Ctrl+Shift+U とお試しになったソースの提供お願いできませんか?
◆ UTF-8 → CP932 について
「構」のほか、「\」(0x5c) を含む SJISの文字は以下を参考にしてください。
https://sites.google.com/site/fudist/Home/grep/sjis-damemoji-jp
CP932 配下で latexmk を使う限り、上記に示した文字をもつファイル名は
ビルドできませんので lualatex かptex2pdf などを使うように settings.json
のビルドルールを作り直す必要があると考えています。
#私のところでは、別の問題「latexmk から未初期化変数使用してるっていう警告メッセージ」
が大量発生し、調査中。
和田さんのおっしゃるように、
seetings.jsonを変更(追加)することを強くおすすめします。
"latex-workshop.latex.recipes": [ の直後(メニューのトップ)に
{
"name": "lualatex",
"tools": [
"lualatex",
]
},
"latex-workshop.latex.tools": [ のどこかに
{
"name": "LuaLaTeX",
"command": "lualatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
},
latex-workshopがエラーとワーニングの区別なしに「通知」を出しているのも
困ったものですが、表示されている右下の一番下は
Retry と言っていて,相互参照のワーニングは2回目のコンパイルをすると解消することが
多いですよ、ということが含意されています。それ以外の場合はくり返しても無駄ですが。
その上に、Open compiler log というボタンがあってクリックするとログファイルが
開くわけですが、コンパイラがlatexmkの場合直接の原因を表示しません。
自分でmain.logのようなファイルを開く必要があるわけです。
ですから最初のうちはlatexmkを使わずに直接lualatexで処理することを強くおすすめします。
なお左パネルのTeXをクリックするとlatexworkshopのサイドパネルが開き、
そこの
Build LaTeX Projectからのrecipeの選択
View Log massagesからの二つのログを参照すること
が使い方の基本となります。
ご返信ありがとうございます。
和田さん,Takashimaさんからご教授いただいたseetings.jsonを変更(追加)をしてlualatexを直接呼び出す(?)ようにしたところCP932,UTF-8の両方で赤いポップアップは,表示されずコンパイルが完了されました。(実はこの質問させていただく前は,ご教授いただいたようにlualatexを直接呼び出して(?)コンパイルをしていました。ですがMacではlatexmkを使っているのでなんとなく統一したいと思ったのとlatexmkは,必要な回数コンパイルしてくれるという便利さからWindowsでもlatexmkを使おうと思って切り替えました。そのとき,lualatexを直接呼び出す(?)設定は消してしまっていました。)
また,latexmkでは,CP932ではエラーで全く進めず,UTF-8では以前と同じですが赤いポップアップが表示されながらもpdfが表示されました。
それらについて,「表示」→「出力」(Ctrl+Shift+U) で表示される情報とlogファイル,自作のstyを添付させていただきます。
CP932,UTF-8とも試したソースは次のものです。
\documentclass[paper=a4,fontsize=12pt,head_space=20mm,foot_space=20mm,line_length=180mm,book,openany]{jlreq}
\usepackage{hanb}
\begin{document}
こんにちは。
\end{document}
よろしくお願いします。
◆Windows CP932 の問題点
CP932 で表される感じの2バイト目に「0x5c」(\)となる文字がいくつかある。
→「”」を二重引用符で囲う場合「"\""」のように所謂エスケープ処理対象と考える
プログラムがいくつか存在する
また Windows のディレクトリー識別子は「\」あるいは「/」であることも遠因として
ファイルパス上のバイト列にある「\」を「/」に強制変換するプログラムもいくつかある。
◆macOS のファイル名パスはUTF-8 であるが、linux 系 OS で持ちられている UTF-8
とはちょっと違う。大きな違いは濁点半濁点。linux 系では例えば「ば」は「ば」であるが
macOS では ぶっちゃけ「は」と「゛」を合わせて表示するので。macOS と他の OS で
ファイル共有する場合は注意が必要である。
◆「私へのムニュムニュ‥」
お気になさらず。face to face でないので、
文字面だけなのでなかなか意図が伝わらないのはお互い様ですから。
私は、伊藤さんが、よく調べて回答されているの見ていて「Good Jobs 」と
いつも応援しています。これからも、当フォーラムのサポートよろしくお願いします。
◆今回の教訓
以下のような環境で運用する場合は latexmk の使用は極力避ける。
- Windows で cp932 で日本語をファイル名パスとするような状況
- macOS でファイル名パスに UTF-8 ベースの日本語が含まれる場合
なお、Takashima さんがおっしゃっているように、
プリミティブなコマンドを cmd プロンプトのような端末コンソールで
検証してから、latexmk や vscodde texworksなどの統合環境に取り込むべし。
最後に、1日もは早く Windows のシステムロケールが
65001 ベースな文字コードになりますように!!
では fish スクリプトでですが確認 。。。
for t in ハ バ パ ゛ ゜
printf " %s %s\n" $t (printf $t | hexdump -C | xargs )
end
ハ 00000000 e3 83 8f |...| 00000003
バ 00000000 e3 83 90 |...| 00000003
パ 00000000 e3 83 91 |...| 00000003
゛ 00000000 e3 82 9b |...| 00000003
゜ 00000000 e3 82 9c |...| 00000003
なるほど、納得。
https://jp.minitool.com/data-recovery/apfs-vs-mac-os-extended-difference-and-format.html
などをみたら 10.13 以降からなんですね。
思えば、いつだったか忘れたのですが
emacs の起動設定でその辺の対処していた設定を修正してたこと思い出しました。
また、それ用の変更スクリプトを使わなくなっていましたね。
和田さん
コードの問題ではなさそうということで、latexmkを
読んでみますと、logファイルのtimestampが起動時よりも
新しくないとlogファイルと認めていません。
普通ならば問題を起こすはずがありませんが、
https://groups.google.com/g/fastcopy/c/sUtLkva1yTo
によるとonedriveの同期において秒以下を切り捨てる場合があるとのこと。
私のonedriveでは再現しませんが、221025のファイルを見ると
(CP932の環境に展開してファイル名が化けたのは切ってあります)
Ver.2.aux 585 Archive 2022/10/25 16:35:48.000000
Ver.2.fls 33972 Archive 2022/10/25 16:35:48.000000
Ver.2.log 51213 Archive 2022/10/25 16:35:48.000000
Ver.2.pdf 8003 Archive 2022/10/25 16:35:48.000000
Ver.2.synctex.gz 2923 Archive 2022/10/25 16:35:48.000000
秒以下が切り揃えられています。
もしもこれが原因だとするとコンパイルに1秒以上かかるものなら
大丈夫ということになりますね。
Takashimaさんのおっしゃるのは、
7032~7046行 あたりの
sub test_gen_file {
...
... ( get_mtime( $file ) >= $$Prun_time)) ..
}
ですよね。どちらも、秒までのようです。
$$Prun_time .... time() で取得(秒未満は扱わないようです)
get_mtime( $file ) ... stat で取得した 9 番目の mtime で秒数
参考 URL
https://perldoc.jp/func/time
https://perldoc.jp/func/stat
何が原因なんだろう??
和田様,Takashima様
和田さんとTakashimaさんに役立つ情報か分かりませんが以下の点について検証してみました。
コンパイル時間の問題
2022年 11月 1日(火曜日) 21:22 - Takashima Jun の投稿の投稿において「もしもこれが原因だとするとコンパイルに1秒以上かかるものなら大丈夫ということになりますね。」ということで2022年 10月 31日(月曜日) 17:53 - 伊藤 直人 の投稿にあるソースでMeasure-Command
を使ってコンパイル時間を計測してみました。すると以下のような結果になりました。
何かのお役に立てれば幸いです。
Measure-Command {latexmk -lualatex ハンドブックVer.2.tex}
Failure to make 'ハンドブックVer.2.pdf'
Latexmk: If appropriate, the -f option can be used to get latexmk
to try to force complete processing.
C:\texlive\2022\bin\win64\runscript.tlu:915: command failed with exit code 12:
perl.exe c:\texlive\2022\texmf-dist\scripts\latexmk\latexmk.pl -lualatex ハンドブックVer.2.tex
Days : 0
Hours : 0
Minutes : 0
Seconds : 8
Milliseconds : 898
Ticks : 88984732
TotalDays : 0.000102991587962963
TotalHours : 0.00247179811111111
TotalMinutes : 0.148307886666667
TotalSeconds : 8.8984732
TotalMilliseconds : 8898.4732
濁点・半濁点の問題
問題が発生するファイルのあるディレクトリであいうえお.tex
とがぎぐげご.tex
という名前でファイルを作成し,コンパイルをするとどちらも赤いポップアップが表示されずコンパイルが完了しました。
何かのお役に立てれば幸いです。
インタネット回線もそんなに速くないので、想定される事象の再現は今のところ無理ですが、
とりあえず検証してみました。 md ファイルに変更してあるので、vscode などで
プレビューしながら参考にしてください。
伊藤さんへ、濁点・半濁点のファイルはだいぶ古い macOS の環境で作成したファイルのように
ファイル名の文字列を変え、それを OneDrive 経由などで windows で操作というようなことが
できれば良いのですが ... このような状況はレアだと思うので、この懸念はとりあえず無視しています。