Сетка Tikz при прямой компиляции процесса против двойной компиляции против компиляции в IDE

Сетка Tikz при прямой компиляции процесса против двойной компиляции против компиляции в IDE

Я немного исправил свою проблему, но ищу понимание того, почему вещи ведут себя так, как они себя ведут. Вопрос касается компиляции процессов, поэтому я не думаю, что MWE действительно требуется, но предоставил его в конце на всякий случай. Этот пост получился довольно длинным, так что заранее извините за историю, но она кажется уместной для того, как я пришел к своей текущей дилемме.

Контекст: Я пытаюсь разработать «генератор экзаменов» через python, который берет библиотеку вопросов, выбор типа вопросов для включения и продолжительность экзамена, а затем создает экзамен и решения, выбирая вопросы, которые соответствуют критериям, и импортируя их в документ xelatex. Затем он компилирует документ для пользователя, чтобы у него был готовый к использованию pdf.

Большая часть документа создана без проблем, однако я создал ряд сеток для многих вопросов с помощью Tikz. При запуске каждого вопроса через overleaf и 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 должен, по крайней мере, в моем представлении, создавать тот же документ. Однако компиляция того же документа .tex в TeXstudio создает сетку так, как я ожидаю, что она будет выглядеть КАЖДЫЙ раз, тогда как вызов процесса в 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}

(Я не ожидаю, что настройки пространства или геометрии повлияют на проблему, с которой я столкнулся, но включил их на случай, если все вернется к этому)

Связанный контент