Ich habe C-Zeigercode, den ich gerne „einzeln“ ausführen würde, um zu zeigen, was beispielsweise mit hängenden Zeigern passiert. Ich verwende ihn minted
zur Syntaxhervorhebung, und das scheint das Problem zu verursachen.
Der folgende Code wird (mit -shell-escape
) kompiliert, der Code, der maskiert werden sollte, jedoch nicht. Der Grund dafür scheint ein Fehler in zu sein pygments
(siehehttps://github.com/gpoore/minted/issues/70). Ich habe auch versucht, die Lösung marvin2k
neu zu definieren !
, aber es ist mir nicht gelungen, den Code zum Laufen zu bringen. Ich habe auch verschiedene Kombinationen von \begin{minted}[highlightlines=\only<1>{3}\only<2>{5}]{c}
ohne Erfolg ausprobiert.
Hat jemand eine Lösung? Bearbeiten: Meine Plattform ist Ubuntu 14.04, Pygmentize 1.6, Minted 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}
Antwort1
Da <
und >
mit problematisch sind minted
, können Sie den \myonly
Befehl definieren:
\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}
Antwort2
overprint
Die beste Lösung, die ich bisher habe, basiert auf der Lösung von @VZ. (https://tex.stackexchange.com/a/51618/35602). Es wäre jedoch schön, eine Lösung zu haben, bei der der C-Code nicht wiederholt werden müsste …
\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}