在文档中定位浮动元素通常不仅涉及更改诸如[t]
“etc”之类的修饰符,还涉及移动代码 - 尤其是文档figure*
中的环境twocolumn
,编译器必须在它们实际出现的页面之前看到它们。
多次移动长浮点数,特别是表格,可能会非常烦人;此外,当使用版本控制软件时,这会导致出现diff
没有实际发生重大变化的重大变化,并破坏功能blame
。
我尝试过的一个方法是
\newcommand{\figureImportantResult}{\begin{figure}...\end{figure}}
(例如,在序言中)并且只移动\figureImportantResult
。这非常有效,解决了上述问题(只有一行更改不涉及环境figure
)。但是,SyncTeX 并不完全理解这一点:每个浮点数仅与相应的\figure...
行相关联,而不与环境的定义相关联——因此将更改应用于环境变得更加麻烦。使用包的构造也是如此catchfilebetweentags
(请参阅这个答案)。
有什么好办法可以解决这个问题?\include
/\input
可能有效,但我想将整个文档保存在一个文件中(一些出版商更喜欢/要求这样做)。我知道我可以在提交之前以编程方式用相应文件的内容替换\include
/ ,但这不是我想要做的。我可以提示 SyncTeX 该代码的更好位置吗?有没有SyncTeX 能理解的\input
替代方法?\newcommand
答案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}