Você pode usar beamer + minted + tikz para código de etapa única?

Você pode usar beamer + minted + tikz para código de etapa única?

Eu tenho algum código de ponteiro C que gostaria de "etapa única" para mostrar o que acontece com, por exemplo, ponteiros pendentes. Eu uso mintedpara realce de sintaxe e isso parece estar causando o problema.

O código abaixo compila (com -shell-escape), mas o código que deveria ser escapado não é. A razão parece ser um bug pygments(vejahttps://github.com/gpoore/minted/issues/70). Também tentei resolver marvin2kessa redefinição !, mas não consegui fazer o código funcionar. Também tentei várias combinações \begin{minted}[highlightlines=\only<1>{3}\only<2>{5}]{c}sem sucesso.

Alguém tem uma solução? Editar: Minha plataforma é ubuntu 14.04, pygmentize 1.6, cunhada 2.4.1.

\documentclass{beamer}
\usepackage{minted,tikz}
\begin{document}
\begin{frame}[fragile]{Pointers}
\begin{minted}[linenos,escapeinside=||]{c}
  int main(void) {
    char *p;
    p=(char *)malloc(5); |\only<1>{$\Leftarrow$}|
    /* do stuff */
    p=(char *)malloc(7); |\only<2>{$\Leftarrow$}|
    free(p);
    return 0;
}
\end{minted}
\begin{tikzpicture}
  \node<1->[rectangle,draw] (p) {p};
  \node<1->[rectangle,draw,right of=p] (q1) {q1};
  \draw<1>[->] (p) -- (q1);
  \uncover<2->{\node[rectangle,draw,below right of=p] (q2) {q2};};
  \draw<2->[->] (p) -- (q2);
\end{tikzpicture}
\end{frame}
\end{document}

Primeiro slide mostrando código LaTeX sem escape

Responder1

Como <e >são problemáticos com minted, você pode definir o \myonlycomando:

\newcommand\myonly[2]{\only<#1>{#2}}

MWE:

\documentclass{beamer}
\usepackage{minted,tikz}
\newcommand\myonly[2]{\only<#1>{#2}}
\begin{document}
\begin{frame}[fragile]{Pointers}
\begin{minted}[linenos,escapeinside=||]{c}
  int main(void) {
    char *p;
    p=(char *)malloc(5); |\myonly{1}{$\Leftarrow$}|
    /* do stuff */
    p=(char *)malloc(7); |\myonly{2}{$\Leftarrow$}|
    free(p);
    return 0;
}
\end{minted}
\begin{tikzpicture}
  \node<1->[rectangle,draw] (p) {p};
  \node<1->[rectangle,draw,right of=p] (q1) {q1};
  \draw<1>[->] (p) -- (q1);
  \uncover<2->{\node[rectangle,draw,below right of=p] (q2) {q2};};
  \draw<2->[->] (p) -- (q2);
\end{tikzpicture}
\end{frame}
\end{document}

insira a descrição da imagem aqui

Responder2

overprintA melhor solução que tenho até agora é baseada na solução do @VZ.https://tex.stackexchange.com/a/51618/35602). No entanto, seria bom ter uma solução que não exigisse a repetição do código C ...

\documentclass{beamer}
\usepackage{minted}
\usepackage{tikz}
\begin{document}
\begin{frame}[fragile]{Foo}
\begin{overprint}
\onslide<1>
\begin{minted}[linenos,highlightlines={3}]{c}
  int main(void) {
    char *p;
    p=(char *)malloc(5);
    /* do stuff */
    p=(char *)malloc(7);
    free(p);
    return 0;
  }
\end{minted}
\onslide<2>
\begin{minted}[linenos,highlightlines={5}]{c}
  int main(void) {
    char *p;
    p=(char *)malloc(5);
    /* do stuff */
    p=(char *)malloc(7);
    free(p);
    return 0;
  }
\end{minted}
\end{overprint}
\begin{tikzpicture}
  \node<1->[rectangle,draw] (p) {p};
  \node<1->[rectangle,draw,right of=p] (q1) {q1};
  \draw<1>[->] (p) -- (q1);
  \uncover<2->{\node[rectangle,draw,below right of=p] (q2) {q2};};
  \draw<2->[->] (p) -- (q2);
\end{tikzpicture}
\end{frame}
\end{document}

informação relacionada