Какой метод управления исходным кодом хорош для быстрого позиционирования плавающих объектов с помощью SyncTeX?

Какой метод управления исходным кодом хорош для быстрого позиционирования плавающих объектов с помощью SyncTeX?

Размещение плавающего объекта в документе обычно подразумевает не только изменение модификаторов, таких как [t]и т. д., но и перемещение по коду — особенно figure*окружениям в twocolumnдокументах, которые должны быть видны компилятору до страницы, на которой они должны фактически появиться.

Многократное перемещение длинных плавающих данных, в частности, таблицы, может быть довольно раздражающим; кроме того, при использовании программного обеспечения для контроля версий это приводит к появлению значительных diffs там, где на самом деле никаких существенных изменений не происходило, и нарушает blameработу функции.

Один из способов, который я попробовал, это

\newcommand{\figureImportantResult}{\begin{figure}...\end{figure}}

(например, в преамбуле) и перемещая только \figureImportantResult. Это работает довольно хорошо, решая вышеуказанные проблемы (только однострочные изменения, не затрагивающие окружение figure). Однако SyncTeX не совсем понимает это: каждый float связан только с соответствующей \figure...строкой, а не с определением окружения -- поэтому применение изменений к окружению становится более громоздким. То же самое относится и к конструкциям, использующим пакет catchfilebetweentags(см.этот ответ).

Как с этим справиться? \include/ \input, вероятно, сработает, но я хотел бы сохранить весь документ в одном файле (некоторые издатели предпочитают/требуют этого). Я знаю, что могу программно заменить \include/ \inputсодержимым соответствующих файлов перед отправкой, но это не то, что я бы предпочел сделать. Могу ли я подсказать SyncTeX о лучшем расположении этого кода? Есть ли альтернатива, которую \newcommandпонимает SyncTeX?

решение1

Это может быть не очень приятно, но это работает. Может быть, это вдохновит кого-то на публикацию лучшего ответа:

% FIGURE DEFINITION
\ifdefined\whichfigure\begin{myfigures}
    \definefigure{FigA}{%
        AAA
    }
    \definefigure{FigB}{%
        BBB
    }
    \definefigure{FigD}{%
        DDD
    }
    \definefigure{FigE}{%
        EEE
    }
\end{myfigures}\fi

\documentclass{article}

% PREAMBLE CODE
\newenvironment{myfigures}{%
    \let\shownfigure\relax%
}{%
    \if\shownfigure\relax%
        \PackageWarning{\string\showfigure}{Figure `\whichfigure' not defined}%
    \fi%
    \endinput%
}
\newcommand{\definefigure}[2]{%
    \def\thisfigure{#1}%
    \ifx\whichfigure\thisfigure%
        \let\shownfigure\thisfigure%
        #2%
    \fi%
}
\newcommand{\showfigure}[1]{%
    \def\whichfigure{#1}%
    \input{\jobname}%
}
% END OF PREAMBLE CODE

\begin{document}
    % FIGURE INCLUSION
    \showfigure{FigA}

    \showfigure{FigB}

    \showfigure{FigC}

    \showfigure{FigE}
\end{document}

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