Pagina 1 di 1

[Risolto][LaTeX] usare verb e overlayarea in beamer

Inviato: venerdì 9 maggio 2014, 19:36
da 1001001
Ciao a tutti!

Nonostante le mie ricerche, non sono riuscito a venire a capo di questa cosa quindi chiedo il vostro aiuto.
Io vorrei fare una cosa tipo:

Codice: Seleziona tutto

\documentclass[]{beamer}

\usetheme{Frankfurt}

\usepackage[italian]{babel}

\begin{document}

\begin{frame}[fragile]
    \frametitle{Foobar}
    \begin{overlayarea}{\textwidth}{\textheight}[fragile]
        \only<1>
        {
            Foo
        }
        \only<2>
        {
            \verb:bar:
        }
    \end{overlayarea}
\end{frame}

\end{document}
questo però non compila, perché non gli piace avere un verbatim dentro l'overlay area. L'errore che mi dà è:

Codice: Seleziona tutto

! LaTeX Error: \verb ended by end of line.
Quindi vi chiedo: esiste un modo per mettere un verbatim dentro un overlayarea? Se sì, qual è?

Nei miei piani questo è finalizzato all'utilizzo di minted e non verb, ma il problema è lo stesso, se non ho capito male, quindi credo che anche l'eventuale soluzione sia replicabile

Grazie mille fin d'ora!

Re: [LaTeX] usare verb e overlayarea in beamer

Inviato: sabato 10 maggio 2014, 12:23
da antex
1001001 ha scritto:Nei miei piani questo è finalizzato all'utilizzo di minted e non verb, ma il problema è lo stesso, se non ho capito male, quindi credo che anche l'eventuale soluzione sia replicabile
Non è detto che sia lo stesso. :)

Che comando usi per inserire codice inline con minted? \mintinline è supportato solo dalla 2.0 (credo), che non è (stata) distribuita nemmeno con TeX Live 2013.

Il comando \verb non va e non c'è modo di farlo andare, puoi solo usare dei workaround, ma che sono piuttosto noiosi soprattutto se devi inserire piccoli spezzoni di codice inline.

Oltre a minted (sicuramente il più potente, ma che non posso testare dato che ho la 1.7), hai a due alternative:

1. listings:

Codice: Seleziona tutto

\documentclass[]{beamer}

\usetheme{Frankfurt}

\usepackage[italian]{babel}
\usepackage{listings}

\lstset{
  basicstyle=\ttfamily,
  % ...
}


\begin{document}

\begin{frame}
    \frametitle{Foobar}
    \begin{overlayarea}{\textwidth}{\textheight}
        \only<1>
        {
            Foo
        }
        \only<2>
        {
            \lstinline:bar:
        }
    \end{overlayarea}
\end{frame}

\end{document}
2. fancyvrb:

Codice: Seleziona tutto

\documentclass[]{beamer}

\usetheme{Frankfurt}

\usepackage[italian]{babel}
\usepackage{fancyvrb}


\begin{document}

\begin{frame}
    \frametitle{Foobar}
    \begin{overlayarea}{\textwidth}{\textheight}
        \only<1>
        {
            Foo
        }
        \only<2>
        {
            \Verb:bar:
        }
    \end{overlayarea}
\end{frame}

\end{document}
Nota che overlayarea non prende alcun argomento opzionale. ;)

Re: [LaTeX] usare verb e overlayarea in beamer

Inviato: sabato 10 maggio 2014, 14:10
da 1001001
Prima di tutto, grazie per la risposta! :)

Chiedo scusa se mi sono espresso in maniera poco chiara prima :) in realtà a me servirebbe inserire codici "interi" non inline, ho usato verb solo perché mi era sembrato di capire che il problema fosse il fatto che minted usa verb e non volevo rendere l'esempio che ho postato troppo pesante..ma forse ho capito male io :)
L'ambiente che uso comunque è

Codice: Seleziona tutto

\begin{cppcode}
      codice
\end{cppcode*}
, definito nel preambolo con il comando

Codice: Seleziona tutto

\newminted{cpp}{linenos=false, bgcolor=whitesmoke, gobble=8, fontsize=\scriptsize}
Ho provato anche con listings, usando l'ambiente lstlistings:

Codice: Seleziona tutto

\documentclass[]{beamer}

\usetheme{Frankfurt}

\usepackage[italian]{babel}
\usepackage{listings}

\lstset{
  basicstyle=\ttfamily,
  % ...
}


\begin{document}

\begin{frame}
    \frametitle{Foobar}
    \begin{overlayarea}{\textwidth}{\textheight}
        \only<1>
        {
            Foo
        }
        \only<2>
        {
            \begin{lstlisting}
                bar
            \end{lstlisting}
        }
    \end{overlayarea}
\end{frame}

\end{document}
ma neanche questo funziona:

Codice: Seleziona tutto

[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]

Package Listings Warning: Text dropped after begin of listing on input line 30.


)
*
PS:
antex ha scritto: Nota che overlayarea non prende alcun argomento opzionale. ;)
Hai ragione, l'avevo messo in un momento di disperazione e mi sono dimenticato di toglierlo :)

Re: [LaTeX] usare verb e overlayarea in beamer

Inviato: sabato 10 maggio 2014, 16:41
da antex
Purtroppo la soluzione non è naturalissima. Quel che si può fare è produrre la “scatola” che conterrà il codice (“scatola” in senso tipografico/LaTeX) prima di entrare nell'overlay, usando le macro \newbox, \setbox, \usebox (o simili), o ancora meglio usando il comando \defverbatim offerto da beamer e pensato apposta per casi come questo.

Codice: Seleziona tutto

\documentclass[]{beamer}

\usetheme{Frankfurt}

\usepackage[italian]{babel}

\ifcase 0
\usepackage{minted}
\newminted{cpp}{linenos=false, bgcolor=white, gobble=8, fontsize=\scriptsize}
\else
\usepackage{listings}
\lstnewenvironment{cppcode}{%
  \lstset{basicstyle=\ttfamily\scriptsize, backgroundcolor=\color{white}, gobble=8}%
}{}
\fi

\begin{document}

\begin{frame}[fragile]\frametitle{Foobar}
\defverbatim[colored]{\lstbar}{%
  \begin{cppcode}
        bar
  \end{cppcode}
}

\begin{overlayarea}{\textwidth}{\textheight}
  \only<1>
  {
    Foo
  }
  \only<2>
  {
    \lstbar
  }
\end{overlayarea}
\end{frame}

\end{document}
Se sostituisci \ifcase 0 con \ifcase 1, vedi il risultato con listings.

:ciao:

Re: [LaTeX] usare verb e overlayarea in beamer

Inviato: sabato 10 maggio 2014, 17:20
da 1001001
Wow! Questa soluzione mi è piaciuta moltissimo, non mi sarebbe mai venuta in mente! :)

Ti ringrazio infinitamente! :)

Ciao! :ciao: