beamer: tikz для пользовательской среды, используемой вместо тем

beamer: tikz для пользовательской среды, используемой вместо тем

Я использовал tikzсреду beamerдля использования вместо темы. Проблема в том, что я использую опцию, overlay, remember pictureи она требует запуска latex/lualatexдважды каждый раз. Поскольку элементы, для которых tikzиспользуется, просты, могут быть альтернативы tikz. Если кто-нибудь может предоставить альтернативу tikzздесь ...?

Задавая tmarginвысоту верхней декоративной линейки, можно отрегулировать вертикальное центрирование относительно белой части слайда.

Я пытаюсь добиться эффекта легкой тени на нижнем и правом краях этой верхней линейки... так что, если кто-нибудь может что-то предложить...?

вот код:

\documentclass{beamer}
\mode<presentation>

\newlength{\slw}\setlength{\slw}{160mm}
\newlength{\slh}\setlength{\slh}{90mm}
\newlength{\topH}\setlength{\topH}{11mm}
\geometry{verbose,papersize={\slw,\slh},tmargin=\topH}

\usepackage{tikz,fontsize}
\usetikzlibrary{calc}
\definecolor{entete}{HTML}{80e3ff}
\definecolor{bleufon}{HTML}{000090}

\setbeamercolor{normal text}{fg=bleufon}
\newlength{\rulewid}\setlength{\rulewid}{.6\slw}

\NewDocumentEnvironment{diap}{ m +b }
  {
    \begin{tikzpicture}[overlay, remember picture]
    \fill[preaction={fill=black!20,transform canvas={shift={(2pt,-2pt)}}}]
      [fill=entete]
      (current page.north west)   -- ++(\rulewid,0) [rounded corners=.5\topH]
    -- ++(0,-\topH) [sharp corners] -- ++(-\rulewid,0) 
    -- cycle;

    \node at (current page.north west)
      [shift={($ (.3,-.5\topH) + (1pt,-1pt) $)},
       anchor=west,font=\LARGEr,black!30] {#1};
    \node at (current page.north west)
      [shift={(.3,-.5\topH)},anchor=west,font=\LARGEr,bleufon] {#1};
    \end{tikzpicture}
  }
  { #2 } {}
  
\setlength{\parindent}{0pt}
\begin{document}
  \begin{frame}
  \begin{diap}{title}
    content
  \end{diap}
  \end{frame}
\end{document}

решение1

Ваш код не компилируется. Ни то, \enttHни другое не \rulewidthопределены. Пожалуйста, проверьте свой пример кода перед тем, как задавать вопросы!

Что, как говорится:

  • Я бы не стал вручную возиться с геометрическими настройками. Beamer прекрасно умеет менять соотношение сторон слайдов и рассчитывать высоту заголовка.

  • Вместо того, чтобы создавать новую среду внутри ваших фреймов, я бы скорректировал шаблон frametitle.

  • Вам не нужно компилировать дважды каждый раз. Пока вы не удалите вспомогательные файлы, компилируйте дважды в начале, а в дальнейшем будет достаточно компилировать один раз. Также многие другие элементы в latex/beamer изначально требуют двух компиляций, например toc, перекрестные ссылки, общее количество кадров... скорее всего, вам в любом случае понадобится несколько компиляций.

  • Вы можете вообще избежать второй компиляции, если не используете опции remember picture, overlay. Заголовок фрейма в любом случае находится вверху страницы.

  • TikZ предлагает много разных теней. Использование их кажется проще, чем ваше preaction. Чтобы воссоздать ваш эффект, a, drop shadowвероятно, ближе всего.

  • Я бы не стал использовать этот fontsizeпакет, если вы не используете масштабируемый шрифт.

\documentclass[aspectratio=169]{beamer}

\newlength{\topH}\setlength{\topH}{11mm}

\usepackage{tikz}
\usetikzlibrary{calc}
\definecolor{entete}{HTML}{80e3ff}
\definecolor{bleufon}{HTML}{000090}

\setbeamercolor{normal text}{fg=bleufon}
\newlength{\rulewidth}\setlength{\rulewidth}{.6\paperwidth}
\usetikzlibrary{shadows}

\makeatletter
\setbeamertemplate{frametitle}{
  \nointerlineskip%
  \@tempdima=\textwidth%
  \advance\@tempdima by\beamer@leftmargin%
  \advance\@tempdima by\beamer@rightmargin%
  \vskip-1mm%
  \hskip-\beamer@leftmargin%
  \hskip-1mm%
  \begin{tikzpicture}
    \fill[drop shadow,fill=entete] (0,0)   -- ++(\rulewidth,0) [rounded corners=.5\topH] -- ++(0,-\topH) [sharp corners] -- ++(-\rulewidth,0) -- cycle;
    \node at (0,0) [shift={($ (.3,-.5\topH) + (1pt,-1pt) $)}, anchor=west,font=\LARGE,black!30] {\insertframetitle};
    \node at (0,0)     [shift={(.3,-.5\topH)},anchor=west,font=\LARGE,bleufon] {\insertframetitle};
  \end{tikzpicture}
}
\makeatother

\makeatletter
\define@key{beamerframe}{c}[true]{% centered
  \beamer@frametopskip=0pt plus 1fill\relax%
  \beamer@framebottomskip=0pt plus 1fill\relax%
  \beamer@frametopskipautobreak=0pt plus .4\paperheight\relax%
  \beamer@framebottomskipautobreak=0pt plus .6\paperheight\relax%
}
\makeatother

\begin{document}
  \begin{frame}
  \frametitle{title}
    content content content content content content content content
  \end{frame}
  
  \begin{frame}
    content content content content content content content content
  \end{frame}  
\end{document}

введите описание изображения здесь введите описание изображения здесь

Связанный контент