Y a-t-il un changement pour que SyncTeX fonctionne avec du texte dans les environnements?
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 \BODY
in \NewEnviron
mais 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 itemize
environnements, 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
Nous pouvons le réaliser avec \newenvironment
et à \comment
partir 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.