Automatisches *Alarm*-Aufdecken von Linien einer Ausrichtung im Beamer

Automatisches *Alarm*-Aufdecken von Linien einer Ausrichtung im Beamer

ich benutzediese Antwortum das Aufdecken von Linien einer Linie zu automatisieren. Ich möchte jedoch beim Aufdecken eine Warnung ausgeben.

Ich kenne expl3 nicht und meine Versuche, die oben referenzierte Antwort zu hacken, sind fehlgeschlagen: Ich habe versucht, die Antwort so anzupassen, dass sie wie folgt \onslideeingeschlossen wird:\alert<+>{}

\alert<+>{\onslide<+->{ ##1 \\ }}

Aber ich erhalte eine Fehlermeldung:

! Extra }, or forgotten \endgroup. 

Ich habe auch versucht, Folgendes \alert<+>{}auf die Innenseite zu setzen:

\tl_put_right:Nn \l_tmpa_tl { \onslide<+->{ \alert<+>{ ##1 } } \\ }

Aber ich erhalte die gleiche Fehlermeldung:

! Extra }, or forgotten \endgroup.

Eine robustere Lösung als Hardcoding \alertwäre, die Overlay-Richtlinie auf einer höheren Ebene festlegen zu können. Ich erwähne dies in einem Kommentar in meinem Beispiel unten. Aber wenn das nicht möglich ist, wäre ich mit einem Hardcoding zufrieden \alert.

Beispiel, das das aktuelle Verhalten zeigt. Ich möchte, dass das Ausrichtungsverhalten im Beispiel dem Aufzählungsverhalten ähnelt.

\documentclass{beamer}

\let\oldalign\align
\let\endoldalign\endalign

% https://tex.stackexchange.com/a/611688/12212 
\ExplSyntaxOn
\NewDocumentEnvironment{myalign}{+b}
  {
    \tl_set:Nn \l_tmpa_tl { \begin{oldalign} }
    \seq_set_split:Nnn \l_tmpa_seq { \\ } {#1}
    \seq_map_inline:Nn \l_tmpa_seq
      {
        \tl_if_empty:nF { ##1 }
          {
\tl_put_right:Nn \l_tmpa_tl { \onslide<+->{ ##1 \\ } }
          }
      }
    \tl_put_right:Nn \l_tmpa_tl { \notag \end{oldalign} \vskip-1.5em }
    \l_tmpa_tl
  } { }
\ExplSyntaxOff

\newenvironment{overlayalign}
  {
    \renewenvironment{align}{%
        \begin{myalign}
    }{%
        \end{myalign}
    }
  }
  {
  }

\begin{document}

\begin{frame}[<alert@+|+->]
% I generally prefer the alert, but it would be nice to be able to change to
% the following, and align adapts (i.e., would not alert), just like itemize:
%\begin{frame}[<+->]

I would like behavior similar to itemize:

\begin{itemize}
\item one
\item two
\item three
\end{itemize}

\begin{overlayalign}
\begin{align}
abc & = def \\
    & = ghi \\
    & = jkl \\
    & = 0.  \\
\end{align}
\end{overlayalign}
\end{frame}

\end{document}

Antwort1

Hier ist ein Ansatz unter Verwendung der L3-Programmierschicht

\documentclass{beamer}

\ExplSyntaxOn

\seq_new:N \l__myalign_linesin_seq
\seq_new:N \l__myalign_linesout_seq
\seq_new:N \l__myalign_onelinein_seq
\seq_new:N \l__myalign_onelineout_seq

\NewDocumentEnvironment{myalign}{+b}
{
    \exp_after:wN \cs_set_nopar:Npn \cs:w tagform@ \cs_end: ##1
    {
        \cs:w maketag@@@ \cs_end: 
        { 
            \action<.-|alert@.> { ( \ignorespaces ##1 \unskip \cs:w @@italiccorr \cs_end: ) } 
        }
    }
    \seq_set_split:Nnn \l__myalign_linesin_seq { \\ } { #1 }
    \seq_map_inline:Nn \l__myalign_linesin_seq
    {   
        \seq_clear:N \l__myalign_onelineout_seq
        \seq_set_split:Nnn \l__myalign_onelinein_seq { & } { ##1 }
        \seq_map_indexed_inline:Nn \l__myalign_onelinein_seq
        {
            \int_compare:nNnTF { ####1 } = { 1 }
            { \seq_put_right:Nn \l__myalign_onelineout_seq { \action<+-|alert@+> { ####2 } } }
            { \seq_put_right:Nn \l__myalign_onelineout_seq { \action<.-|alert@.> { ####2 } } }
        }
        \seq_put_right:Nx \l__myalign_linesout_seq { \seq_use:Nnnn \l__myalign_onelineout_seq { & } { & } { & } }
    }
    \begin{align}
    \seq_use:Nnnn \l__myalign_linesout_seq { \\ } { \\ } { \\ }
    \end{align}
} { }
\ExplSyntaxOff

\begin{document}
    
    \begin{frame}[<alert@+|+->]
        
        I would like behavior similar to itemize:
        
        \begin{itemize}
            \item one
            \item two
            \item three
        \end{itemize}
        
        \begin{myalign}
            abc & = def  \\
            & = ghi  \\
            & = jkl  \\
            & = 0. 
        \end{myalign}
        
        \visible<+->{test}
        
    \end{frame}
    
\end{document}

Antwort2

Ein anderer Ansatz mit tabularray:

\documentclass{beamer}

\usepackage{tabularray}
\UseTblrLibrary{counter}
\NewDocumentEnvironment{myalign}{+b}{
\begin{tblr}{
  column{1}={co=1},
  column{Z}={co=1},
  column{odd}={halign=r},
  column{even}={halign=l},  
  colsep = 0pt,
  cells={mode=dmath},
  cell{1-Z}{1}={cmd=\action<+-|alert@+>},
  cell{1-Z}{2-Z}={cmd=\action<.-|alert@.>},
  cell{1-Z}{Z}={appto={\hfill \refstepcounter{equation}(\theequation)}}
}
#1
\end{tblr}
}{}

\begin{document}

\begin{frame}[<alert@+|+->]

I would like behavior similar to itemize:

\begin{itemize}
\item one
\item two
\item three
\end{itemize}

\begin{myalign}
abc & = def  \\
    & = ghi  \\
    & = jkl  \\
    & = 0.   \\
\end{myalign}

\visible<+->{test}

\end{frame}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen