Czy jest jakaś zmiana, aby SyncTeX działał z tekstem w środowiskach?

Nov 19 2020

Wiem, że SyncTeX nie działa poprawnie w Beamerze (zobacz Odwrotne wyszukiwanie PDF w beamerze ).

Wydaje się jednak, że występuje również problem z wyszukiwaniem odwrotnym w środowiskach zdefiniowanych za pomocą \NewEnviron.

Chcę nazwać coś takiego:

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

Nie musi to być środowisko. Ale nie wiem, czego jeszcze użyć, ponieważ chcę kontrolować ciało, co jest możliwe z \BODYin, \NewEnvironale nie jest możliwe \newenvironment.

Czy jest więc możliwe zdefiniowanie czegoś podobnego do środowiska, w którym SyncTeX wskazuje na tekst w środowisku, a nie na koniec środowiska?

W itemize-environments wydaje się działać. Czy ktoś wie, jak to tam jest realizowane?

Przykład:

\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}

Dla a, b, c wyszukiwanie odwrotne nie działa dla d, e, f działa. Dla mnie ważne jest, aby oryginalną treść tekstu można było zastąpić.

Odpowiedzi

marli Nov 23 2020 at 16:29

Możemy to zrealizować za pomocą \newenvironmenti \commentpoprzez 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}

Wtedy wyszukiwanie odwrotne działa również dla a, b i c.