我知道 SyncTeX 在 Beamer 中无法正常工作(请参阅在 Beamer 中反向 PDF 搜索)。
但是在用 定义的环境中,逆向搜索似乎也存在问题\NewEnviron
。
我想这样称呼:
\begin{foo}{x}{y}
bla bla
\end{foo}
它不需要是一个环境。但我不知道该用什么,因为我想控制 body,这在\BODY
in 中是可能的\NewEnviron
,但在 中是不可能的\newenvironment
。
那么是否可以定义一个类似环境的东西,其中 SyncTeX 指向环境中的文本而不是环境的末尾?
在itemize
环境中它似乎有效。有人知道它在那里是如何实现的吗?
例子:
\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}
对于 a、b、c 逆向搜索不起作用,但对于 d、e、f 则起作用。对我来说,重要的是原始文本主体可以被替换。
答案1
\newenvironment
我们可以通过和\comment
来实现它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}
然后逆向搜索也对 a、b 和 c 起作用。