Is it possible to compile only beamer notes without slides?
For practice I only wanted print the notes but I could not find any way to do so.
beamernotes
Is it possible to compile only beamer notes without slides?
For practice I only wanted print the notes but I could not find any way to do so.
There is an option called \setbeameroption{show only notes}
\documentclass{beamer}
%\setbeameroption{show notes}
\setbeameroption{show only notes}
\begin{document}
\frame{\frametitle{FIRST}
On slide
\note{Whatever}
}
\end{document}
Compile, copy the pdf (another name!), comment out the second setbeameroption
as well and compile again.
Sure you could write a makefile (depending on your OS), but if you donĀ“t need the two files after every run it is much easier (or less to code) this way.
For the writing process i recommend to work with the show notes
option on (remove %
).
Edit
Here comes a one compilation (one click) solution. It makes use of \write18
so pdflatex needs the --shell-escape
option.
\write18{./file.sh }
\documentclass{beamer}
\input{out.out}
\begin{document}
\frame{\frametitle{FIRST}
On slide one.
\note{Whatever you want}
}
\end{document}
While file.sh
is
#! /bin/bash
echo > out.out
pdflatex yourname
cp yourname.pdf nonotes.pdf
echo \\setbeameroption{show only notes} > out.out
this file must be executable with e.g. chmod 777 file.sh
an it must be in the same directory as the yourname.tex. This is of course bash so it will only work on unix-like systems.
Replace yourname
with the actual name of your tex-file.
What does it do? First pdflatex will call file.sh
which executes pdflatex then copies the resulting pdf into nonotes.pdf. Afterwards it fills out.out with the show only notes
option. write18
is finish and the parent pdflatex process will continue. But now that out.out is filled, the parent process will produce a pdf with that option on.
Here's something that works with the example you posted, but might not work with more sophisticated overlay specifications. There are two parts to the method. The first is a little addition to the overlay code which tries to establish whether the current frame was explicitly mentioned, for example the 3
in \uncover<3->
, or not, for example frame 4
in \uncover<4->
. If explicitly mentioned, it sets a flag. The second part to the method is a little addition to pgfpages
, imaginatively called pgfmorepages
(CTAN and github), which - amongst other things - introduces the possibility of skipping a page when shipping out pages. So this looks for the flag set by the first part of the code and if it doesn't find it, it ignores the particular page.
There is a snag. You can't use the transparent
option. That is because this does some look-ahead stuff and asks "Is this going to appear in a frame or two's time?" So it runs the overlay specifications with other frame numbers than the current one and that messes up the testing.
The other annoying bit is that each frame has to start with the command \mentionedsetup
. This could be automated by adding it to one of the templates.
Here's the code with some sample frames.
%\url{http://tex.stackexchange.com/q/56990/86}
% 1. NO NOTES
\documentclass[]{beamer}
%% 2. DUAL-DISPLAY NOTES:
%\documentclass[hyperref={bookmarks=true}]{beamer}
\usepackage{pgfmorepages}
%\setbeameroption{show notes on second screen=left}
\makeatletter
\newif\if@mentioned
\@mentionedtrue
\pgfpagesdeclarelayout{1 on 1 with possible skip}
{
\def\pgfpageoptionborder{0pt}
}
{
\pgfpagesphysicalpageoptions
{%
logical pages=1,%
physical pages=1,%
first logical shipout=1,%
last logical shipout=1,%
current logical shipout=1,%
}
\pgfpagesphysicalpage{1}{
skip code={%
\if@mentioned
\pgfpagesshiptrue
\else
\pgfpagesshipfalse
\fi
}
}
\pgfpageslogicalpageoptions{1}
{%
center=\pgfpoint{.5\pgfphysicalwidth}{.5\pgfphysicalheight},%
}%
}
\pgfpagesuselayout{1 on 1 with possible skip}
\def\slidereferenced{%
\ifbeamer@inframe
\global\@mentionedtrue
\fi
}
\def\mentionedsetup{%
\ifnum\beamer@slideinframe=1
\global\@mentionedtrue
\else
\global\@mentionedfalse
\fi
}
\expandafter\let\csname
beamerx@\string\beamer@inframenote\endcsname\relax
\renewcommand<>{\beamer@inframenote}[2][]{}
\def\beamer@decodeuntil-#1,{%
\ifnum1<\beamer@minimum\global\beamer@minimum=1\fi%
\ifnum#1>\beamer@slideinframe\global\beamer@anotherslidetrue\beamer@localanotherslidetrue\fi%
\ifnum\beamer@slideinframe>#1\else\gdef\beamer@doifnotinframe{\beamer@doifinframe}\fi%
\ifnum\beamer@slideinframe=#1\relax\slidereferenced\fi%
\beamer@@decode}
\def\beamer@decodeto#1,{%
\ifnum#1<\beamer@minimum\global\beamer@minimum=#1\fi%
\ifnum#1>\beamer@slideinframe\global\beamer@anotherslidetrue\beamer@localanotherslidetrue\fi%
\ifnum#1>\beamer@slideinframe\else\gdef\beamer@doifnotinframe{\beamer@doifinframe}\fi%
\ifnum\beamer@slideinframe=#1\relax\slidereferenced\fi%
\beamer@@decode}
\def\beamer@decodebetween#1#2,{%
\ifnum#1<\beamer@minimum\global\beamer@minimum=#1\fi%
\ifnum#1>\beamer@slideinframe\global\beamer@anotherslidetrue\beamer@localanotherslidetrue\fi%
\ifnum#2>\beamer@slideinframe\global\beamer@anotherslidetrue\beamer@localanotherslidetrue\fi%
\ifnum#1>\beamer@slideinframe\else\ifnum#2<\beamer@slideinframe\else\gdef\beamer@doifnotinframe{\beamer@doifinframe}\fi\fi%
\ifnum\beamer@slideinframe=#1\relax\slidereferenced\fi%
\ifnum\beamer@slideinframe=#2\relax\slidereferenced\fi%
\beamer@@decode}
\def\beamer@decodeone#1,{%
\ifnum#1<\beamer@minimum\global\beamer@minimum=#1\fi%
\ifnum#1>\beamer@slideinframe\global\beamer@anotherslidetrue\beamer@localanotherslidetrue\fi%
\ifnum#1=\beamer@slideinframe\gdef\beamer@doifnotinframe{\beamer@doifinframe}\fi%
\ifnum\beamer@slideinframe=#1\relax\slidereferenced\fi%
\beamer@@decode}
\makeatother
\usepackage[english]{babel}
\mode<presentation>{
\usetheme{Warsaw}
% \setbeamercovered{transparent}
}
\begin{document}
\begin{frame}{Testing}
\mentionedsetup
\uncover<1->{hello}
\uncover<3->{world}
\uncover<5->{greetings}
\uncover<7->{earthlings}
\end{frame}
\begin{frame}{Introduction}{}
\mentionedsetup
\begin{itemize}
\item hello world
\uncover<1->{\item Here is my first point}
\uncover<2->{\item Here is my second point}
\uncover<4->{\item With notes on, I would expect it to take two
clicks to get here from the last point, since there are two notes. But
with them off, I would expect it to take one click.}
\uncover<5->{\item This is my third point. I have four notes about
this point, so with notes on, it should take three more clicks to get
to the next slide. With them off, however, it should take one. }
\end{itemize}
\note[item]<1->{Here is a note about my first point}
\note[item]<2->{Here is a note about my second point}
\note[item]<3->{Here is \textbf{another} note about my second point}
\note[item]<4->{Here is a note about my third point}
\note[item]<5->{Here is the second of several more notes about my
third point}
\note[item]<6->{Another one}
\note[item]<7->{And another}
\end{frame}
\begin{frame}{Another slide}{}
\begin{itemize}
\uncover<1->{\item Not much to say here}
\end{itemize}
\end{frame}
\end{document}
Oh, and we have to redefine the \note
command. Even when the notes aren't shown, the command is processed. So we have to redefine it to be a NO-OP to ensure that the resulting overlays aren't read.
Here's the first few frames of the above, showing that frames 2,4,6 get skipped.
Best Answer
You can use