+THEME ?= PgPro2025
+
+THEMES = PgPro2025 PgPro2023
+
+TOP_DIR = $(shell pwd)
+THEME_DIR = $(TOP_DIR)/themes.nonfree/$(THEME)
+FONTS_DIR = $(THEME_DIR)/fonts
+
all:
- xelatex vim-for-postgres-developers.tex && make clean
+ "$(TOP_DIR)/bin/gen_font_config.pl" "$(FONTS_DIR)"
+ ln -sf "$(THEME_DIR)/theme_setup.tex" theme_setup.tex
+ FONTCONFIG_FILE="$(FONTS_DIR)/fonts.conf" fc-cache
+
+ # Надо в два прохода
+ FONTCONFIG_FILE="$(FONTS_DIR)/fonts.conf" xelatex -shell-escape vim-for-postgres-developers.tex
+ FONTCONFIG_FILE="$(FONTS_DIR)/fonts.conf" xelatex -shell-escape vim-for-postgres-developers.tex
+ make clean
clean:
rm -f *.log *.aux *.out *.snm *.nav *.toc *.vrb
+ rm -f "$(TOP_DIR)/theme_setup.tex"
+ rm -rf "$(TOP_DIR)/_minted"
+ $(foreach theme,$(THEMES), rm -f "$(TOP_DIR)/themes.nonfree/$(theme)/fonts/fonts.conf";)
+ $(foreach theme,$(THEMES), rm -rf "$(TOP_DIR)/themes.nonfree/$(theme)/fonts-cache";)
+
+++ /dev/null
-# Шаблон презентаций для Beamer
-
-При подготовке шаблона использованы:
-* [Шаблон презентации PostgresPro для Openoffice](link hidden)
-* Шрифт [Gilroy](https://oc.postgrespro.ru/index.php/s/oXFIYT9dLwLCle6)
-* Тема [gcr2019](https://github.com/schors/gcr2019theme) для Beamer
-
-Для сборки запустите команду: `xelatex example.tex`
--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+
+my $font_path = $ARGV[0];
+
+die "Please specify path to font dir as a first arg\n" unless $font_path;
+
+my $data = <<ENDOFDATA;
+
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <dir>$font_path</dir>
+ <cachedir>$font_path-cache</cachedir>
+</fontconfig>
+
+ENDOFDATA
+
+$data =~ s/^\s+//s; # Remove all spaces at the beginning of the text, to make xml parser happy
+
+open F, ">", "$font_path/fonts.conf" or die "Cannot open $font_path/fonts.conf: $!";
+print F $data;
+close F;
+
-\usepackage{listings}
-
-% for listings
-\definecolor{acmebg}{HTML}{FFFFEF}
-\definecolor{acmeh}{HTML}{EFFFFF}
-\definecolor{acmec}{HTML}{8C8ACE}
-\definecolor{acmel}{HTML}{52AAAD}
-\definecolor{acmel1}{HTML}{EFEF9C}
-\definecolor{acmel2}{HTML}{9CEFEF}
-\lstset{
- columns=flexible,
- keepspaces=true,
- showstringspaces=false,
- showtabs=false,
- tabsize=4,
- frame=single,
- basicstyle=\fontsize{10pt}{12}\bf\ttfamily\color{black},
- backgroundcolor=\color{acmebg},
- commentstyle=\color{black},
- keywordstyle=\color{black},
- stringstyle=\color{red},
- rulecolor=\color{acmel},
- framerule=1pt
-}
-% for listings background
\makeatletter
-\let\old@lstKV@SwitchCases\lstKV@SwitchCases
-\def\lstKV@SwitchCases#1#2#3{}
+
+\usepackage{minted}
+\usepackage{tcolorbox}
+\tcbuselibrary{minted,skins,breakable}
+
+
+\setminted{
+ breaklines=true,
+}
+
+% применяем beamer'овский шрифт при создании блока кода
+\AtBeginEnvironment{minted}{\usebeamerfont{codelisting}}
+
+
+\NewDocumentEnvironment{codeblock}{O{}m}{%
+ \VerbatimEnvironment
+ \begin{tcolorbox}[
+ colback=codeBgColor,
+ colframe=codeBgColor,
+ arc=0.37cm, boxsep=0.63cm,
+ left=0pt, right=0pt, top=0pt, bottom=0pt,
+ boxrule=0pt, frame hidden,
+ ]%
+ \begin{minted}[#1]{#2}%
+}{%
+ \end{minted}%
+ \end{tcolorbox}%
+}
+
+
\makeatother
-\usepackage{lstlinebgrd}
-\makeatletter
-\let\lstKV@SwitchCases\old@lstKV@SwitchCases
-
-\lst@Key{numbers}{none}{%
- \def\lst@PlaceNumber{\lst@linebgrd}%
- \lstKV@SwitchCases{#1}%
- {none:\\%
- left:\def\lst@PlaceNumber{\llap{\normalfont
- \lst@numberstyle{\thelstnumber}\kern\lst@numbersep}\lst@linebgrd}\\%
- right:\def\lst@PlaceNumber{\rlap{\normalfont
- \kern\linewidth \kern\lst@numbersep
- \lst@numberstyle{\thelstnumber}}\lst@linebgrd}%
- }{\PackageError{Listings}{Numbers #1 unknown}\@ehc}}
-\makeatother
\ No newline at end of file
--- /dev/null
+\RequirePackage{fontawesome5} % для эмодзи
+\RequirePackage[normalem]{ulem} % для более модных подчеркиваний
+\RequirePackage{soul} % дает зачеркивание \st
+
+% Это нужно для кода ниже
+\RequirePackage{etoolbox}
+\RequirePackage{keyval}
+
+\apptocmd{\beamer@reseteecodes}{%
+ \global\let\ifbeamer@sectionframe\iffalse%
+ \global\let\ifbeamer@closingframe\iffalse%
+}{}{}
+
+
+% Опция [section] для \begin{frame} — переключает фрейм в оформление
+% слайда-разделителя раздела (тёмный фон, крупный белый заголовок).
+% Механика отделена от дизайна: здесь только взводится флаг и включается
+% plain (убирает хедер/футер). Сам дизайн — в шаблонах frametitle (ветка
+% \ifbeamer@sectionframe) и background, которые проверяют этот флаг.
+%
+% Флаг ставится \global, потому что опция обрабатывается в одной группе
+% (при разборе аргументов \begin{frame}), а проверяется позже, при
+% рендеринге frametitle, уже в другой группе — без \global значение
+% не дожило бы до момента проверки.
+\newif\ifbeamer@sectionframe
+\define@key{beamerframe}{section}[true]{%
+ \global\let\ifbeamer@sectionframe\iftrue%
+ \setkeys{beamerframe}{plain}%
+}
+
+% Опция [closing] для \begin{frame} — закрывающий (финальный) слайд.
+% Антитеза титульному: структурный, вычурный дизайн, значимая информация
+% (например «Спасибо за внимание»). Механика как у [section] — флаг + plain,
+% дизайн в шаблонах frametitle и background по флагу \ifbeamer@closingframe.
+\newif\ifbeamer@closingframe
+\define@key{beamerframe}{closing}[true]{%
+ \global\let\ifbeamer@closingframe\iftrue%
+ \setkeys{beamerframe}{plain}%
+}
+
+% Переопределяем дефолтный beamer'овский \section на использование нашего section слайда
+\let\beamer@origsection\section
+\renewcommand{\section}[1]{\begin{frame}[section]{#1}\null\end{frame}}
+
+
+++ /dev/null
-\mode<presentation>
-
-% Settings
-\AtBeginDocument{\setromanfont{Times New Roman}}
-\AtBeginDocument{\setsansfont{Gilroy}}
-\AtBeginDocument{\setmonofont{Consolas}}
-\setbeamercolor*{title page header}{fg=white}
-\setbeamerfont*{title}{size*={32pt}{1},family=\sffamily}
-\setbeamercolor*{author}{fg=white}
-\setbeamerfont*{author}{size*={18pt}{1},family=\sffamily}
-\setbeamercolor*{frametitle}{fg=cyan}
-\setbeamerfont*{frametitle}{size*={22pt}{1},family=\sffamily,series=\bfseries}
-%\definecolor{text}{HTML}{595959}
-\definecolor{text}{HTML}{000000}
-\setbeamercolor{normal text}{fg=text}
-\setbeamerfont{normal text}{size*={12pt}{18},family=\sffamily}
-\AtBeginDocument{\usebeamerfont{normal text}}
-\setbeamertemplate{itemize items}{\textbullet}% отключает кошмарные синие треугольники
-\setbeamercolor{itemize/enumerate body}{fg=text}
-\mode
-<all>
+++ /dev/null
-\mode<presentation>
-
-\setbeamertemplate{background}{
- \begin{tikzpicture}
- \ifnum\thepage=1\relax%
- \node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg.png}};
- \fi
- \ifnum\thepage>1\relax%
- \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_page_bg.png}};
- \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{text}\tiny\insertframenumber};
- \fi
- \end{tikzpicture}
-}
-
-% Title page
-\defbeamertemplate*{title page}{gcr2019}[1][]
-{
- \vskip3cm%
- \begin{beamercolorbox}[leftskip=0.7cm,left,#1]{title page header}
- \usebeamerfont{title}\inserttitle\par%
- \end{beamercolorbox}%
- \vskip0.75cm%
- \begin{beamercolorbox}[leftskip=0.7cm,left,#1]{author}
- \usebeamerfont{author}\insertauthor%
- \end{beamercolorbox}
- \vspace{9cm}
-}
-
-\mode
-<all>
+++ /dev/null
-\mode<presentation>
-
-% Frame title
-\defbeamertemplate*{frametitle}{gcr2019}[1][]
-{
- \vskip1cm
- \begin{beamercolorbox}[wd=\paperwidth,leftskip=0.7cm]{frametitle}
- \usebeamerfont{frametitle}%
- \insertframetitle
- \end{beamercolorbox}
-}
-
-\mode<all>
\ No newline at end of file
+++ /dev/null
-% Based on gcr2019 theme (https://github.com/schors/gcr2019theme)
-% Used backghround pictures from template https://confluence.postgrespro.ru/download/attachments/169509420/_PostgresPro_ШАБЛОН.odp?version=1&modificationDate=1675418955114&api=v2
-% and Gilroy font from https://oc.postgrespro.ru/index.php/s/oXFIYT9dLwLCle6
-\mode<presentation>
-
-% Requirement
-\RequirePackage{tikz}
-
-% Settings
-\useinnertheme{PgPro}
-\useoutertheme{PgPro}
-\usecolortheme{PgPro}
-
-\setbeamertemplate{navigation symbols}{}
-\setbeamertemplate{blocks}[rounded][shadow=true]
-\setbeamertemplate{footline}{\vspace{1cm}}
-\setbeamersize{text margin left=0.7cm,text margin right=0.7cm}
-
-\mode<all>
--- /dev/null
+Файлы находящиеся в этой директории НЕ распростроняются под свободной лицензией
+Пожалуйста не испольуйте их, если вы не имеете на это права.
--- /dev/null
+\mode<presentation>
+
+% Settings
+\AtBeginDocument{\setromanfont{Times New Roman}}
+\AtBeginDocument{\setsansfont{Montserrat}}
+\AtBeginDocument{\setmonofont{Consolas}}
+\setbeamercolor*{title page header}{fg=white}
+\setbeamerfont*{title}{size*={48pt}{46pt},family=\sffamily,series=\bfseries}
+\setbeamercolor*{author}{fg=white}
+\setbeamerfont*{author}{size*={18pt}{18pt},family=\sffamily}
+
+\setbeamercolor*{institute}{fg=white}
+\setbeamerfont*{institute}{size*={10pt}{8pt},family=\sffamily}
+
+\setbeamercolor*{section title}{fg=white}
+\setbeamerfont*{section title}{size*={40pt}{48pt},family=\sffamily,series=\bfseries}
+
+\definecolor{closingTitleColor}{HTML}{1190D0}
+\setbeamercolor*{closing title}{fg=closingTitleColor}
+\setbeamerfont*{closing title}{size*={41pt}{44pt},family=\sffamily,series=\bfseries}
+
+
+\definecolor{frameTitleColor}{HTML}{1190D0}
+\setbeamercolor*{frametitle}{fg=frameTitleColor}
+\setbeamerfont*{frametitle}{size*={22pt}{22pt},family=\sffamily,series=\bfseries}
+
+%\definecolor{text}{HTML}{595959}
+\definecolor{text}{HTML}{000000}
+\setbeamercolor{normal text}{fg=text}
+\setbeamerfont{normal text}{size*={12pt}{18},family=\sffamily}
+\AtBeginDocument{\usebeamerfont{normal text}}
+\setbeamertemplate{itemize items}{\textbullet}% отключает кошмарные синие треугольники
+\setbeamercolor{itemize/enumerate body}{fg=text}
+
+% Цвета для гиперссылок
+\definecolor{linkcolor}{HTML}{799B03} % цвет ссылок
+\definecolor{urlcolor}{HTML}{6633FF} % цвет гиперссылок
+\hypersetup{pdfstartview=FitH, linkcolor=linkcolor,urlcolor=urlcolor, colorlinks=true}
+
+
+\setbeamerfont*{codelisting}{size*={10pt}{12}\bf\ttfamily}
+\definecolor{codeTextColor}{HTML}{000000}
+\definecolor{codeBgColor}{HTML}{FFFFEF}
+
+
+\mode
+<all>
--- /dev/null
+\mode<presentation>
+
+\setbeamertemplate{background}{
+ \begin{tikzpicture}
+ \ifbeamer@sectionframe%
+ \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\paperwidth, height=\paperheight]{pgpro_title_bg2.png}};
+ \else
+ \ifbeamer@closingframe%
+ \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\paperwidth, height=\paperheight]{pgpro_closing_bg.png}};
+ \else
+ \ifnum\thepage=1\relax%
+ \node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{pgpro_title_bg.png}};
+ \fi
+ \ifnum\thepage>1\relax%
+ \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{pgpro_page_bg.png}};
+ \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{text}\tiny\insertframenumber};
+ \fi\fi\fi
+ \end{tikzpicture}
+}
+
+% Title page
+\defbeamertemplate*{title page}{gcr2019}[1][]
+{
+ \begin{textblock*}{0.45\paperwidth}(2.39cm, 6.42cm)
+ {\usebeamercolor[fg]{title page header}%
+ \usebeamerfont{title}%
+ \inserttitle\par
+%
+ \vskip14pt%
+ \usebeamerfont{subtitle}%
+ \insertsubtitle\par%
+ }%
+ \end{textblock*}%
+ \begin{textblock*}{0.6\paperwidth}(2.39cm, 11cm)
+ {\usebeamercolor[fg]{author}%
+ \usebeamerfont{author}%
+ \insertauthor%
+
+ \usebeamercolor[fg]{institute}%
+ \usebeamerfont{institute}%
+ \insertinstitute%
+ }
+ \end{textblock*}%
+}
+
+
+% Шаблон для section-слайда
+\defbeamertemplate*{mysectionpage}{}{%
+ \begin{textblock*}{\paperwidth}(\dimexpr\beamer@leftmargin+1.1cm\relax, 0cm)
+ \begin{minipage}[c][\paperheight][c]{\dimexpr\paperwidth-2\beamer@leftmargin\relax}
+ {\usebeamercolor[fg]{section title}%
+ \usebeamerfont{section title}%
+ \vskip2cm
+ \insertframetitle\par}%
+ \end{minipage}%
+ \end{textblock*}%
+}
+
+% Шаблон для closing-слайда
+\defbeamertemplate*{myclosingpage}{}{%
+ \begin{textblock*}{\paperwidth}(3.75cm, 5.94cm)
+ {\usebeamercolor[fg]{closing title}%
+ \usebeamerfont{closing title}%
+ \insertframetitle\par}%
+ \end{textblock*}%
+}
+
+
+\mode
+<all>
--- /dev/null
+\mode<presentation>
+
+% Frame title
+\defbeamertemplate*{frametitle}{gcr2019}[1][]
+{
+ \ifbeamer@sectionframe%
+ \usebeamertemplate{mysectionpage}%
+ \else\ifbeamer@closingframe%
+ \usebeamertemplate{myclosingpage}%
+ \else%
+ \vskip0.97cm
+ \begin{beamercolorbox}[wd=\paperwidth,leftskip=1.44cm]{frametitle}
+ \usebeamerfont{frametitle}%
+ \insertframetitle
+ \vskip0.25cm%
+ \end{beamercolorbox}
+ \fi\fi
+}
+
+\mode<all>
--- /dev/null
+% Based on gcr2019 theme (https://github.com/schors/gcr2019theme)
+% Used backghround pictures from template https://confluence.postgrespro.ru/download/attachments/169509420/_PostgresPro_ШАБЛОН.odp?version=1&modificationDate=1675418955114&api=v2
+% and Gilroy font from https://oc.postgrespro.ru/index.php/s/oXFIYT9dLwLCle6
+\mode<presentation>
+
+% Requirement
+\RequirePackage{tikz}
+\RequirePackage[absolute,overlay]{textpos}
+
+\geometry{paperwidth=33.87cm,paperheight=19.05cm}
+
+% Определяем параметры темы c и t определяющие вертиальную ориентацию текста на слайде. t -- по умолчанию
+\DeclareOptionBeamer{c}{\beamer@centeredtrue}
+\DeclareOptionBeamer{t}{\beamer@centeredfalse}
+\ExecuteOptionsBeamer{t}
+\ProcessOptionsBeamer
+
+% Settings
+\useinnertheme{PgPro2023}
+\useoutertheme{PgPro2023}
+\usecolortheme{PgPro2023}
+
+\setbeamertemplate{navigation symbols}{}
+\setbeamertemplate{blocks}[rounded][shadow=true]
+\setbeamertemplate{footline}{\vspace{1cm}}
+\setbeamersize{text margin left=1.44cm,text margin right=1.44cm}
+
+\mode<all>
--- /dev/null
+\makeatletter
+\def\input@path{{./themes.nonfree/PgPro2023}}
+\graphicspath{{./themes.nonfree/PgPro2023/bgpics}}
+\makeatother
+\usetheme{PgPro2023}
+
--- /dev/null
+\mode<presentation>
+
+% Settings
+\AtBeginDocument{\setromanfont{Times New Roman}}
+\AtBeginDocument{\setsansfont{Roboto}}
+\AtBeginDocument{\setmonofont{RobotoMono-Regular}}
+\setbeamercolor*{title page header}{fg=white}
+\setbeamerfont*{title}{size*={40pt}{40pt},family={\fontspec{Roboto-Medium}}}
+\setbeamercolor*{subtitle}{fg=subTitleColor}
+\definecolor{subTitleColor}{HTML}{889BEF}
+\setbeamerfont*{subtitle}{size*={20pt}{24pt},family=\sffamily}
+\setbeamercolor*{author}{fg=white}
+\setbeamerfont*{author}{size*={14pt}{1},family=\sffamily}
+
+\setbeamercolor*{institute}{fg=subTitleColor}
+\setbeamerfont*{institute}{size*={10pt}{12pt},family=\sffamily}
+
+\setbeamercolor*{section title}{fg=white}
+\setbeamerfont*{section title}{size*={40pt}{48pt},family={\fontspec{Roboto-Medium}}}
+
+\setbeamercolor*{closing title}{fg=white}
+\setbeamerfont*{closing title}{size*={40pt}{48pt},family={\fontspec{Roboto-Medium}}}
+
+\definecolor{frameTitleColor}{HTML}{142D99}
+\setbeamercolor*{frametitle}{fg=frameTitleColor}
+\setbeamerfont*{frametitle}{size*={28pt}{28pt},family={\fontspec{Roboto-Medium}}}
+
+
+\definecolor{text}{HTML}{142D99}
+\setbeamercolor{normal text}{fg=text}
+\setbeamerfont{normal text}{size*={14pt}{16},family=\sffamily}
+\AtBeginDocument{\usebeamerfont{normal text}}
+\AtBeginDocument{\setlength{\parskip}{0.8\dimexpr\f@size pt\relax}} % Задаем расстояние между абзацами
+
+\setbeamertemplate{itemize items}{\textbullet}% отключает кошмарные синие треугольники
+\setbeamercolor{itemize/enumerate body}{fg=text}
+
+% Цвета для гиперссылок
+\definecolor{linkcolor}{HTML}{2F80EB} % цвет ссылок
+\definecolor{urlcolor}{HTML}{2F80EB} % цвет гиперссылок
+\hypersetup{pdfstartview=FitH, linkcolor=linkcolor,urlcolor=urlcolor, colorlinks=true}
+
+% Переопределяем поведение линии подчеркивания в uline
+
+% Roboto-Regular/Medium: post.underlineThickness=100, unitsPerEm=2048
+% коэф = 100/2048 ≈ 488/10000
+\renewcommand{\ULthickness}{\dimexpr \f@size pt * 488 / 10000 \relax}%
+% Отступ подчеркивания от базовой линии ломает \sout почему-то пока закрмментируем.
+%\renewcommand{\ULdepth}{\dimexpr \f@size pt * 10 / 100 \relax}% отступ от базовой линии
+
+% Переопределяем href чтобы он использовал \uline для подчеркивания ссылок
+\let\oldhref\href
+\renewcommand{\href}[2]{{\color{urlcolor}\uline{\oldhref{#1}{#2}}}}
+
+
+\setbeamerfont*{codelisting}{size*={14pt}{16pt},family=\ttfamily}
+\definecolor{codeTextColor}{HTML}{142D99}
+\definecolor{codeBgColor}{HTML}{EFEFF2}
+
+
+\AtBeginDocument{%
+ \@ifpackageloaded{minted}{%
+ \setminted{
+ bgcolor=codeBgColor
+ }%
+ }{}%
+}
+
+
+% Макросы воспроизводят поведение LibreOffice Impress при размещении текста
+% в текстовом блоке: LibreOffice использует usWinAscent как First Baseline
+% Offset — расстояние от верхней границы блока до базовой линии первой строки.
+% Пространство над заглавной буквой (gap) при этом равно:
+% gap = round(usWinAscent × fontSize / unitsPerEm)
+% - round(sCapHeight × fontSize / unitsPerEm)
+% где round реализован как целочисленное (a + unitsPerEm/2) / unitsPerEm.
+%
+% Макрос вычисляет gap для текущего активного шрифта (\f@size),
+% поэтому должен вызываться после \usebeamerfont{...}.
+%
+% Параметры шрифтов получены командой: ttx -t OS/2 -t head <font.ttf>
+% Для нового шрифта взять usWinAscent, sCapHeight, unitsPerEm из вывода
+% ttx и добавить аналогичный макрос.
+%
+% USE_TYPO_METRICS (fsSelection bit 7) у всех трёх не установлен —
+% LibreOffice использует Win-метрики. Проверить: в выводе ttx -t OS/2
+% убедиться что бит 7 fsSelection = 0.
+%
+% Roboto-Regular.ttf: usWinAscent=1946, sCapHeight=1456, unitsPerEm=2048
+% Roboto-Medium.ttf: usWinAscent=1946, sCapHeight=1456, unitsPerEm=2048
+% RobotoMono-Regular.ttf: usWinAscent=2146, sCapHeight=1456, unitsPerEm=2048
+
+\newcommand{\RobotoRegularBaselineGap}{\dimexpr
+ \numexpr (1946 * \f@size + 1024) / 2048 \relax pt -
+ \numexpr (1456 * \f@size + 1024) / 2048 \relax pt
+\relax}
+
+\newcommand{\RobotoMediumBaselineGap}{\dimexpr
+ \numexpr (1946 * \f@size + 1024) / 2048 \relax pt -
+ \numexpr (1456 * \f@size + 1024) / 2048 \relax pt
+\relax}
+
+\newcommand{\RobotoMonoRegularBaselineGap}{\dimexpr
+ \numexpr (2146 * \f@size + 1024) / 2048 \relax pt -
+ \numexpr (1456 * \f@size + 1024) / 2048 \relax pt
+\relax}
+
+
+\mode
+<all>
--- /dev/null
+\mode<presentation>
+
+
+\setbeamertemplate{background}{
+ \begin{tikzpicture}
+ \ifbeamer@sectionframe%
+ \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\paperwidth, height=\paperheight]{section_bg.pdf}};
+ \else
+ \ifbeamer@closingframe%
+ \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\paperwidth, height=\paperheight]{title_bg.pdf}};
+ \else
+ \ifnum\thepage=1\relax%
+ \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\paperwidth, height=\paperheight]{title_bg.pdf}};
+ \else%
+ \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\paperwidth, height=\paperheight]{page_bg.pdf}};
+ \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{text}\tiny\insertframenumber};
+ \fi\fi\fi%
+ \end{tikzpicture}
+}
+
+% Title page
+\newlength{\theme@titleheight}
+\defbeamertemplate*{title page}{}[1][]
+{%
+ % рендерим заголовок отдельно, и в зависимости от его размера (theme@titleheight)
+ % по разному вставляем его в макет
+ \setbox0=\vbox{%
+ \usebeamerfont{title}%
+ \inserttitle\par%
+ }
+ \settototalheight{\theme@titleheight}{\usebox0}
+
+ \begin{textblock*}{\paperwidth}(\beamer@leftmargin, 2.31cm)
+ \begin{beamercolorbox}[left,#1]{title page header}
+ \usebeamerfont{title}%
+ %
+ \ifdim\theme@titleheight<3.51cm
+ \begin{minipage}[t][3.51cm][c]{\textwidth}
+ \usebox0%
+ \end{minipage}
+ \else
+ \usebox0%
+ \fi
+ \end{beamercolorbox}%
+%
+ \begin{beamercolorbox}[left,#1]{subtitle}
+ \usebeamerfont{subtitle}%
+
+ \ifdim\theme@titleheight<3.51cm
+ \vskip \dimexpr \RobotoRegularBaselineGap - 9pt \relax%
+ \else
+ \vskip \dimexpr \RobotoRegularBaselineGap + 0pt \relax%
+ \fi
+%
+ \insertsubtitle\par%
+ \end{beamercolorbox}%
+ \end{textblock*}
+%
+ \begin{textblock*}{\paperwidth}(\beamer@leftmargin, 16.1cm)
+ \begin{beamercolorbox}[left,#1]{author}
+ \usebeamerfont{author}%
+ \vskip \dimexpr \RobotoRegularBaselineGap - 1pt \relax%
+ \insertauthor%
+ \end{beamercolorbox}
+ \begin{beamercolorbox}[left,#1]{institute}
+ \usebeamerfont{institute}%
+ \vskip \dimexpr \RobotoRegularBaselineGap + 1pt \relax%
+ \insertinstitute%
+ \end{beamercolorbox}
+ \end{textblock*}
+}
+
+
+% Шаблон для section-слайда
+\defbeamertemplate*{mysectionpage}{}{%
+ \begin{textblock*}{\paperwidth}(\beamer@leftmargin, 12.5cm)
+ {\usebeamercolor[fg]{section title}%
+ \usebeamerfont{section title}%
+ \vskip \dimexpr \RobotoMediumBaselineGap - 9.5pt \relax%
+ \insertframetitle\par}%
+ \end{textblock*}%
+}
+
+% Шаблон для closing-слайда
+\defbeamertemplate*{myclosingpage}{}{%
+ \begin{textblock*}{\paperwidth}(\beamer@leftmargin, 12.5cm)
+ {\usebeamercolor[fg]{closing title}%
+ \usebeamerfont{closing title}%
+ \vskip \dimexpr \RobotoMediumBaselineGap - 9.5pt \relax%
+ \insertframetitle\par}%
+ \end{textblock*}%
+}
+
+\mode
+<all>
--- /dev/null
+\mode<presentation>
+
+% Frame title
+\defbeamertemplate*{frametitle}{gcr2019}[1][]
+{
+ \ifbeamer@sectionframe%
+ \usebeamertemplate{mysectionpage}%
+ \else\ifbeamer@closingframe%
+ \usebeamertemplate{myclosingpage}%
+ \else%
+ \nointerlineskip%
+ \begin{beamercolorbox}[wd=\paperwidth, leftskip=\beamer@leftmargin]{frametitle}
+ \usebeamerfont{frametitle}%
+ \vskip7.3mm% Визуально выравниваем однострочный заголовок по линии логотипа справа
+ \insertframetitle\par%
+ \vskip3mm%
+ \end{beamercolorbox}%
+ \fi\fi%
+}
+
+\mode<all>
--- /dev/null
+% Based on gcr2019 theme (https://github.com/schors/gcr2019theme)
+% Used backghround pictures from template https://confluence.postgrespro.ru/download/attachments/169509420/_PostgresPro_ШАБЛОН.odp?version=1&modificationDate=1675418955114&api=v2
+% and Gilroy font from https://oc.postgrespro.ru/index.php/s/oXFIYT9dLwLCle6
+\mode<presentation>
+
+% Requirement
+\RequirePackage{tikz}
+\RequirePackage[absolute,overlay]{textpos}
+\RequirePackage{calc}
+
+% Переопределяем размер слайда под фактический размер pdf-ного фона
+\geometry{paperwidth=960bp,paperheight=540bp}
+
+% Определяем параметры темы c и t определяющие вертиальную ориентацию текста на слайде. t -- по умолчанию
+\DeclareOptionBeamer{c}{\beamer@centeredtrue}
+\DeclareOptionBeamer{t}{\beamer@centeredfalse}
+\ExecuteOptionsBeamer{t}
+\ProcessOptionsBeamer
+
+% Settings
+\useinnertheme{PgPro2025}
+\useoutertheme{PgPro2025}
+\usecolortheme{PgPro2025}
+
+\setbeamertemplate{navigation symbols}{}
+\setbeamertemplate{blocks}[rounded][shadow=true]
+\setbeamertemplate{footline}{\vspace{1cm}}
+\setbeamersize{text margin left=1.33cm,text margin right=1.33cm}
+
+\mode<all>
--- /dev/null
+\makeatletter
+\def\input@path{{./themes.nonfree/PgPro2025}}
+\graphicspath{{./themes.nonfree/PgPro2025/bgpics}}
+\makeatother
+\usetheme{PgPro2025}
+
-\documentclass[aspectratio=169]{beamer}
+\documentclass{beamer}
\usepackage{xltxtra}
\defaultfontfeatures{Ligatures=TeX,Mapping=tex-text}
\usepackage[russian]{babel}
\usepackage[utf8]{inputenc}
-\usepackage[normalem]{ulem} % для \sout
-%\usepackage{tikz} % FIXME не уверен что все это тут надо
-%\usetikzlibrary{chains}
+\usepackage{sty/my-common-style} % общие для всех презентаций пакеты и определения
- % Цвета для гиперссылок
- \definecolor{linkcolor}{HTML}{799B03} % цвет ссылок
- \definecolor{urlcolor}{HTML}{6633FF} % цвет гиперссылок
-
- \hypersetup{pdfstartview=FitH, linkcolor=linkcolor,urlcolor=urlcolor, colorlinks=true}
+\input{theme_setup.tex} % Подгружаем тему из файла
-\title{Git and vim for PostgreSQL developers}
-\author{Nikolay Shaplov}
+\input{elements/code.tex}
-\makeatletter
-% Добавляем подпапку к пути поиска .sty/.tex
-\def\input@path{{./theme.nonfree}}
-\makeatother
+% Когда захотим добавлять картинки из директории, то ее надо добавить к graphicspath
+% вот таким вот образом. (Спроси Клода почему)
+%\makeatletter
+%\expandafter\graphicspath\expandafter{\Ginput@path{img/}}
+%\makeatother
-\usetheme{PgPro}
-\input{elements/code.tex}
+\title{Git and vim for PostgreSQL developers}
+\subtitle{Getting started}
+
+\author{Nikolay Shaplov}
\begin{document}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-{\setbeamertemplate{background}{
- \begin{tikzpicture}
- \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg2.png}};
- \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber};
- \end{tikzpicture}
- }
- \setbeamercolor{normal text}{fg=white}\usebeamercolor*{normal text}
- \setbeamerfont{normal text}{size*={32pt}{1},family=\sffamily}\usebeamerfont*{normal text}
- \begin{frame}
- \vskip1cm
- Git
- \end{frame}
-}
+\section{Git}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{Git, fetching the source code}
+\begin{frame}[fragile]{Git, fetching the source code}
In order to get latest snapshot of PostgreSQL code you should run command:
- \begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1]
-$ git clone https://git.postgresql.org/git/postgresql.git \end{lstlisting}
+ \begin{codeblock}[autogobble]{bash}
+ $ git clone https://git.postgresql.org/git/postgresql.git
+ \end{codeblock}
If that command does not work for you, may be you just need to install `git` package
- \begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1]
-$ sudo apt-get install git\end{lstlisting}
+ \begin{codeblock}[autogobble]{bash}
+ $ sudo apt-get install git
+ \end{codeblock}
\end{frame}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-{\setbeamertemplate{background}{
- \begin{tikzpicture}
- \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg2.png}};
- \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber};
- \end{tikzpicture}
- }
- \setbeamercolor{normal text}{fg=white}\usebeamercolor*{normal text}
- \setbeamerfont{normal text}{size*={32pt}{1},family=\sffamily}\usebeamerfont*{normal text}
- \begin{frame}
- \vskip1cm
- Vim
- \end{frame}
-}
+\section{Vim}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{Why vim?}
+\begin{frame}[fragile]{Why vim?}
\begin{itemize}
\item Masterclass is when expert shows how he works. And I work with vim
\item We will need complex navigation methods to browse the code, that is not provided by simple editors
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-{\setbeamertemplate{background}{
- \begin{tikzpicture}
- \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg2.png}};
- \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber};
- \end{tikzpicture}
- }
- \setbeamercolor{normal text}{fg=white}\usebeamercolor*{normal text}
- \setbeamerfont{normal text}{size*={32pt}{1},family=\sffamily}\usebeamerfont*{normal text}
- \begin{frame}
- \vskip1cm
- Vim myths
- \end{frame}
-}
+\section{Vim myths}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{Vim myths}
+\begin{frame}{Vim myths}
\begin{itemize}
\item There are two main modes in vim:
\begin{itemize}
\end{frame}
-\begin{frame}[fragile, shrink=10]{Vim myths}
+\begin{frame}{Vim myths}
\begin{itemize}
\item \sout{There are two main modes in vim:}
\begin{itemize}
\end{frame}
-\begin{frame}[fragile, shrink=10]{Vim myths}
+\begin{frame}{Vim myths}
\begin{itemize}
\item \sout{There are two main modes in vim:}
\begin{itemize}
-\begin{frame}[fragile, shrink=10]{Vim myths}
+\begin{frame}{Vim myths}
\begin{itemize}
\item \sout{There are two main modes in vim:}
\begin{itemize}
\end{frame}
-\begin{frame}[fragile, shrink=10]{Vim myths}
+\begin{frame}{Vim myths}
\begin{itemize}
\item \sout{There are two main modes in vim:}
\begin{itemize}
% \emph{~~~ No. MIDI Foot Pedal is for Emacs users only}
\end{frame}
-\begin{frame}[fragile, shrink=10]{Vim myths}
+\begin{frame}{Vim myths}
\begin{itemize}
\item \sout{There are two main modes in vim:}
\begin{itemize}
% \emph{~~~ No. MIDI Foot Pedal is for Emacs users only}
\end{frame}
-\begin{frame}[fragile, shrink=10]{Vim myths}
+\begin{frame}{Vim myths}
\begin{itemize}
\item \sout{There are two main modes in vim:}
\begin{itemize}
}
\end{frame}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usetikzlibrary{arrows.meta}
}
\end{frame}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
\begin{frame}{Vim modes}
\resizebox{0.8\textwidth}{!}{
\begin{tikzpicture}[start chain=going below, node distance=12mm and 32mm, >={Stealth[scale=1.5]} ] % начало цепочки
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{Commands of the command-line mode}
+\begin{frame}[fragile]{Commands of the command-line mode}
\begin{itemize}
\item \textbf{:q} --- quit vim
\item \textbf{:q!} --- quit without saving
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{Normal mode commands}
+\begin{frame}[fragile]{Normal mode commands}
\begin{itemize}
\item \textbf{dd} --- delete line;
\item \textbf{u} --- undo;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{Search mode commands}
+\begin{frame}[fragile]{Search mode commands}
\begin{itemize}
\item \textbf{/abc} --- search text for substring `abc`;
\item \textbf{/} --- search again.
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-{\setbeamertemplate{background}{
- \begin{tikzpicture}
- \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg2.png}};
- \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber};
- \end{tikzpicture}
- }
- \setbeamercolor{normal text}{fg=white}\usebeamercolor*{normal text}
- \setbeamerfont{normal text}{size*={32pt}{1},family=\sffamily}\usebeamerfont*{normal text}
- \begin{frame}
- \vskip1cm
- Navigating through code using tags in vim
- \end{frame}
-}
+\section{Navigating through code using tags in vim}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{Tags lists}
+\begin{frame}[fragile]{Tags lists}
Tags are an ancient way for navigating the code, for jumping from symbol's usage to it's definition.
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{Building tags list}
+\begin{frame}[fragile]{Building tags list}
To build tags list you should install `exuberant-ctags` package:
- \begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1]
-$ sudo apt-get install exuberant-ctags \end{lstlisting}
+ \begin{codeblock}[autogobble]{bash}
+ $ sudo apt-get install exuberant-ctags
+ \end{codeblock}
And then run \texttt{make\_ctags} script provided by PostgreSQL developers from the root of PostgreSQL source tree
- \begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1]
-$ src/tools/make_ctags \end{lstlisting}
+ \begin{codeblock}[autogobble]{bash}
+ $ src/tools/make_ctags
+ \end{codeblock}
You will get a bunch of \texttt{tags} files in each directory of source tree.
You can copy it to your extension dir, so you can jump to postgres code function definitions while editing your code.
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{Using tags in vim}
+\begin{frame}[fragile]{Using tags in vim}
Let's open some file from PostgreSQL source code
- \begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1]
-$ vim src/backend/postmaster/postmaster.c \end{lstlisting}
+ \begin{codeblock}[autogobble]{bash}
+ $ vim src/backend/postmaster/postmaster.c
+ \end{codeblock}
and find some symbol that most probably defined inside PosgreSQL code.
I found \texttt{BACKEND\_NUM\_TYPES} on 145th line.
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{Hiding \texttt{tags} from git}
+\begin{frame}[fragile]{Hiding \texttt{tags} from git}
\texttt{tags} files are not ignored by by git version control system.
You can see that by running command
-\begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1]
-$ git status \end{lstlisting}
+ \begin{codeblock}[autogobble]{bash}
+ $ git status
+ \end{codeblock}
+
Theoretically you cat add \texttt{tags} into \texttt{.girignore} file, but you will have to track this change manually, make sure it is not committed, and so on.
Less known solution is to add \texttt{tags} into local .\texttt{git/info/exclude} file, that will do same trick.
Run again
-\begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1]
-$ git status \end{lstlisting}
+ \begin{codeblock}[autogobble]{bash}
+ $ git status
+ \end{codeblock}
and you will see that \texttt{tags} files are now ignored.
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{Open file on certain position}
+\begin{frame}[fragile]{Open file on certain position}
If you, for some reason need to open file on certain position, for example you get an error message from a compiler, that specify certain line number, you can specify this line number as an extra option with "plus" prefix in front of it:
-\begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1]
-$ vim src/backend/access/common/reloptions.c +1234 \end{lstlisting}
+ \begin{codeblock}[autogobble]{bash}
+ $ vim src/backend/access/common/reloptions.c +1234
+ \end{codeblock}
This command will open \texttt{reloptions.c} file in vim, and move cursor to line number 1234.
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[fragile, shrink=10]{\texttt{grep}ing for function definition}
+\begin{frame}[fragile]{\texttt{grep}ing for function definition}
If you know function name (from compiler error message) and would like to find it's definition, most probably you will try to use \texttt{grep} utility.
But you will not success, as multiple \texttt{tags} files will also contain this function name.
You should use `git grep` command instead, as it will ignore files that are not part of git repository
-\begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1]
-$ git grep ^tsvectorin \end{lstlisting}
+ \begin{codeblock}[autogobble]{bash}
+ $ git grep ^tsvectorin
+ \end{codeblock}
This command uses the convention that, in a C program, the function name is specified starting from the first character of the line.
This allow to find only function definition, and ignore all other occurrences.
-\begin{lstlisting}[linewidth=0.9\textwidth, literate={\$}{{\textdollar}}1]
-int
-my_function(char * str, bool is_cool) \end{lstlisting}
-
+ \begin{codeblock}[autogobble]{C}
+ int
+ my_function(char * str, bool is_cool)
+ \end{codeblock}
\end{frame}
+\begin{frame}[closing]{Thank you!}\null\end{frame}
-{\setbeamertemplate{background}{
- \begin{tikzpicture}
- \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_thanks_bg.png}};
- \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber};
- \end{tikzpicture}
- }
- \begin{frame}
- \end{frame}
-}
\end{document}