Gibt es eine Änderung, damit SyncTeX in Umgebungen mit Text funktioniert?
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 \BODY
in \NewEnviron
mö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 itemize
Umgebungen 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
Wir können es mit \newenvironment
und \comment
von 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.