Y a-t-il un changement pour que SyncTeX fonctionne avec du texte dans les environnements?

Nov 19 2020

Je sais que SyncTeX ne fonctionne pas correctement dans Beamer (voir Inverse PDF Search dans Beamer ).

Mais il semble y avoir aussi un problème avec la recherche inverse dans les environnements définis avec \NewEnviron.

Je veux appeler quelque chose comme ça:

\begin{foo}{x}{y}
bla bla
\end{foo}

Il n'est pas nécessaire que ce soit un environnement. Mais je ne sais pas quoi utiliser d'autre car je veux contrôler le corps ce qui est possible avec \BODYin \NewEnvironmais pas possible avec \newenvironment.

Est-il donc possible de définir une chose semblable à un environnement, où SyncTeX pointe vers le texte dans l'environnement et non à la fin de l'environnement?

Dans les itemizeenvironnements, cela semble fonctionner. Quelqu'un sait-il comment cela est mis en œuvre là-bas?

Exemple:

\documentclass{letter}
\usepackage{environ}

\newif\ifshow

\NewEnviron{foo}[3]{
\ifshow
    #1\\
    \BODY
    -----------
\else
  Alert #1 #2 #3
\fi
}

\begin{document}
\begin{foo}{hide}{1}{2}
hidden Text
\end{foo}

\showtrue

\begin{foo}{show}{2}{1}
\begin{itemize}
    \item a
    \item b
    \item c
\end{itemize}
\end{foo}

\begin{itemize}
    \item d
    \item e
    \item f
\end{itemize}

\end{document}

Pour a, b, c, la recherche inverse ne fonctionne pas pour d, e, f cela fonctionne. Pour moi, il est important que le corps du texte d'origine puisse être remplacé.

Réponses

marli Nov 23 2020 at 16:29

Nous pouvons le réaliser avec \newenvironmentet à \commentpartir de verbatim:

\documentclass{letter}
\usepackage{verbatim}

\newif\ifshow

\newenvironment{foo}[3]{
 \ifshow
    #1\\
 \else
    \def\a{#1}
    \def\b{#2}
    \def\c{#3}
    \expandafter\comment
 \fi
}
{
 \ifshow
    -----------
 \else
    \expandafter\endcomment
    Alert \a~\b~\c
 \fi
}

\begin{document}
\begin{foo}{hide}{1}{2}
hidden Text
\end{foo}

\showtrue

\begin{foo}{show}{2}{1}
\begin{itemize}
    \item a
    \item b
    \item c
\end{itemize}
\end{foo}

\begin{itemize}
    \item d
    \item e
    \item f
\end{itemize}

\end{document}

Ensuite, la recherche inverse fonctionne également pour a, b et c.