commit e3565057edfa0a4818f0edcce3f23e04562a1f1d Author: Levi Pearson Date: Thu Sep 13 10:44:06 2018 -0600 Presentation as of 9/12/2018, presented at LDUG diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5a27ca8 --- /dev/null +++ b/Makefile @@ -0,0 +1,29 @@ +# Use nix-shell -p pandoc to bring pandoc into the path + +NAME := Types + +THEME := metropolis +THEME_FILES := beamercolortheme${THEME}.sty \ + beamerfonttheme${THEME}.sty \ + beamerinnertheme${THEME}.sty \ + beameroutertheme${THEME}.sty \ + beamertheme${THEME}.sty \ + pgfplotsthemetol.sty + +.PHONY: all clean tex-clean + +all: ${NAME}.pdf + +body.tex: ${NAME}.md + pandoc --pdf-engine=xelatex -t beamer -V theme:${THEME} -o body.tex ${NAME}.md + +${NAME}.pdf: head.tex body.tex + xelatex head.tex + xelatex head.tex + mv head.pdf ${NAME}.pdf + +tex-clean: + @rm -f *.aux *.log *.nav *.out *.snm *.toc *.vrb body.tex + +clean: tex-clean + @rm -f *.pdf diff --git a/Types.md b/Types.md new file mode 100644 index 0000000..b21eb7c --- /dev/null +++ b/Types.md @@ -0,0 +1,247 @@ +--- +title: Intro to Types +subtitle: What they are and what they're for +author: Levi Pearson +... + +# Overview + +## Goals + ++ Enough terminology to understand discussions ++ Understand what types provide, and at what cost ++ How common language features interact with type systems + +## Not-Goals + ++ Debate about whether typed languages are "good" or "bad" ++ Deep understanding of Type Theory + +# Definitions + +## Caveats + ++ "Types" and "Type Systems" are overloaded terms + ++ Many usages are correct--in the right context! + ++ Be prepared to find common ground *before* arguing + +## Type System + +> A type system is a tractable syntactic method for proving +> the absence of certain program behaviors by classifying +> phrases according to the kinds of values they compute. +> +> -- Benjamin Pierce, "Types and Programming Languages" + +## Types About Programs + ++ Types and type systems were invented before computers ++ Used in logic, math, and philosophy ++ Also used in CS for things other than practical programs ++ They are related, but we won't speak further about them! + +## Syntactic Method + ++ "Syntactic" means "based on the form of the text", or "static" + ++ This excludes run-time or "dynamic" information from the proof + +## Classifying + ++ Types *classify* textual phrases ("terms") + ++ Types *describe* the values the terms of that type can evaluate to + ++ They provide an "upper bound" on the range of values + ++ E.g. the expression `3 + 2` is a term that may have the type `Int` + +## Absence of Behaviors + ++ Proofs are *about* run-time behavior, not syntactic issues + ++ Example behaviors to exclude: + - Nonsensical operations, e.g. `3 + false` + - Calling missing methods + - Violation of abstraction boundaries + ++ Each system chooses what behaviors it excludes + +## Tractable + ++ An algorithm (the "type checker") exists ++ It can prove that the types assigned to terms are consistent *or* ++ It can show where any inconsistencies are in the program ++ The algorithm must complete in a reasonable amount of time ++ It is desirable to know it will *always* complete + +# Errors and Safety + +## Going Wrong + +> ... well-typed programs cannot "go wrong" ... +> +> -- Robin Milner, "A Theory of Type Polymorphism in Programming" + ++ This paper introduced the type checker for ML + ++ What does he mean by "go wrong"? + +## Formal Semantics + ++ To formally prove, you must first formally specify + ++ A formal semantics gives unambiguous meaning to all programs + ++ This is as difficult as it sounds; rarely done for full languages + ++ Milner gave the meaning "wrong" to certain program fragments + +## Well-Typed + ++ To be "well-typed" means types can be found for all terms + ++ Types are the "upper bound" on possible evaluations + ++ The meaning/evaluation "wrong" has no type + ++ If a program is well-typed, it can't go (i.e. evaluate to) "wrong" + +## What is "wrong"? + ++ Not all errors can be easily ruled out this way + ++ Types are an approximation of run-time values + ++ Detecting some errors requires very fine approximation + ++ "Fancy" types can approximate better, but add complexity + +## Safety + ++ What errors to prioritize? Abstraction-breaking ones. + - Out-of bounds manipulation of memory + - Viewing an object as a value outside its type + - Viewing uninitialized memory + - Executing code at an illegal address + - Corruption of run-time or system data + ++ If a language rules out these behaviors in its programs, it is Safe. + ++ Safe langauges may still have plenty of errors in their programs + ++ Errors in safe languages are properly attributed to their causes! + +## Safety and Types + ++ Types can rule out many, but usually not all, safety errors. + - Array bounds for dynamically-sized arrays + - Use-after-free errors + ++ Run-time checks can catch them all! + ++ So why use types? + +## Advantages to Type Safety + ++ Errors are ruled out *before* execution and for all runs + ++ Expensive run-time checks can be elided + ++ Sometimes more efficient data representation can be used + ++ Types provide useful documentation, especially when precise + +## Costs to Type Safety + ++ Some programs are ruled out that would run correctly if dyanmically checked + ++ Extra time and formality is needed in the language design + ++ Type checking algorithms may take non-trivial compile time + ++ Some run-time checks and other infrastructure still needed + +## Type Systems Are Hard + +> It turns out that a fair amount of careful analysis is required to +> avoid false and embarrasing claims of type soundness for programming +> languages. As a consequence, the classification, description, and +> study of type systems has emerged as a formal discipline. +> +> -- Luca Cardelli + +# Classifying Type Systems + +## Surface Dimensions + ++ Safe vs. Unsafe ++ Typed vs. Untyped ++ Explicit vs. Implicit ++ Simple vs... not? + +## When is a language typed? + ++ If it has a type checker, it is typed ++ It may *also* store information for run-time checking ++ The type checker might not be of much help sometimes ++ Things get fuzzy sometimes + +## Implicit types and inference + ++ Many useful ML programs can be written without naming a type in their text ++ "Algorithm W", a.k.a. "Hindley-Milner type inference" figures them all out ++ Tractability of inference algorithms is very sensitive to type system features! ++ Interacts particularly poorly with subtyping ++ "inference" vs. "deduction" + +## Simple Types + ++ These types classify values and functions ++ Can include higher-order functions ++ Base types, plus various compound types ++ tuples, records, variants, enumerations, arrays, etc. ++ Languages with simple type systems begin with Fortran in 1950s. + +## Polymorphic Types + ++ A polymorphic type is parameterized by one or more type variables ++ For each choice of type for the type variable, a new concrete type is selected ++ A polymorphic type is like a function from types to types ++ This is called "parametric polymorphism" ++ A simple type system is a first-order system; with polymorphism, higher-order. + +## Polymorphic Lists + ++ `List` is a type that maps a type `T` to the type of lists of `T` ++ It works for *all* types `T` ++ `List` itself is sometimes called a "type constructor" ++ Code written in terms of `List` can not depend on what `T` is chosen + +## Subtyping + ++ A type 'A' is a subtype of type 'B' if a term of type 'A' + can be used anywhere a 'B' is expected + ++ Sometimes known as "subtype polymorphism" + +## Existential Types + +> Type structure is a syntactic discipline for enforcing levels of abstraction. +> +> -- John Reynolds + +## Forall vs. Exists + ++ Parametric type variable is *universally quantified* ++ `List` means "For all types T, we can construct List of T" ++ From logic, we also have *existential quantification* ++ "There exists a type T such that..." + +## How does that work? + ++ We can bundle an existential type with operations that are aware of its real nature ++ `exists T. { T.to_string() -> String; T.combine(other: T) -> T }` ++ These can be used in contexts where the exact type is known; i.e. it is abstract diff --git a/beamercolorthememetropolis.sty b/beamercolorthememetropolis.sty new file mode 100644 index 0000000..6badc65 --- /dev/null +++ b/beamercolorthememetropolis.sty @@ -0,0 +1,126 @@ +%% +%% This is file `beamercolorthememetropolis.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% beamercolorthememetropolis.dtx (with options: `package') +%% --------------------------------------------------------------------------- +%% Copyright 2015 Matthias Vogelgesang and the LaTeX community. A full list of +%% contributors can be found at +%% +%% https://github.com/matze/mtheme/graphs/contributors +%% +%% and the original template was based on the HSRM theme by Benjamin Weiss. +%% +%% This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 +%% International License (https://creativecommons.org/licenses/by-sa/4.0/). +%% --------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{beamercolorthememetropolis}[2015/12/04 Metropolis color theme] +\RequirePackage{pgfopts} +\pgfkeys{ + /metropolis/color/block/.cd, + .is choice, + transparent/.code=\@metropolis@block@transparent, + fill/.code=\@metropolis@block@fill, +} +\pgfkeys{ + /metropolis/color/background/.cd, + .is choice, + dark/.code=\@metropolis@colors@dark, + light/.code=\@metropolis@colors@light, +} +\newcommand{\@metropolis@color@setdefaults}{ + \pgfkeys{/metropolis/color/.cd, + background=light, + block=transparent, + } +} +\definecolor{mDarkBrown}{HTML}{604c38} +\definecolor{mDarkTeal}{HTML}{23373b} +\definecolor{mLightBrown}{HTML}{EB811B} +\definecolor{mLightGreen}{HTML}{14B03D} +\newcommand{\@metropolis@colors@dark}{ + \setbeamercolor{normal text}{% + fg=black!2, + bg=mDarkTeal + } +} +\newcommand{\@metropolis@colors@light}{ + \setbeamercolor{normal text}{% + fg=mDarkTeal, + bg=black!2 + } +} +\setbeamercolor{alerted text}{% + fg=mLightBrown +} +\setbeamercolor{example text}{% + fg=mLightGreen +} +\setbeamercolor{titlelike}{use=normal text, parent=normal text} +\setbeamercolor{author}{use=normal text, parent=normal text} +\setbeamercolor{date}{use=normal text, parent=normal text} +\setbeamercolor{institute}{use=normal text, parent=normal text} +\setbeamercolor{structure}{use=normal text, fg=normal text.fg} +\setbeamercolor{palette primary}{% + use=normal text, + fg=normal text.bg, + bg=normal text.fg +} +\setbeamercolor{frametitle}{% + use=palette primary, + parent=palette primary +} +\setbeamercolor{progress bar}{% + use=alerted text, + fg=alerted text.fg, + bg=alerted text.fg!50!black!30 +} +\setbeamercolor{title separator}{ + use=progress bar, + parent=progress bar +} +\setbeamercolor{progress bar in head/foot}{% + use=progress bar, + parent=progress bar +} +\setbeamercolor{progress bar in section page}{ + use=progress bar, + parent=progress bar +} +\newcommand{\@metropolis@block@transparent}{ + \setbeamercolor{block title}{use=normal text, parent=normal text} +} +\newcommand{\@metropolis@block@fill}{ + \setbeamercolor{block title}{% + use=normal text, + fg=normal text.fg, + bg=normal text.bg!80!fg + } +} +\setbeamercolor{block title alerted}{% + use={block title, alerted text}, + bg=block title.bg, + fg=alerted text.fg +} +\setbeamercolor{block title example}{% + use={block title, example text}, + bg=block title.bg, + fg=example text.fg +} +\setbeamercolor{block body alerted}{use=block body, parent=block body} +\setbeamercolor{block body example}{use=block body, parent=block body} +\setbeamercolor{block body}{ + use={block title, normal text}, + bg=block title.bg!50!normal text.bg +} +\setbeamercolor{footnote}{fg=normal text.fg!90} +\setbeamercolor{footnote mark}{fg=.} +\@metropolis@color@setdefaults +\ProcessPgfPackageOptions{/metropolis/color} +\mode +\endinput +%% +%% End of file `beamercolorthememetropolis.sty'. diff --git a/beamerfontthememetropolis.sty b/beamerfontthememetropolis.sty new file mode 100644 index 0000000..c85a41a --- /dev/null +++ b/beamerfontthememetropolis.sty @@ -0,0 +1,112 @@ +%% +%% This is file `beamerfontthememetropolis.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% beamerfontthememetropolis.dtx (with options: `package') +%% --------------------------------------------------------------------------- +%% Copyright 2015 Matthias Vogelgesang and the LaTeX community. A full list of +%% contributors can be found at +%% +%% https://github.com/matze/mtheme/graphs/contributors +%% +%% and the original template was based on the HSRM theme by Benjamin Weiss. +%% +%% This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 +%% International License (https://creativecommons.org/licenses/by-sa/4.0/). +%% --------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{beamerfontthememetropolis}[2015/12/04 Metropolis font theme] +\RequirePackage{etoolbox} +\RequirePackage{ifxetex} +\RequirePackage{ifluatex} +\ifboolexpr{bool {xetex} or bool {luatex}}{ + \RequirePackage[no-math]{fontspec} + \newcounter{fontsnotfound} + \newcommand{\checkfont}[1]{% + \suppressfontnotfounderror=1% + \font\x = "#1" at 10pt + \selectfont + \ifx\x\nullfont% + \stepcounter{fontsnotfound}% + \fi% + \suppressfontnotfounderror=0% + } + + \newcommand{\iffontsexist}[3]{% + \setcounter{fontsnotfound}{0}% + \expandafter\forcsvlist\expandafter% + \checkfont\expandafter{#1}% + \ifnum\value{fontsnotfound}=0% + #2% + \else% + #3% + \fi% + } + \iffontsexist{Fira Sans Light,% + Fira Sans Light Italic,% + Fira Sans,% + Fira Sans Italic}{% + \setsansfont[BoldFont={Fira Sans}]{Fira Sans Light}% + }{% + \iffontsexist{Fira Sans Light OT,% + Fira Sans Light Italic OT,% + Fira Sans OT,% + Fira Sans Italic OT}{% + \setsansfont[BoldFont={Fira Sans OT}]{Fira Sans Light OT}% + }{% + \PackageWarning{beamerthememetropolis}{% + Could not find Fira Sans fonts% + } + } + } + \iffontsexist{Fira Mono, Fira Mono Bold}{% + \setmonofont{Fira Mono}% + }{% + \iffontsexist{Fira Mono OT, Fira Mono Bold OT}{% + \setmonofont{Fira Mono OT}% + }{% + \PackageWarning{beamerthememetropolis}{% + Could not find Fira Mono fonts% + } + } + } + \AtBeginEnvironment{tabular}{% + \addfontfeature{Numbers={Monospaced}}% + } +}{% + \PackageWarning{beamerthememetropolis}{% + You need to compile with XeLaTeX or LuaLaTeX to use the Fira fonts% + } +} +\setbeamerfont{title}{size=\Large,% + series=\bfseries} +\setbeamerfont{author}{size=\small} +\setbeamerfont{date}{size=\small} +\setbeamerfont{section title}{size=\Large,% + series=\bfseries} +\setbeamerfont{plain title}{size=\Large,% + series=\bfseries} +\setbeamerfont{block title}{size=\normalsize,% + series=\bfseries} +\setbeamerfont{block title alerted}{size=\normalsize,% + series=\bfseries} +\setbeamerfont*{subtitle}{size=\large} +\setbeamerfont{frametitle}{size=\large,% + series=\bfseries} +\setbeamerfont{caption}{size=\small} +\setbeamerfont{caption name}{series=\bfseries} +\setbeamerfont{description item}{series=\bfseries} +\setbeamerfont{page number in head/foot}{size=\scriptsize} +\setbeamerfont{bibliography entry author}{size=\normalsize,% + series=\normalfont} +\setbeamerfont{bibliography entry title}{size=\normalsize,% + series=\bfseries} +\setbeamerfont{bibliography entry location}{size=\normalsize,% + series=\normalfont} +\setbeamerfont{bibliography entry note}{size=\small,% + series=\normalfont} +\endinput +%% +%% End of file `beamerfontthememetropolis.sty'. diff --git a/beamerinnerthememetropolis.sty b/beamerinnerthememetropolis.sty new file mode 100644 index 0000000..982e50e --- /dev/null +++ b/beamerinnerthememetropolis.sty @@ -0,0 +1,345 @@ +%% +%% This is file `beamerinnerthememetropolis.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% beamerinnerthememetropolis.dtx (with options: `package') +%% --------------------------------------------------------------------------- +%% Copyright 2015 Matthias Vogelgesang and the LaTeX community. A full list of +%% contributors can be found at +%% +%% https://github.com/matze/mtheme/graphs/contributors +%% +%% and the original template was based on the HSRM theme by Benjamin Weiss. +%% +%% This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 +%% International License (https://creativecommons.org/licenses/by-sa/4.0/). +%% --------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{beamerinnerthememetropolis}[2015/12/04 Metropolis inner theme] +\RequirePackage{etoolbox} +\RequirePackage{calc} +\RequirePackage{pgfopts} +\RequirePackage{tikz} +\pgfkeys{ + /metropolis/inner/block/.cd, + .is choice, + transparent/.code=\setlength{\@metropolis@blockskip}{0ex}, + fill/.code=\setlength{\@metropolis@blockskip}{1ex}, +} +\pgfkeys{ + /metropolis/inner/titleformat title/.cd, + .is choice, + regular/.code={% + \let\@metropolis@titleformat\@empty% + \setbeamerfont{title}{shape=\normalfont}% + }, + smallcaps/.code={% + \let\@metropolis@titleformat\@empty% + \setbeamerfont{title}{shape=\scshape}% + }, + allsmallcaps/.code={% + \let\@metropolis@titleformat\MakeLowercase% + \setbeamerfont{title}{shape=\scshape}% + \PackageWarning{beamerthememetropolis}{% + Be aware that titleformat title=allsmallcaps can lead to problems% + } + }, + allcaps/.code={% + \let\@metropolis@titleformat\MakeUppercase% + \setbeamerfont{title}{shape=\normalfont} + \PackageWarning{beamerthememetropolis}{% + Be aware that titleformat title=allcaps can lead to problems% + } + }, +} +\pgfkeys{ + /metropolis/inner/titleformat subtitle/.cd, + .is choice, + regular/.code={% + \let\@metropolis@subtitleformat\@empty% + \setbeamerfont{subtitle}{shape=\normalfont}% + }, + smallcaps/.code={% + \let\@metropolis@subtitleformat\@empty% + \setbeamerfont{subtitle}{shape=\scshape}% + }, + allsmallcaps/.code={% + \let\@metropolis@subtitleformat\MakeLowercase% + \setbeamerfont{subtitle}{shape=\scshape}% + \PackageWarning{beamerthememetropolis}{% + Be aware that titleformat subtitle=allsmallcaps can lead to problems% + } + }, + allcaps/.code={% + \let\@metropolis@subtitleformat\MakeUppercase% + \setbeamerfont{subtitle}{shape=\normalfont}% + \PackageWarning{beamerthememetropolis}{% + Be aware that titleformat subtitle=allcaps can lead to problems% + } + }, +} +\pgfkeys{ + /metropolis/inner/titleformat section/.cd, + .is choice, + regular/.code={% + \let\@metropolis@sectiontitleformat\@empty% + \setbeamerfont{section title}{shape=\normalfont}% + }, + smallcaps/.code={% + \let\@metropolis@sectiontitleformat\@empty% + \setbeamerfont{section title}{shape=\scshape}% + }, + allsmallcaps/.code={% + \let\@metropolis@sectiontitleformat\MakeLowercase% + \setbeamerfont{section title}{shape=\scshape}% + \PackageWarning{beamerthememetropolis}{% + Be aware that titleformat section=allsmallcaps can lead to problems% + } + }, + allcaps/.code={% + \let\@metropolis@sectiontitleformat\MakeUppercase% + \setbeamerfont{section title}{shape=\normalfont}% + \PackageWarning{beamerthememetropolis}{% + Be aware that titleformat section=allcaps can lead to problems% + } + }, +} +\pgfkeys{ + /metropolis/inner/sectionpage/.cd, + .is choice, + none/.code=\@metropolis@sectionpage@none, + simple/.code=\@metropolis@sectionpage@simple, + progressbar/.code=\@metropolis@sectionpage@progressbar, +} +\newcommand{\@metropolis@inner@setdefaults}{ + \pgfkeys{/metropolis/inner/.cd, + sectionpage=progressbar, + block=transparent, + titleformat title=regular, + titleformat subtitle=regular, + titleformat section=regular, + } +} +\def\@metropolis@titleformat#1{#1} +\def\@metropolis@subtitleformat#1{#1} +\def\@metropolis@sectiontitleformat#1{#1} +\patchcmd{\sectionentry} + {\def\insertsectionhead{#2}} + {\def\insertsectionhead{\@metropolis@sectiontitleformat{#2}}} + {} + {\PackageError{beamerinnerthememetropolis}{Patching section title failed}} +\patchcmd{\beamer@section} + {\def\insertsectionhead{\hyperlink{Navigation\the\c@page}{#1}}} + {\def\insertsectionhead{\hyperlink{Navigation\the\c@page}{% + \@metropolis@sectiontitleformat{#1}}}} + {} + {\PackageError{beamerinnerthememetropolis}{Patching section title failed}} +\setbeamertemplate{title page}{ + \begin{minipage}[b][\paperheight]{\textwidth} + \ifx\inserttitlegraphic\@empty\else\usebeamertemplate*{title graphic}\fi + \vfill% + \ifx\inserttitle\@empty\else\usebeamertemplate*{title}\fi + \ifx\insertsubtitle\@empty\else\usebeamertemplate*{subtitle}\fi + \usebeamertemplate*{title separator} + \ifx\beamer@shortauthor\@empty\else\usebeamertemplate*{author}\fi + \ifx\insertdate\@empty\else\usebeamertemplate*{date}\fi + \ifx\insertinstitute\@empty\else\usebeamertemplate*{institute}\fi + \vfill + \vspace*{1mm} + \end{minipage} +} +\def\maketitle{% + \ifbeamer@inframe + \titlepage + \else + \frame[plain]{\titlepage} + \fi +} +\def\titlepage{% + \usebeamertemplate{title page} +} +\setbeamertemplate{title graphic}{ + \vbox to 0pt { + \vspace*{2em} + \inserttitlegraphic% + }% + \nointerlineskip% +} +\setbeamertemplate{title}{ + \raggedright% + \linespread{1.0}% + \@metropolis@titleformat{\inserttitle}% + \par% + \vspace*{0.5em} +} +\setbeamertemplate{subtitle}{ + \@metropolis@subtitleformat{\insertsubtitle}% + \par% + \vspace*{0.5em} +} +\setbeamertemplate{title separator}{ + \begin{tikzpicture} + \draw[fg, fill=fg] (0,0) rectangle (\textwidth, 0.4pt); + \end{tikzpicture}% + \par% +} +\setbeamertemplate{author}{ + \vspace*{2em} + \insertauthor% + \par% + \vspace*{0.25em} +} +\setbeamertemplate{date}{ + \insertdate% + \par% +} +\setbeamertemplate{institute}{ + \vspace*{3mm} + \insertinstitute% + \par% +} +\newcommand{\@metropolis@sectionpage@none}{ + \AtBeginSection{ + % intenionally empty + } +} +\defbeamertemplate{section page}{simple}{ + \centering + \usebeamercolor[fg]{section title} + \usebeamerfont{section title} + \insertsectionhead\\ +} +\newcommand{\@metropolis@sectionpage@simple}{ + \setbeamertemplate{section page}[simple] + \AtBeginSection{ + \ifbeamer@inframe + \sectionpage + \else + \frame[plain,c]{\sectionpage} + \fi + } +} +\defbeamertemplate{section page}{progressbar}{ + \centering + \begin{minipage}{22em} + \usebeamercolor[fg]{section title} + \usebeamerfont{section title} + \insertsectionhead\\[-1ex] + \usebeamertemplate*{progress bar in section page} + \end{minipage} + \par +} +\newcommand{\@metropolis@sectionpage@progressbar}{ + \setbeamertemplate{section page}[progressbar] + \AtBeginSection{ + \ifbeamer@inframe + \sectionpage + \else + \frame[plain,c]{\sectionpage} + \fi + } +} +\newlength{\metropolis@progressonsectionpage} +\setbeamertemplate{progress bar in section page}{ + \setlength{\metropolis@progressonsectionpage}{% + \textwidth * \ratio{\insertframenumber pt}{\inserttotalframenumber pt}% + }% + \begin{tikzpicture} + \draw[bg, fill=bg] (0,0) rectangle (\textwidth, 0.4pt); + \draw[fg, fill=fg] (0,0) rectangle (\metropolis@progressonsectionpage, 0.4pt); + \end{tikzpicture}% +} +\def\inserttotalframenumber{100} +\newlength{\@metropolis@blockskip} +\setbeamertemplate{block begin}{% + \setlength{\parskip}{\@metropolis@parskip} + \vspace*{1ex} + \begin{beamercolorbox}[% + ht=2.4ex, + dp=1ex, + leftskip=\@metropolis@blockskip, + rightskip=\@metropolis@blockskip]{block title} + \usebeamerfont*{block title}\insertblocktitle% + \end{beamercolorbox}% + \vspace*{-1pt} + \usebeamerfont{block body}% + \begin{beamercolorbox}[% + dp=1ex, + leftskip=\@metropolis@blockskip, + rightskip=\@metropolis@blockskip, + vmode]{block body}% +} +\setbeamertemplate{block end}{% + \end{beamercolorbox} + \vspace*{0.2ex} +} +\setbeamertemplate{block alerted begin}{% + \setlength{\parskip}{\@metropolis@parskip} + \vspace*{1ex} + \begin{beamercolorbox}[% + ht=2.4ex, + dp=1ex, + leftskip=\@metropolis@blockskip, + rightskip=\@metropolis@blockskip]{block title alerted} + \usebeamerfont*{block title alerted}\insertblocktitle% + \end{beamercolorbox}% + \vspace*{-1pt} + \usebeamerfont{block body alerted}% + \begin{beamercolorbox}[% + dp=1ex, + leftskip=\@metropolis@blockskip, + rightskip=\@metropolis@blockskip, + vmode]{block body alerted}% +} +\setbeamertemplate{block alerted end}{% + \end{beamercolorbox} + \vspace*{0.2ex} +} +\setbeamertemplate{block example begin}{% + \setlength{\parskip}{\@metropolis@parskip} + \vspace*{1ex} + \begin{beamercolorbox}[% + ht=2.4ex, + dp=1ex, + leftskip=\@metropolis@blockskip, + rightskip=\@metropolis@blockskip]{block title example} + \usebeamerfont*{block title example}\insertblocktitle% + \end{beamercolorbox}% + \vspace*{-1pt} + \usebeamerfont{block body example}% + \begin{beamercolorbox}[% + dp=1ex, + leftskip=\@metropolis@blockskip, + rightskip=\@metropolis@blockskip, + vmode]{block body example}% +} +\setbeamertemplate{block example end}{% + \end{beamercolorbox} + \vspace*{0.2ex} +} +\setbeamertemplate{itemize items}{\textbullet} +\setbeamertemplate{caption label separator}{: } +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{footnote}{% + \parindent 0em\noindent% + \raggedright + \usebeamercolor{footnote}\hbox to 0.8em{\hfil\insertfootnotemark}\insertfootnotetext\par% +} +\newlength{\@metropolis@parskip} +\setlength{\@metropolis@parskip}{0.5em} +\setlength{\parskip}{\@metropolis@parskip} +\linespread{1.15} +\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% + \def\beamer@initfirstlineunskip{}% +} +\@metropolis@inner@setdefaults +\ProcessPgfPackageOptions{/metropolis/inner} +\endinput +%% +%% End of file `beamerinnerthememetropolis.sty'. diff --git a/beamerouterthememetropolis.sty b/beamerouterthememetropolis.sty new file mode 100644 index 0000000..5115715 --- /dev/null +++ b/beamerouterthememetropolis.sty @@ -0,0 +1,158 @@ +%% +%% This is file `beamerouterthememetropolis.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% beamerouterthememetropolis.dtx (with options: `package') +%% --------------------------------------------------------------------------- +%% Copyright 2015 Matthias Vogelgesang and the LaTeX community. A full list of +%% contributors can be found at +%% +%% https://github.com/matze/mtheme/graphs/contributors +%% +%% and the original template was based on the HSRM theme by Benjamin Weiss. +%% +%% This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 +%% International License (https://creativecommons.org/licenses/by-sa/4.0/). +%% --------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{beamerouterthememetropolis}[2015/12/04 Metropolis outer theme] +\RequirePackage{etoolbox} +\RequirePackage{calc} +\RequirePackage{pgfopts} +\pgfkeys{ + /metropolis/outer/numbering/.cd, + .is choice, + none/.code=\setbeamertemplate{frame numbering}[none], + counter/.code=\setbeamertemplate{frame numbering}[counter], + fraction/.code=\setbeamertemplate{frame numbering}[fraction], +} +\pgfkeys{ + /metropolis/outer/progressbar/.cd, + .is choice, + none/.code={% + \setbeamertemplate{headline}[plain] + \setbeamertemplate{frametitle}[plain] + \setbeamertemplate{footline}[plain] + }, + head/.code={\pgfkeys{/metropolis/outer/progressbar=none} + \addtobeamertemplate{headline}{}{% + \usebeamertemplate*{progress bar in head/foot} + } + }, + frametitle/.code={\pgfkeys{/metropolis/outer/progressbar=none} + \addtobeamertemplate{frametitle}{}{% + \usebeamertemplate*{progress bar in head/foot} + } + }, + foot/.code={\pgfkeys{/metropolis/outer/progressbar=none} + \addtobeamertemplate{footline}{}{% + \usebeamertemplate*{progress bar in head/foot}% + } + }, +} +\pgfkeys{ + /metropolis/outer/titleformat frame/.cd, + .is choice, + regular/.code={% + \let\@metropolis@frametitleformat\@empty% + \setbeamerfont{frametitle}{shape=\normalfont}% + \renewcommand{\@metropolis@frametitlestrut}{% + \vphantom{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz}% + } + }, + smallcaps/.code={% + \let\@metropolis@frametitleformat\@empty% + \setbeamerfont{frametitle}{shape=\scshape}% + \renewcommand{\@metropolis@frametitlestrut}{% + \vphantom{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz}% + } + }, + allsmallcaps/.code={% + \let\@metropolis@frametitleformat\MakeLowercase% + \setbeamerfont{frametitle}{shape=\scshape}% + \renewcommand{\@metropolis@frametitlestrut}{% + \vphantom{abcdefghijklmnopqrstuvwxyz}% + } + \PackageWarning{beamerthememetropolis}{% + Be aware that titleformat frame=allsmallcaps can lead to problems% + } + }, + allcaps/.code={% + \let\@metropolis@frametitleformat\MakeUppercase% + \setbeamerfont{frametitle}{shape=\normalfont} + \renewcommand{\@metropolis@frametitlestrut}{% + \vphantom{ABCDEFGHIJKLMNOPQRSTUVWXYZ}% + } + \PackageWarning{beamerthememetropolis}{% + Be aware that titleformat frame=allcaps can lead to problems% + } + }, +} +\newcommand{\@metropolis@outer@setdefaults}{ + \pgfkeys{/metropolis/outer/.cd, + numbering=counter, + progressbar=none, + titleformat frame=regular, + } +} +\setbeamertemplate{navigation symbols}{} +\defbeamertemplate{frame numbering}{none}{} +\defbeamertemplate{frame numbering}{counter}{\insertframenumber} +\defbeamertemplate{frame numbering}{fraction}{ + \insertframenumber/\inserttotalframenumber +} +\defbeamertemplate{headline}{plain}{} +\defbeamertemplate{footline}{plain}{% + \begin{beamercolorbox}[wd=\textwidth, sep=3ex]{footline}% + \hfill% + \usebeamerfont{page number in head/foot}% + \usebeamertemplate*{frame numbering} + \end{beamercolorbox}% +} +\def\@metropolis@frametitleformat#1{#1} +\patchcmd{\beamer@@frametitle} + {\beamer@ifempty{#2}{}{% + \gdef\insertframetitle{{#2\ifnum\beamer@autobreakcount>0\relax{}\space% + \usebeamertemplate*{frametitle continuation}\fi}}% + \gdef\beamer@frametitle{#2}% + \gdef\beamer@shortframetitle{#1}% + }} + {\beamer@ifempty{#2}{}{% + \gdef\insertframetitle{{\@metropolis@frametitleformat{#2}\ifnum% + \beamer@autobreakcount>0\relax{}\space% + \usebeamertemplate*{frametitle continuation}\fi}}% + \gdef\beamer@frametitle{#2}% + \gdef\beamer@shortframetitle{#1}% + }} + {} + {\PackageError{beamerouterthememetropolis}{Patching frame title failed}} +\newlength{\@metropolis@frametitlestrut} +\defbeamertemplate{frametitle}{plain}{% + \nointerlineskip% + \begin{beamercolorbox}[% + wd=\paperwidth,% + sep=1.5ex,% + ]{frametitle}% + \@metropolis@frametitlestrut\insertframetitle\@metropolis@frametitlestrut% + \end{beamercolorbox}% +} +\newlength{\metropolis@progressinheadfoot} +\setbeamertemplate{progress bar in head/foot}{ + \nointerlineskip + \setlength{\metropolis@progressinheadfoot}{% + \paperwidth * \ratio{\insertframenumber pt}{\inserttotalframenumber pt}% + }% + \begin{beamercolorbox}[wd=\paperwidth]{progress bar in head/foot} + \begin{tikzpicture} + \draw[bg, fill=bg] (0,0) rectangle (\paperwidth, 0.4pt); + \draw[fg, fill=fg] (0,0) rectangle (\metropolis@progressinheadfoot, 0.4pt); + \end{tikzpicture}% + \end{beamercolorbox} +} +\@metropolis@outer@setdefaults +\ProcessPgfPackageOptions{/metropolis/outer} +\endinput +%% +%% End of file `beamerouterthememetropolis.sty'. diff --git a/beamerthememetropolis.sty b/beamerthememetropolis.sty new file mode 100644 index 0000000..b5bfd43 --- /dev/null +++ b/beamerthememetropolis.sty @@ -0,0 +1,113 @@ +%% +%% This is file `beamerthememetropolis.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% beamerthememetropolis.dtx (with options: `package') +%% --------------------------------------------------------------------------- +%% Copyright 2015 Matthias Vogelgesang and the LaTeX community. A full list of +%% contributors can be found at +%% +%% https://github.com/matze/mtheme/graphs/contributors +%% +%% and the original template was based on the HSRM theme by Benjamin Weiss. +%% +%% This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 +%% International License (https://creativecommons.org/licenses/by-sa/4.0/). +%% --------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{beamerthememetropolis}[2015/12/04 Metropolis Beamer theme] +\RequirePackage{etoolbox} +\RequirePackage{pgfopts} +\newcommand{\metroset}[1]{\pgfkeys{/metropolis/.cd,#1}} +\pgfkeys{/metropolis/.cd, + .search also={ + /metropolis/inner, + /metropolis/outer, + /metropolis/color, + }, + block/.code=\pgfkeysalso{ + inner/block=#1, + color/block=#1, + }, +} +\pgfkeys{ + /metropolis/titleformat plain/.cd, + .is choice, + regular/.code={% + \let\@metropolis@plaintitleformat\@empty% + \setbeamerfont{plain title}{shape=\normalfont}% + }, + smallcaps/.code={% + \let\@metropolis@plaintitleformat\@empty% + \setbeamerfont{plain title}{shape=\scshape}% + }, + allsmallcaps/.code={% + \let\@metropolis@plaintitleformat\MakeLowercase% + \setbeamerfont{plain title}{shape=\scshape}% + \PackageWarning{beamerthememetropolis}{% + Be aware that titleformat plain=allsmallcaps can lead to problems% + } + }, + allcaps/.code={% + \let\@metropolis@plaintitleformat\MakeUppercase% + \setbeamerfont{plain title}{shape=\normalfont}% + \PackageWarning{beamerthememetropolis}{% + Be aware that titleformat plain=allcaps can lead to problems% + } + }, +} +\pgfkeys{ + /metropolis/titleformat/.code=\pgfkeysalso{ + inner/titleformat title=#1, + inner/titleformat subtitle=#1, + inner/titleformat section=#1, + outer/titleformat frame=#1, + titleformat plain=#1, + } +} +\pgfkeys{/metropolis/.cd, + usetitleprogressbar/.code=\pgfkeysalso{outer/progressbar=frametitle}, + noslidenumbers/.code=\pgfkeysalso{outer/numbering=none}, + usetotalslideindicator/.code=\pgfkeysalso{outer/numbering=fraction}, + nosectionslide/.code=\pgfkeysalso{inner/sectionpage=none}, + darkcolors/.code=\pgfkeysalso{color/background=dark}, + blockbg/.code=\pgfkeysalso{color/block=fill, inner/block=fill}, +} +\newcommand{\@metropolis@setdefaults}{ + \pgfkeys{/metropolis/.cd, + titleformat plain=regular, + } +} +\useinnertheme{metropolis} +\useoutertheme{metropolis} +\usecolortheme{metropolis} +\usefonttheme{metropolis} +\AtEndPreamble{% + \@ifpackageloaded{pgfplots}{% + \RequirePackage{pgfplotsthemetol} + }{} +} +\def\@metropolis@plaintitleformat#1{#1} +\newcommand{\plain}[2][]{% + \begingroup + \setbeamercolor{background canvas}{ + use=palette primary, + parent=palette primary + } + \begin{frame}[c]{#1} + \begin{center} + \usebeamercolor[fg]{palette primary} + \usebeamerfont{plain title} + \@metropolis@plaintitleformat{#2} + \end{center} + \end{frame} + \endgroup +} +\newcommand{\mreducelistspacing}{\vspace{-\topsep}} +\@metropolis@setdefaults +\ProcessPgfOptions{/metropolis} +\endinput +%% +%% End of file `beamerthememetropolis.sty'. diff --git a/head.tex b/head.tex new file mode 100644 index 0000000..f2a55d7 --- /dev/null +++ b/head.tex @@ -0,0 +1,86 @@ +\documentclass[ignorenonframetext,aspectratio=169]{beamer} +\usetheme{metropolis} +\usepackage{color} +\usepackage{fancyvrb} +\newcommand{\VerbBar}{|} +\newcommand{\VERB}{\Verb[commandchars=\\\{\}]} +\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} +% Add ',fontsize=\small' for more characters per line +\newenvironment{Shaded}{}{} +\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} +\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} +\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} +\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} +\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} +\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{{#1}}} +\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} +\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} +\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} +\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} +\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{{#1}}} +\newcommand{\ImportTok}[1]{{#1}} +\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} +\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{{#1}}}} +\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} +\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} +\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} +\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} +\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{{#1}}} +\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} +\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{{#1}}} +\newcommand{\BuiltInTok}[1]{{#1}} +\newcommand{\ExtensionTok}[1]{{#1}} +\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{{#1}}} +\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{{#1}}} +\newcommand{\RegionMarkerTok}[1]{{#1}} +\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} +\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} +\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} +\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} +\newcommand{\NormalTok}[1]{{#1}} + +%\makeatletter +%\def\ScaleIfNeeded{% +% \ifdim\Gin@nat@width>\linewidth +% \linewidth +% \else +% \Gin@nat@width +% \fi} +%\makeatother +%\setkeys{Gin}{width=\ScaleIfNeeded} + +\makeatletter +\def\ScaleIfNeededW{% + \ifdim\Gin@nat@width>\linewidth + \linewidth + \else + \Gin@nat@width + \fi +} +\def\ScaleIfNeededH{% + \ifdim\Gin@nat@height>0.7\textheight + 0.7\textheight + \else + \Gin@nat@height + \fi +} +\makeatother +\setkeys{Gin}{width=\ScaleIfNeededW,height=\ScaleIfNeededH,keepaspectratio} + +\providecommand{\tightlist}{% +\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +\setcounter{secnumdepth}{0} + +\title{Intro to Types} +\subtitle{What they are and what they're for} +\author{Levi Pearson} +\date{} + +\begin{document} +\frame{\titlepage} + +\mode +\include{body} +\mode* + +\end{document} diff --git a/pgfplotsthemetol.sty b/pgfplotsthemetol.sty new file mode 100644 index 0000000..05f4383 --- /dev/null +++ b/pgfplotsthemetol.sty @@ -0,0 +1,123 @@ +%% +%% This is file `pgfplotsthemetol.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% pgfplotsthemetol.dtx (with options: `package') +%% --------------------------------------------------------------------------- +%% Copyright 2015 Matthias Vogelgesang and the LaTeX community. A full list of +%% contributors can be found at +%% +%% https://github.com/matze/mtheme/graphs/contributors +%% +%% and the original template was based on the HSRM theme by Benjamin Weiss. +%% +%% This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 +%% International License (https://creativecommons.org/licenses/by-sa/4.0/). +%% --------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{pgfplotsthemetol} + [2015/06/16 PGFplots colors based on Paul Tol's SRON technical note] +\definecolor{TolDarkPurple}{HTML}{332288} +\definecolor{TolDarkBlue}{HTML}{6699CC} +\definecolor{TolLightBlue}{HTML}{88CCEE} +\definecolor{TolLightGreen}{HTML}{44AA99} +\definecolor{TolDarkGreen}{HTML}{117733} +\definecolor{TolDarkBrown}{HTML}{999933} +\definecolor{TolLightBrown}{HTML}{DDCC77} +\definecolor{TolDarkRed}{HTML}{661100} +\definecolor{TolLightRed}{HTML}{CC6677} +\definecolor{TolLightPink}{HTML}{AA4466} +\definecolor{TolDarkPink}{HTML}{882255} +\definecolor{TolLightPurple}{HTML}{AA4499} +\pgfplotscreateplotcyclelist{mbarplot cycle}{% + {draw=TolDarkBlue, fill=TolDarkBlue!70}, + {draw=TolLightBrown, fill=TolLightBrown!70}, + {draw=TolLightGreen, fill=TolLightGreen!70}, + {draw=TolDarkPink, fill=TolDarkPink!70}, + {draw=TolDarkPurple, fill=TolDarkPurple!70}, + {draw=TolDarkRed, fill=TolDarkRed!70}, + {draw=TolDarkBrown, fill=TolDarkBrown!70}, + {draw=TolLightRed, fill=TolLightRed!70}, + {draw=TolLightPink, fill=TolLightPink!70}, + {draw=TolLightPurple, fill=TolLightPurple!70}, + {draw=TolLightBlue, fill=TolLightBlue!70}, + {draw=TolDarkGreen, fill=TolDarkGreen!70}, +} +\pgfplotscreateplotcyclelist{mlineplot cycle}{% + {TolDarkBlue, mark=*, mark size=1.5pt}, + {TolLightBrown, mark=square*, mark size=1.3pt}, + {TolLightGreen, mark=triangle*, mark size=1.5pt}, + {TolDarkBrown, mark=diamond*, mark size=1.5pt}, +} +\pgfplotsset{ + compat=1.9, + mlineplot/.style={ + mbaseplot, + xmajorgrids=true, + ymajorgrids=true, + major grid style={dotted}, + axis x line=bottom, + axis y line=left, + legend style={ + cells={anchor=west}, + draw=none + }, + cycle list name=mlineplot cycle, + }, + mbarplot base/.style={ + mbaseplot, + bar width=6pt, + axis y line*=none, + }, + mbarplot/.style={ + mbarplot base, + ybar, + xmajorgrids=false, + ymajorgrids=true, + area legend, + legend image code/.code={% + \draw[#1] (0cm,-0.1cm) rectangle (0.15cm,0.1cm); + }, + cycle list name=mbarplot cycle, + }, + horizontal mbarplot/.style={ + mbarplot base, + xmajorgrids=true, + ymajorgrids=false, + xbar stacked, + area legend, + legend image code/.code={% + \draw[#1] (0cm,-0.1cm) rectangle (0.15cm,0.1cm); + }, + cycle list name=mbarplot cycle, + }, + mbaseplot/.style={ + legend style={ + draw=none, + fill=none, + cells={anchor=west}, + }, + x tick label style={ + font=\footnotesize + }, + y tick label style={ + font=\footnotesize + }, + legend style={ + font=\footnotesize + }, + major grid style={ + dotted, + }, + axis x line*=bottom, + }, + disable thousands separator/.style={ + /pgf/number format/.cd, + 1000 sep={} + }, +} +\endinput +%% +%% End of file `pgfplotsthemetol.sty'.