覆盖同步文本位置

覆盖同步文本位置

我如何覆盖或者“伪造” synctex 位置?

假设我们有一个文件foo.tex,其中定义了一个命令:

%% foo.tex
\newcommand{\foo}{Very much content here}

以及文件 bar.tex,其中使用以下命令:

%% bar.tex
\foo

在这种情况下,synctex 会跳转到bar.tex,但我希望它跳转到 foo.tex。

是否有可能创建一个命令\setSynctexPosition,其含义类似于“synctex,请将我与文件 foo.tex 同步”,如下所示:

%% foo.tex
\newcommand{\foo}{%
  \setSynctexPosition{foo.tex}{line 3}%
  Very much content here%
}

这可以做到吗,例如通过向.synctex文件附加一些文本,例如\immediate\write18{echo '<some synctex commands>' >> \jobname.synctex}

答案1

最后,我找到了一个解决方案,它出奇的简单!

为了完整起见:

%% bar.tex
\documentclass{article}
\input{foo}
\begin{document}
    \foo
\end{document}

解决方案:

%% foo.tex
\ifdefined\fakesynctexhelper\fakesynctexhelper\fi%% Does nothing at the beginning, helps later

\newcommand{\foo}{%
    {%% group, so that if will not be defined later anymore
        \def\fakesynctexhelper{%
            Very much content here%% The actual desired content of \foo
            %
            \endinput%% Stop processing the file again
        }%
        \input{foo}%% input this file, so that the synctex information is updated.
    }%
}

在 的开头foo.tex,如果定义了辅助命令,则运行该命令。在 命令 中,\foo我们定义辅助命令来执行\foo应执行的操作并调用文件foo.tex,其中此命令在开头展开,以便 synctex 知道/认为已foo.tex处理。此外,辅助命令设置为停止对文件的进一步处理foo.tex,以便不会再次处理其原始内容。

相关内容