Gibt es eine Änderung, damit SyncTeX in Umgebungen mit Text funktioniert?

Nov 19 2020

Ich weiß, dass SyncTeX in Beamer nicht richtig funktioniert (siehe Inverse PDF-Suche in Beamer ).

Es scheint aber auch ein Problem mit der inversen Suche in Umgebungen zu geben, die mit definiert sind \NewEnviron.

Ich möchte so etwas nennen:

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

Es muss keine Umgebung sein. Aber ich weiß nicht, was ich sonst verwenden soll, weil ich den Körper kontrollieren möchte, der mit \BODYin \NewEnvironmöglich, aber nicht möglich ist \newenvironment.

Ist es also möglich, eine umgebungsähnliche Sache zu definieren, bei der SyncTeX auf den Text in der Umgebung und nicht am Ende der Umgebung verweist?

In itemizeUmgebungen scheint es zu funktionieren. Weiß jemand, wie es dort implementiert wird?

Beispiel:

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

Für a, b, c funktioniert die inverse Suche nicht für d, e, f. Für mich ist es wichtig, dass der ursprüngliche Textkörper ersetzt werden kann.

Antworten

marli Nov 23 2020 at 16:29

Wir können es mit \newenvironmentund \commentvon realisieren 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}

Dann funktioniert die inverse Suche auch für a, b und c.