Synctex 和环境

Synctex 和环境

Synctex 可以在 LaTeX 代码和编译后的 PDF 之间跳转,如果您的文档较大,这绝对很棒。但是,我的印象是,当您使用环境时,Synctex 只会跳转到环境,而不是您想要跳转的精确位置。如果您的环境很小,这并不重要,但如果您的环境很大,这非常烦人。有没有办法解决这个问题,例如更改环境的实现或重新配置 synctex 等?

这个问题是讨论的结果计数器条件上的多行文本注释,因为本次讨论的结果是一个通常包含大量文本的环境。

这个问题可能类似于TeXShop 和 TeXworks 中的 SyncTeX 功能,但我对 TeXShop 不是特别感兴趣。

答案1

我在这里也遇到过类似的问题:是否有办法让 SyncTeX 在环境中处理文本?

问题在于Environ,在由 生成的环境中,\NewEnvironSyncTeX\BODY只能将其识别为一个块。

但在环境中创建的\newenvironment文本可以被 SyncTeX 识别。然而,正如TeXShop 和 TeXworks 中的 SyncTeX 功能SyncTeX 仅识别行。因此,您必须在编辑器中使用换行符才能获得 SyncTeX 的适当分辨率。

如果我们以计数器条件上的多行文本注释,我们得到以下结果:

\documentclass{scrartcl}
\usepackage{environ}

\usepackage{ifthen}
\usepackage{comment}
\usepackage{verbatim}

\newcounter{rlpublvl}%   %this counter stores the publication level
\newcommand{\rlstetpublvl}[1]{\setcounter{rlpublvl}{#1}}%    %sets the publication level to #1

\newenvironment{rltext}{}{}%
  
\newcommand{\rlcheckstatus}[1]{%    %activates the environment rltext if #1 >= rlpublvl
    \addtocounter{rlpublvl}{-1}%
    \ifthenelse{#1 > \value{rlpublvl}}%
        {\includecomment{rltext}}%
        {\excludecomment{rltext}} %
    \addtocounter{rlpublvl}{1}%
}%

\newif\ifhide
\hidefalse
\newenvironment{rlctxt}[1]{%
    \addtocounter{rlpublvl}{-1}%
    \ifthenelse{#1 > \value{rlpublvl}}%
        {}%
        {\hidetrue\expandafter\comment} %
}%
{%
\ifhide
   \endcomment\hidefalse
\fi
\addtocounter{rlpublvl}{1}%
}%


\begin{document}

\rlstetpublvl{5}    %global publication level set to 5

\rlcheckstatus{5} %this is printed
\begin{rltext}
This is ready
for publication.
\end{rltext}

\rlcheckstatus{0}  %this is not printed
\begin{rltext}
This part is still under construction.
\end{rltext}

%-------

\begin{rlctxt}{5}%  %this is printed
This is ready
for publication.
\end{rlctxt}

\begin{rlctxt}{0}%  %this is not printed
This part is still under construction.
\end{rlctxt}
\end{document}

现在rlctxt可以按预期逐行处理环境中的文本,SyncTex 现在可以按预期逐行处理环境中的文本。但是rltext却不能这样工作,因为comment包中的环境中的文本再次被 SyncTeX 识别为一个块。

相关内容