Tikz 網格上直接進程編譯 vs 編譯兩次 vs 在 IDE 中編譯

Tikz 網格上直接進程編譯 vs 編譯兩次 vs 在 IDE 中編譯

我已經在一定程度上解決了我的問題,但正在深入了解為什麼事情會這樣。問題與編譯過程有關,所以我認為並不真正需要 MWE,但為了以防萬一,最後提供了一個。這篇文章很長,所以提前對這個故事感到抱歉,但感覺它與我如何陷入當前的困境有關。

背景:我正在嘗試通過 python 設計一個“考試生成器”,它採用一個問題庫,選擇要包含的問題類型以及考試應該持續多長時間,然後通過選擇以下問題來創建考試和解決方案匹配條件並將其導入xelatex 文件。然後,它為用戶編譯文檔,以便他們準備好 pdf 文件。

大部分文件的建立都沒有問題 - 然而,我使用 Tikz 創建了一系列網格來解決許多問題。當透過背頁和 TeXstudio 運行每個問題時,網格看起來正是我想要的樣子。然而,當運行 python 程式時,它們似乎是在標頭中的某個位置創建的。

我實現這目標的過程是:

xelatex Exam_Qs.tex

為了嘗試解決這個問題,我複製了 TeXstudio 正在使用的進程,因此開始運行它:

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

這會導致網格顯示在正確的頁面中,但現在有時它們會發生移動。實驗表明,其中一種總是能正確顯示,但具體是哪一種並不一致。我通常只使用 IDE,因此我不習慣以不同的方式運行該流程。我的理解是,nonstopmode 告訴 TeX 引擎盡可能地運行過去的錯誤,而synctex 選項允許 IDE 將原始程式碼和 PDF 位置關聯起來。我確信synctex選項對於我的最終預期目的沒有多大作用,但是當事情不起作用時,完全複製TeXstudio過程是有意義的。

真正讓我困惑的是,直接運行進程與在 TeXstudio 中運行進程應該會產生(至少在我看來)相同的文件。然而,在 TeXstudio 中編譯相同的 .tex 文件每次都會產生我期望的網格,而在 python 中調用該過程似乎每次都看起來錯誤,而且總是以不同的方式。

在輸入所有這些內容並重新創建我的問題以便我可以完整地描述它們之後,我最終讓 python 只運行該過程兩次,並且 - 你瞧 - 網格完全按照我的預期顯示。最後,我的問題是:

  1. 為什麼執行該進程兩次會導致文件正常顯示/為什麼執行該進程一次會導致文件無法正常顯示。

  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}

(我不希望空間或幾何設定影響我遇到的問題,但已經包括在內,以防這就是它回來的情況)

相關內容