直接プロセスコンパイルと 2 回のコンパイルと IDE でのコンパイルでの Tikz グリッド

直接プロセスコンパイルと 2 回のコンパイルと IDE でのコンパイルでの Tikz グリッド

問題はある程度解決しましたが、なぜこのような動作をするのかについて、洞察を求めています。質問はコンパイルプロセスに関係しているので、MWE は実際には必要ないと思いますが、念のため最後に 1 つ用意しました。この投稿はかなり長くなりましたので、ストーリーについてはあらかじめお詫びしますが、現在のジレンマに至った経緯に関連しているように感じます。

コンテキスト: 私は、質問のライブラリ、含める質問の種類の選択、試験の長さなどを考慮し、基準に一致する質問を選択して xelatex ドキュメントにインポートすることで、試験と解答を作成する Python を使用した「試験ジェネレーター」を設計しようとしています。次に、ユーザー向けにドキュメントをコンパイルし、すぐに使用できる PDF を用意します。

ドキュメントの大部分は問題なく作成されていますが、私は Tikz を使用して多くの質問に対して一連のグリッドを作成しました。すべての質問を Overleaf と TeXstudio で実行すると、グリッドはまさに私が望むとおりの外観になります。しかし、Python プログラムを実行すると、代わりにヘッダーのどこかに作成されるようです。

これを達成するために私が実行したプロセスは次のとおりです。

xelatex Exam_Qs.tex

これを修正するために、TeXstudio が使用していたプロセスをコピーし、代わりにこれを実行し始めました:

xelatex.exe -synctex=1 -interaction=nonstopmode "Exam_Qs".tex

これにより、グリッドが正しいページに表示されますが、ずれることがあります。実験してみると、常に正しく表示されるものが 1 つあるようですが、どれが正しく表示されるかは一定ではありません。私は通常 IDE のみを使用するため、プロセスを別の方法で実行することに不安を感じています。私の理解では、nonstopmode は TeX エンジンにエラーをできるだけ多く実行するように指示し、synctex オプションは IDE がソースと PDF の位置を関連付けることを可能にします。synctex オプションは、最終的な目的にはあまり役に立たないと思いますが、うまくいかないときは、TeXstudio プロセス全体をコピーするのが理にかなっています。

本当に困惑しているのは、プロセスを直接実行した場合と TeXstudio 内で実行した場合では、少なくとも私の考えでは、同じドキュメントが生成されるはずだということです。しかし、同じ .tex ドキュメントを TeXstudio でコンパイルすると、毎回期待どおりのグリッドが生成されますが、Python でプロセスを呼び出すと、毎回間違った表示になり、常に異なる表示になります。

これらすべてを入力し、問題を再現して完全に説明できるようにした後、Python でプロセスを 2 回実行したところ、なんと、グリッドが期待どおりに表示されました。それでは最後に、私の質問は次のとおりです。

  1. プロセスを 2 回実行するとドキュメントが正しく表示されるのはなぜですか。/ プロセスを 1 回実行するとドキュメントが正しく表示されないのはなぜですか。

  2. 呼び出しているプロセスを変更して、2 回呼び出さなくても済むようにすることはできますか?

私が作成しているグリッドの MWE をいくつか示します。

\documentclass[11pt,twoside,a4paper]{article}
\usepackage[margin=2cm, headheight=1.25cm, headsep=0.5cm]{geometry}
\usepackage{tikz} % for creating pictures using tikzpicture

\begin{document}

\begin{tikzpicture}[remember picture,overlay]
    \label{grid}
    % Define the size of the grid squares
    \def\minorsize{2mm} % Minor grid size
    \def\majorsize{1cm} % Major grid size
    
    % Calculate the adjusted positions for the grid
    \path (current page.south west) ++(20mm,23mm) coordinate (grid sw); % bottom left point
    \path (current page.north east) ++(-20mm,-23.8mm) coordinate (grid ne); % top right point
    
    % Draw the minor grid
    \draw[black!20, step=\minorsize] (grid sw) grid (grid ne);
    
    % Draw the major grid
    \draw[black!50, step=\majorsize] (grid sw) grid (grid ne);
\end{tikzpicture}\newpage

\vspace{10mm}\begin{tikzpicture}[remember picture, overlay]
    \label{grid}
    % Define the size of the grid squares
    \def\minorsize{2mm} % Minor grid size
    \def\majorsize{1cm} % Major grid size
    
    % Calculate the adjusted positions for the grid
    \path (current page.south west) ++(20mm,25.8mm) coordinate (grid sw); % bottom left point
    \path (current page.north east) ++(-20mm,-41mm) coordinate (grid ne); % top right point
    
    % Draw the minor grid
    \draw[black!20, step=\minorsize] (grid sw) grid (grid ne);
    
    % Draw the major grid
    \draw[black!50, step=\majorsize] (grid sw) grid (grid ne);
\end{tikzpicture}\newpage

\begin{tikzpicture}[remember picture, overlay]
    \label{grid}
    % Define the size of the grid squares
    \def\minorsize{2mm} % Minor grid size
    \def\majorsize{1cm} % Major grid size
    
    % Calculate the adjusted positions for the grid
    \path (current page.south west) ++(20mm,123mm) coordinate (grid sw); % bottom left point
    \path (current page.north east) ++(-20mm,-23.8mm) coordinate (grid ne); % top right point
    
    % Draw the minor grid
    \draw[black!20, step=\minorsize] (grid sw) grid (grid ne);
    
    % Draw the major grid
    \draw[black!50, step=\majorsize] (grid sw) grid (grid ne);
\end{tikzpicture}\vspace{153mm}

\end{document}

(スペースやジオメトリの設定が問題に影響するとは思いませんが、これが再発する場合に備えて記載しました)

関連情報