Beamer: Logo rechts in Frametitle-Leiste einfügen

Layout von Seiten, Rändern, Fusszeilen, usw, modifizieren


sonnenhaus
Forum-Newbie
Forum-Newbie
Beiträge: 8
Registriert: Mo 11. Jul 2011, 15:23

Beamer: Logo rechts in Frametitle-Leiste einfügen

Beitrag von sonnenhaus »

Hallo,

ich möchte gerne auf jeder Seite meiner Beamer-Präsentation rechts oben an fixer Stelle ein bestimmtes Logo/Bild einfügen.

Dazu habe ich ein eigenes Frametitle-Element bestimmt (siehe Beisp. unten). Einmal habe ich eines aus den Standard-Outer themes abgewandelt. -- Das enthält aber zu viel TeX, und ich weiß nicht, wie ich das Logo an eine gleichbleibenden fixen Stelle rechts oben setzen kann.

-- Die andere Variante (im Beispiel auskommentiert) habe ich selbst mit einer column-Umgebung gebastelt. Die funktioniert aber nicht, und das Ergebnis ist völlig unintuitiv, weil z. B.der Frametitle plötzlich links von der Seite beginnt.

Kennt sich jemand bei einer der beiden Varianten aus und kann hier weiterhelfen?

Vielen Dank!

\documentclass{beamer}
\usetheme[height=1.2cm]{Rochester}

%%%%%%%%%%%%%%%%%
% Beginn eigener Frametitle
%%%%%%%%%%%%%%%%%
%
 \makeatletter
  \setbeamertemplate{frametitle}
  {%
    \begin{beamercolorbox}[wd=\paperwidth,ht=\beamer@headheight]{frametitle}
 \begin{columns}[t]
      \begin{column}{.025\paperwidth}
      \end{column}

      \begin{column}{.85\paperwidth}
        \usebeamercolor[fg]{frametitle}\usebeamerfont{frametitle}    
        \insertframetitle
         \end{column}

        \begin{column}{.1\paperwidth}
        \begin{center}
         \includegraphics[height=1cm]{Logo} \\
        \end{center}
      \end{column}

      \begin{column}{.025\paperwidth}
      \end{column}
    \end{columns}
    \end{beamercolorbox}
  }
\makeatother

%\makeatletter
%  \setbeamertemplate{frametitle}
%  {%
%    \nointerlineskip%
%    \vskip-\beamer@headheight%
%    \vbox to \beamer@headheight{%
%      \vfil
%      \leftskip=-\beamer@leftmargin%
%      \advance\leftskip by0.3cm%
%      \rightskip=-\beamer@rightmargin%
%      \advance\rightskip by0.3cm plus1fil%
%      {\usebeamercolor[fg]{frametitle}\usebeamerfont{frametitle}\insertframetitle%\par
%		}%
%   \includegraphics[width=.1\linewidth]{Logo}  
%      \vbox{}%
%      \vskip-1em%
%      \vfil
%    }%
%  }
%\makeatother

%%%%%%%%%%%%%%%%%
% Ende eigener Frametitle
%%%%%%%%%%%%%%%%%
       

\begin{document}
\begin{frame}{eins}
Frame 1
\end{frame}
\begin{frame}{zwei}
Frame 2
\end{frame}
\end{document}

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

Hallo ich habe das mal so gelöst: Hier wird das Logo ganz rechts gesetzt. Das kannst du mit ein paar abständen einstellen:
\setbeamertemplate{frametitle}
{%
\vspace{-0.165ex}

\begin{beamercolorbox}[wd=\paperwidth,dp=1ex, ht=4.5ex, sep=0.5ex, colsep*=0pt]{frametitle}%
    \usebeamerfont{frametitle}   \strut \insertframetitle  \hfill \raisebox{-2ex}[0pt][-\ht\strutbox ]{ \includegraphics{whatever}} 
    \end{beamercolorbox}%
 }%
Alternativ kannst du das auch mit tikz lösen. Das habe ich momentan in meinem draft für die nächste Version meines Themes so angedacht.
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


sonnenhaus
Forum-Newbie
Forum-Newbie
Beiträge: 8
Registriert: Mo 11. Jul 2011, 15:23

Beitrag von sonnenhaus »

Ja, super, das funktioniert.

Ich habe jetzt bei mir folgendes eingefügt:
\makeatletter
\setbeamertemplate{frametitle}
{%
\vspace{-\beamer@headheight}
%
\begin{beamercolorbox}[wd=\paperwidth,dp=1ex, ht=4.5ex, sep=0.5ex, colsep*=0pt]{frametitle}%
    \usebeamerfont{frametitle}   \strut \insertframetitle  \hfill \raisebox{-1.5ex}[0pt][-\ht\strutbox ]{ \includegraphics[height=4ex]{Logo}}\hphantom{XXX}
    \end{beamercolorbox}%
 }%
\makeatother
Seltsam finde ich bei allen Vorschlägen dennoch, dass man mit einer neuen Box die Headline überdeckt.

Nur zur Rückfrage:
-- Ist die Lösung mit einem tikz-Paket eleganter?

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

sonnenhaus hat geschrieben: Seltsam finde ich bei allen Vorschlägen dennoch, dass man mit einer neuen Box die Headline überdeckt.
Was meinst du damit?
Die Lösung via Tikz ist nicht eleganter aber vll flexibler... Ich muss das aber noch ausgiebig testen.
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


sonnenhaus
Forum-Newbie
Forum-Newbie
Beiträge: 8
Registriert: Mo 11. Jul 2011, 15:23

Beitrag von sonnenhaus »

Was ich damit meine?
Also, in den Einstellungen, die ich verwende (outertheme sidebar), wird doch eine Box für die Headline erstellt, die dann im einen Fall mit
\vskip-\beamer@headheight und \beamercolorbox und mit
\vspace{-\beamer@headheight} und \vbox im anderen Fall
überlagert wird durch eine zweite Box.

Man könnte ja die Headline-Definition aufheben und sich das Raufschieben der neuen Box ersparen. Ich werde aber deswegen nichts mehr ändern.


Was mich aber eher interessieren würde, wie man bei einem Untertitel verfahren würde. In der Sidebar-Definition steht ja:
  \defbeamertemplate*{frametitle}{sidebar theme}
  {%
    \nointerlineskip%
    \vskip-\beamer@headheight%
    \vbox to \beamer@headheight{%
      \vfil
      \leftskip=-\beamer@leftmargin%
      \advance\leftskip by0.3cm%
      \rightskip=-\beamer@rightmargin%
      \advance\rightskip by0.3cm plus1fil%
      {\usebeamercolor[fg]{frametitle}\usebeamerfont{frametitle}\insertframetitle\par}%
      {\usebeamercolor[fg]{framesubtitle}\usebeamerfont{framesubtitle}\insertframesubtitle\par}%
      \vbox{}%
      \vskip-1em%
      \vfil
    }%
aber ich wüsste nicht im geringsten, wie man mit den \strut- und \strutbox und \raisebox-Befehlen umgehen würde, um die zusammen mit dem Logo in die Frametitle-Leiste zu bekommen.

Denn Folgender Code gibt von der Proportion her ein unschönes Ergebnis:
\documentclass{beamer}
\usetheme[height=1.2cm]{Rochester}

%%%%%%%%%%%%%%%%%
% Beginn eigener Frametitle
%%%%%%%%%%%%%%%%%

\makeatletter
\setbeamertemplate{frametitle}
{%
\vspace{-\beamer@headheight}
%
\begin{beamercolorbox}[wd=\paperwidth,dp=1ex, ht=4.5ex, sep=0.5ex, colsep*=0pt]{frametitle}%
    \usebeamerfont{frametitle}   \strut \insertframetitle 
\par\usebeamerfont{framesubtitle}\strut\insertframesubtitle
 \hfill \raisebox{-1.5ex}[0pt][-\ht\strutbox ]{ \includegraphics[height=4ex]{Logo}}\hphantom{XXX}
    \end{beamercolorbox}%
 }%
\makeatother
%%%%%%%%%%%%%%%%%
% Ende eigener Frametitle
%%%%%%%%%%%%%%%%%
       

\begin{document}
\begin{frame}{eins}
\framesubtitle{Unterlage1}
Frame 1
\end{frame}
\begin{frame}{zwei}
\framesubtitle{Unterlage2}
\frame
Frame 2
\end{frame}
\end{document}


Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

So was wäre denkbar.
Ich würde dir im Übrigen raten ein eigenes Outertheme zu schreiben und das auszulagern
\documentclass{beamer} 
\usepackage[latin1]{inputenc}
\usetheme[height=1.2cm]{Rochester} 

%%%%%%%%%%%%%%%%% 
% Beginn eigener Frametitle 
%%%%%%%%%%%%%%%%% 

\makeatletter 
\setbeamertemplate{frametitle} 
{% 
\nointerlineskip
% 
      \leftskip=-\beamer@leftmargin% 
      \advance\leftskip by0.5cm% 
      \rightskip=-\beamer@rightmargin% 
      \advance\rightskip by0.5cm plus1fil% 
\leavevmode
\hbox{\begin{beamercolorbox}[wd=.66666\paperwidth,dp=1ex, ht=2cm , sep=0.5ex, colsep*=0pt]{frametitle}% 
 \usebeamerfont{frametitle}  \insertframetitle\\ \insertframesubtitle % ode rmit par
    \end{beamercolorbox}% 
   % \nointerlineskip
\begin{beamercolorbox}[wd=.33333\paperwidth,dp=1ex, ht=2cm ,  sep=0ex, colsep*=0pt]{frametitle}% 
\hfill \rule{2cm}{2cm} \hphantom{X} % Hier kann man mit raisbox etwas spielen. 
    \end{beamercolorbox}}
    \vskip0pt
    % 
 }% 
\makeatother 
%%%%%%%%%%%%%%%%% 
% Ende eigener Frametitle 
%%%%%%%%%%%%%%%%% 
        

\begin{document} 
\begin{frame}{eins} 
\framesubtitle{Unterlage1} 
Problem: Die Höhen der Boxen sind fixiert. \\
 
\end{frame} 
\begin{frame}{zwei} 
\framesubtitle{Unterlage2} 
\frame 
Frame 2 
\end{frame} 
\end{document}
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


sonnenhaus
Forum-Newbie
Forum-Newbie
Beiträge: 8
Registriert: Mo 11. Jul 2011, 15:23

Beitrag von sonnenhaus »

Okay, danke, vielleicht mach ich das einmal.
Für dieses Mal komme ich auch ohne Untertitel aus.

sonnenhaus
Forum-Newbie
Forum-Newbie
Beiträge: 8
Registriert: Mo 11. Jul 2011, 15:23

Beitrag von sonnenhaus »

Hallo, ich melde mich wieder. Meine Rückfrage ist eine Fortsetzung des Obigen und bezieht sich auf die Leiste auf der Titelseite. Dort wird kein Frametitle-Objekt erzeugt, aber das Headline-Objekt steht zur Verfügung.

Ich möchte ein bestimmtes Logo in der Leiste rechts oben stehen haben, und zwar sowohl in den Folien im Inneren des Vortrages als auch auf der Titelseite (und am INhaltsverzeichnis).

Was ich dazu gemacht habe, steht in folgendem Beispiel. Ich generiere ein headline-Objekt, und gestalte es so wie das frametitle-Objekt. Seltsamerweise positioniert sich das Logo (hier ein leeres Quadrat) ganz unterschiedlich, sowohl vertikal als auch horizontal.

Kennt sich jemand mit den entsprechenden Befehlen aus (wohl raisebox, strut, und ähnliche), um die Verschiebung zu eliminieren? Mir kommen sie nach wie vor etwas unhandlich und unintuitiv vor.

Vielen Dank!


\documentclass{beamer}
\author{sonnenhaus}
\usetheme[height=1.2cm]{Rochester}

%%%%%%%%%%%%%%%%%
% Beginn eigener Frametitle
%%%%%%%%%%%%%%%%%
%
\makeatletter
\setbeamertemplate{frametitle}
{%
\vspace{-\beamer@headheight}
%
\begin{beamercolorbox}[wd=\paperwidth,dp=1ex, ht=4.5ex, sep=0.5ex, colsep*=0pt]{frametitle}%
    \usebeamerfont{frametitle}   \strut \insertframetitle  \hfill \raisebox{-1.5ex}[0pt][-\ht\strutbox ]{ \rule{4ex}{4ex}}\hphantom{XXX}
    \end{beamercolorbox}%
 }%
\setbeamertemplate{headline}
  {%
\begin{beamercolorbox}[wd=\paperwidth,dp=1ex, ht=\beamer@headheight, sep=0.5ex, colsep*=0pt]{frametitle}%
    \usebeamerfont{frametitle}   \strut \hfill \raisebox{-1.5ex}[0pt][-\ht\strutbox ]{\rule{4ex}{4ex}}\hphantom{XXX}
    \end{beamercolorbox}%
  }
\makeatother

\begin{document}
\begin{frame}
\titlepage
\end{frame}

\begin{frame}{eins}
Frame 1
\end{frame}
\begin{frame}{zwei}
Frame 2
\end{frame}
\end{document}

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

Hallo ich würde das so nicht lösen. Du erzeugst auf jeder Seite eine Headline. Das ist suboptimal. ich würde lieber titlepage umdefinieren.
\makeatletter 
\setbeamertemplate{frametitle} 
{% 
\vspace{-\beamer@headheight} 
% 
\begin{beamercolorbox}[wd=\paperwidth,dp=1ex, ht=4.5ex, sep=0.5ex, colsep*=0pt]{frametitle}% 
     \usebeamerfont{frametitle}   \strut \insertframetitle  \hfill \raisebox{-1.5ex}[0pt][-\ht\strutbox ]{ \rule{4ex}{4ex}}\hphantom{XXX} 
     \end{beamercolorbox}% 
  }% 
\setbeamertemplate{headline} 
   {% 
\begin{beamercolorbox}[wd=\paperwidth,dp=1ex, ht=4.5ex, sep=0.5ex, colsep*=0pt]{frametitle}% 
     \usebeamerfont{frametitle} \hfill   \rule{4ex}{4ex}\hphantom{XXX} 
     \end{beamercolorbox}% 
   } 
\makeatother 
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


sonnenhaus
Forum-Newbie
Forum-Newbie
Beiträge: 8
Registriert: Mo 11. Jul 2011, 15:23

Beitrag von sonnenhaus »

Meinst du das?
Ich zweifle eher am Nutzen der Neudefinition der Titelseite, man würde ja wieder eine beamercolorbox einrichten, die Latex womöglich wieder anders behandelt als jenen Kasten, der im Frametitle steht. Und es wäre ja gerade wünschenswert, dass dies auf allen Seiten, inklusive Titel, dieselben Elemente sind.

Als elegantere Lösung kann man doch eher die Box im Frametitle-Element rauswerfen: dann gibt es auf jeder Folie, inklusive Titel und Inhaltsverzeichnis, die headline, und in ihr sitzt das Logo immer drinnen. Für die inneren Folien wird dort immer der Text vom Frametitle eingefügt, falls vorhanden.
\documentclass{beamer}
\author{sonnenhaus}
\usetheme[height=1.2cm]{Rochester}

%%%%%%%%%%%%%%%%%
% Beginn eigener Frametitle
%%%%%%%%%%%%%%%%%
%

\makeatletter
\setbeamertemplate{frametitle}
{%
\vspace{-0.8\beamer@headheight}
\hspace{-0.9cm}
     \usebeamerfont{frametitle}  \insertframetitle
\vspace{0.5cm} % um zu vermeiden, dass umfangreiche Textseiten in die Headline ragen
  }%
\setbeamertemplate{headline}
   {%
\begin{beamercolorbox}[wd=\paperwidth,dp=1ex, ht=\beamer@headheight, sep=0.5ex, colsep*=0pt]{frametitle}%
     \usebeamerfont{frametitle} \hfill   \rule{4ex}{4ex}\hphantom{XXX}
     \end{beamercolorbox}%
   } 
\makeatother 



\begin{document}
\begin{frame}
\titlepage
\end{frame}

\begin{frame}{eins}
Frame 1
\end{frame}
\begin{frame}{zwei}
Frame 2
\end{frame}

\begin{frame}

Ra-ta-ta: der Text \\ umfangreich \\ Ra-ta-ta: der Text \\ umfangreich \\ Ra-ta-ta: der Text \\ umfangreich \\ Ra-ta-ta: der Text \\ umfangreich \\ Ra-ta-ta: der Text \\ umfangreich \\ Ra-ta-ta: der Text \\ umfangreich \\ Ra-ta-ta: der Text \\ umfangreich \\ Ra-ta-ta: der Text \\ umfangreich \\ Ra-ta-ta: der Text 
\end{frame}
\end{document}

Antworten