Размещение плавающего объекта в документе обычно подразумевает не только изменение модификаторов, таких как [t]
и т. д., но и перемещение по коду — особенно figure*
окружениям в twocolumn
документах, которые должны быть видны компилятору до страницы, на которой они должны фактически появиться.
Многократное перемещение длинных плавающих данных, в частности, таблицы, может быть довольно раздражающим; кроме того, при использовании программного обеспечения для контроля версий это приводит к появлению значительных diff
s там, где на самом деле никаких существенных изменений не происходило, и нарушает 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}