
Estou escrevendo um livro baseado em notas de aula que escrevi usando o beamer. Nestas notas tenho figuras desenhadas em TikZ que gostaria de transferir para o livro. No entanto, alguns deles usam \only para mostrar diferentes subfiguras. Isso não funciona na classe de memórias. Existe uma maneira de emulá-lo, digamos, um ambiente no qual eu especifico o slide específico que desejo \begin{selectslide}{2} ... \end{selectslide}
? Minha alternativa é extrair manualmente o slide correto, o que é tedioso e sujeito a erros.
Responder1
Se você quiser apenas emulate \only
, especialmente no contexto do TikZ, poderíamos escrever um pequeno analisador para fazer isso.
\documentclass[12pt]{article}
\usepackage{tikz}
\makeatletter
\newcounter{only@begin}%
\newcounter{only@end}%
\def\@only@hyphen{-}%
\def\only<#1>#2{%
\bgroup
\def\only@test{#1}%
\ifx\only@test\@only@hyphen
\c@only@begin=-100\relax
\c@only@end=100\relax
\else
\parseonlybegin\only@relax#1-\endparseonly
\parseonlyend\only@relax#1-\endparseonly
\fi
\advance\c@only@begin by -1\relax
\advance\c@only@end by 1\relax
\ifnum\c@only@begin<\slide\relax
\ifnum\c@only@end>\slide\relax
#2\relax
\fi
\fi
\egroup
}
\def\@only@relax{\only@relax}%
\def\only@striponetoken#1{}%
\def\only@gobblehyphen#1-{#1}
\def\parseonlybegin#1-#2\endparseonly{%
\def\only@test{#1}%
\ifx\only@test\@only@relax
\setcounter{only@begin}{-100}%
\else
\expandafter\c@only@begin\only@striponetoken#1\relax%
\fi
}
\def\parseonlyend#1-#2\endparseonly{%
\def\only@test{#2}%
\ifx\only@test\@empty
% No hyphen in original.
\c@only@end=\c@only@begin%
\else
\ifx\only@test\@only@hyphen
% \only<a->
\setcounter{only@end}{100}%
\else
% \only<a-b> or \only<-b>; #2 contains 'b-'
\expandafter\c@only@end\only@gobblehyphen#2\relax%
\fi
\fi
}
\makeatother
\begin{document}
\def\mypic#1{%
\def\slide{#1}%
\begin{tikzpicture}[every node/.style={anchor=base,circle, draw}]
\draw (0,0) rectangle (6,2);
\node at (1,1) {a};
\only<2->{ \node at (2,1) {b}; }
\only<2-3>{ \node at (3,1) {c}; }
\only<3>{ \node at (4,1) {d}; }
\only<-4>{ \node at (5,1) {e}; }
\end{tikzpicture}%
\par
}
\mypic{1}%
\mypic{2}%
\mypic{3}%
\mypic{4}%
\mypic{5}%
\end{document}
Não pretendo ter um bom estilo de codificação TeX, mas isso compila para
Responder2
Infelizmente, não sei como fazer isso com as especificações de sobreposição do beamer. MasEstilos TikZsão muito poderosos e podem ser usados para emular um comportamento semelhante, embora eu não conheça uma maneira de cortar o código padrão.
Aqui está um exemplo documentado. Deixe-me saber se você tem perguntas.
\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikzset{
% Define the 'none'-style, which hopefully ensures that nothing is being drawn visibly.
none/.style = {
draw = none,
fill = none,
text opacity = 0
},
% --------------------------
% Boilerplate code to roughly emulate beamer overlay behaviour.
% Use the 'onlyslide'-style in all nodes, paths etc. that you want to appear only on one specific slide.
% You can't use more than one onlyslide on one node or path.
onlyslide1/.style = {none},
slide1/.style = { onlyslide1/.style = {} },
% Copy the code for every slide
onlyslide2/.style = {none},
onlyslide3/.style = {none},
% This is what you could do if you wanted something to appear on more than one slides, but not on all
onlyslides23/.style = {none},
slide2/.style = {
onlyslide2/.style = {},
onlyslide23/.style = {}
},
slide3/.style = {
onlyslide3/.style = {},
onlyslide23/.style = {}
},
% --------------------------
% This is the actual image you want to draw. I'm drawing it as a pic for convenience.
% You would need TikZ 3.0 for that to work. But you can use the styles above also in a normal tikzpicture.
yourimage/.pic = {
\node[draw,onlyslide1] {Only visible on slide 1};
\node[draw,onlyslide2] at (2,0) {Only visible on slide 2};
\node[draw] at (6,0) {Always visible};
}
}
% --------------------------
% Finally, let's use all that in your actual document:
This is how it looks on the first slide:
\begin{tikzpicture}[slide1]
\pic {yourimage};
\end{tikzpicture}
This is how it looks on the second slide:
\begin{tikzpicture}[slide2]
\pic {yourimage};
\end{tikzpicture}
\end{document}
O resultado deve ficar assim: