diff --git a/.gitignore b/.gitignore index 474e379..208ba5b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ -.vscode -build/ \ No newline at end of file +*.md.pdf +out +Lab1CourseworkAAR.pdf diff --git a/Makefile b/Makefile index fcd6f8b..67c0bef 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,19 @@ CFLAGS=-lm +OUTDIR=out -build: - zip Lab1PrepAAR.zip *.c *.ino *.pdf *.png +build: out Lab1CourseworkAAR.pdf + zip $(OUTDIR)/Lab1PrepAAR.zip *.c *.ino *.pdf *.png + zip $(OUTDIR)/Lab1AAR.zip *AAR* Lab1Coursework.pdf + +$(OUTDIR): + mkdir -p $(OUTDIR) + +Lab1CourseworkAAR.pdf: + pandoc report.md -o $@ --template=template.tex %.c: $(CC) $(CFLAGS) -c $< -o $* clean: - rm -f Lab1PrepAAR.zip TestEncoderAAR TwoSensorsAAR + rm -rf TestEncoderAAR TwoSensorsAAR Lab1CourseworkAAR.pdf $(OUTDIR) diff --git a/images/IMG_5048.heic b/images/IMG_5048.heic new file mode 100644 index 0000000..11992c9 Binary files /dev/null and b/images/IMG_5048.heic differ diff --git a/images/IMG_5055.jpg b/images/IMG_5055.jpg new file mode 100644 index 0000000..1ce322f Binary files /dev/null and b/images/IMG_5055.jpg differ diff --git a/images/IMG_5062.HEIC.jpg b/images/IMG_5062.HEIC.jpg new file mode 100644 index 0000000..afd63c0 Binary files /dev/null and b/images/IMG_5062.HEIC.jpg differ diff --git a/images/IMG_5063.HEIC.jpg b/images/IMG_5063.HEIC.jpg new file mode 100644 index 0000000..a04dade Binary files /dev/null and b/images/IMG_5063.HEIC.jpg differ diff --git a/images/IMG_5064.HEIC.jpg b/images/IMG_5064.HEIC.jpg new file mode 100644 index 0000000..bc33462 Binary files /dev/null and b/images/IMG_5064.HEIC.jpg differ diff --git a/images/IMG_5065.HEIC.jpg b/images/IMG_5065.HEIC.jpg new file mode 100644 index 0000000..242e5d8 Binary files /dev/null and b/images/IMG_5065.HEIC.jpg differ diff --git a/images/IMG_5066.HEIC.jpg b/images/IMG_5066.HEIC.jpg new file mode 100644 index 0000000..0161916 Binary files /dev/null and b/images/IMG_5066.HEIC.jpg differ diff --git a/images/IMG_5067.HEIC.jpg b/images/IMG_5067.HEIC.jpg new file mode 100644 index 0000000..cbfb1a1 Binary files /dev/null and b/images/IMG_5067.HEIC.jpg differ diff --git a/images/IMG_5069.HEIC.jpg b/images/IMG_5069.HEIC.jpg new file mode 100644 index 0000000..c344072 Binary files /dev/null and b/images/IMG_5069.HEIC.jpg differ diff --git a/images/IMG_5070.HEIC.jpg b/images/IMG_5070.HEIC.jpg new file mode 100644 index 0000000..0cc9221 Binary files /dev/null and b/images/IMG_5070.HEIC.jpg differ diff --git a/images/IMG_5073.HEIC.jpg b/images/IMG_5073.HEIC.jpg new file mode 100644 index 0000000..9aa0087 Binary files /dev/null and b/images/IMG_5073.HEIC.jpg differ diff --git a/images/IMG_5074.HEIC.jpg b/images/IMG_5074.HEIC.jpg new file mode 100644 index 0000000..a15258b Binary files /dev/null and b/images/IMG_5074.HEIC.jpg differ diff --git a/images/ex2--50.jpg b/images/ex2--50.jpg new file mode 100644 index 0000000..c2fbd63 Binary files /dev/null and b/images/ex2--50.jpg differ diff --git a/images/ex2-10.jpg b/images/ex2-10.jpg new file mode 100644 index 0000000..7f3d8bd Binary files /dev/null and b/images/ex2-10.jpg differ diff --git a/images/ex2-100.jpg b/images/ex2-100.jpg new file mode 100644 index 0000000..bed8362 Binary files /dev/null and b/images/ex2-100.jpg differ diff --git a/images/ex2-25.jpg b/images/ex2-25.jpg new file mode 100644 index 0000000..03fbc98 Binary files /dev/null and b/images/ex2-25.jpg differ diff --git a/images/ex2-50.jpg b/images/ex2-50.jpg new file mode 100644 index 0000000..dc460c7 Binary files /dev/null and b/images/ex2-50.jpg differ diff --git a/images/ex2-75.jpg b/images/ex2-75.jpg new file mode 100644 index 0000000..42fab7a Binary files /dev/null and b/images/ex2-75.jpg differ diff --git a/images/ex2-90.jpg b/images/ex2-90.jpg new file mode 100644 index 0000000..8794c28 Binary files /dev/null and b/images/ex2-90.jpg differ diff --git a/images/ex2b-100.jpg b/images/ex2b-100.jpg new file mode 100644 index 0000000..7f2395b Binary files /dev/null and b/images/ex2b-100.jpg differ diff --git a/images/h-bridge.png b/images/h-bridge.png new file mode 100644 index 0000000..2ef602d Binary files /dev/null and b/images/h-bridge.png differ diff --git a/images/pwm_frequency.jpg b/images/pwm_frequency.jpg new file mode 100644 index 0000000..5d6fb4a Binary files /dev/null and b/images/pwm_frequency.jpg differ diff --git a/images/pwm_on_off.png b/images/pwm_on_off.png new file mode 100644 index 0000000..64200d2 Binary files /dev/null and b/images/pwm_on_off.png differ diff --git a/images/q4+.jpg b/images/q4+.jpg new file mode 100644 index 0000000..63c69ef Binary files /dev/null and b/images/q4+.jpg differ diff --git a/images/q4-.jpg b/images/q4-.jpg new file mode 100644 index 0000000..15e5ae6 Binary files /dev/null and b/images/q4-.jpg differ diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..d6b133f --- /dev/null +++ b/readme.md @@ -0,0 +1,9 @@ +# MMME3085 Lab 1 + +## Prep + +### Feedback + +Marks: 100% + +[Feedback sheet](./res/prep-feedback.pdf) diff --git a/report.md b/report.md new file mode 100755 index 0000000..8230d1c --- /dev/null +++ b/report.md @@ -0,0 +1,84 @@ +--- +author: Akbar Rahman (20386125) +date: \today +title: MMME3085---Lab 1 Coursework +tags: [ mmme3085 ] +uuid: 864e5249-a02c-4896-b274-a0a76789955c +--- + +\maketitle +\newpage + +# Questions + +## Question 1 + +- $V_{ref} = 5$ V when converting the ADC-converted value because the ADC in the Arduino can read + from 0 V to 5 V, therefore $n_{ADC} = 0$ means the voltage to the pin is 0 V, and $n_{ADC} = 1023$ + means the voltage to the pin is 5 V +- This is not the optimum use of the ADC pin as it means the resolution of the voltage measurement + is less precise than it could be (roughly a resolution of 5 mV instead of 3 mV) +- The resolution could be increased by using an op-amp amplification circuit or a 3.3 V to 5 V level + converter circuit + +\newpage + +## Question 2 + +- 100 % duty cycle PWM is different from all the others as it is not a wave, but just a DC voltage +- Voltage is not zero in the OFF region because the rotational inertia is still spinning the motor, + which creates a back EMF, and that is the voltage being read in the OFF region. + Back EMF is proportional to the speed of the motor, which is why the voltage in the off region is + higher when the PWM duty cycle, and therefore speed of the motor, is higher. + +![PWM waveform at various duty cycles, labelled where the signal is on (green line) and off (red line)](./images/pwm_on_off.png) + +\newpage + +## Question 3 + +- The difference between the ON+ and ON- is that the current will go in opposite directions, + resulting in the motor spinning in opposite directions +- The default PWM frequency of pin 13 on the Arduino Mega 2560 is 976.5625 Hz [^1] +- The audible frequency we hear is a ~1000 Hz square wave, which can be seen by the fact the period of + the wave in figure below is roughly 1 millisecond + + ![PWM waveform at 977 Hz](./images/pwm_frequency.jpg) + +\newpage + +## Question 4 + +![Oscilloscope trace of quadrature signal in clockwise (positive) direction. The 0 V datum point is marked by the triangles on the left hand side of the screen.](./images/q4+.jpg){ height=2in } + +![Oscilloscope trace of quadrature signal in anti-clockwise (negative) direction. The 0 V datum point is marked by the triangles on the left hand side of the screen.](./images/q4-.jpg){ height=2in } + +\newpage + + +## Question 5 + +- Since the internal timer only looks at one edge of one pulse, it cannot be used to determine the + direction of the rotation, which is one of the reasons to use a quadrature in the first place +- Therefore it is a viable alternative if you only care about the speed of rotation and direction + is not important to the application + + +## Question 6 + +- The main shortcoming observed is that the Arduino appeared to freeze/crash when entering a PWM + duty cycle above ~20% +- When this issues occurs, the Arduino is too busy running the function called by interrupts + to be able to print to serial, hence appearing to have frozen/crashed +- This is due to the fact that at higher speeds, the `updateEncoderStateMachine()` function in + triggered by the digital pin interrupts (which take higher priority) so frequently that + the `loop()` function is not able to run, due to a lack of free CPU cycles, and therefore serial + outputs are not printed and inputs not read +- This effectively makes the counter useless as it cannot be read from as the Arduino is not able + to handle any other processing tasks +- Additionally, there is a good chance that the Arduino is not able to run all the calls to + `updateEncoderStateMachine` in real time, and so the value of `count` would be incorrect (of course + this does not matter since we do not have the CPU cycles to do anything with `count` anyway) + + +[^1]: `MotorEncoderAAR.ino` defines that pin 13 is used for PWM output. Pin 13 is connected to timer 0 which defaults to 976.5625 Hz () diff --git a/feedback.pdf b/res/prep-feedback.pdf similarity index 100% rename from feedback.pdf rename to res/prep-feedback.pdf diff --git a/template.tex b/template.tex new file mode 100644 index 0000000..16ea51e --- /dev/null +++ b/template.tex @@ -0,0 +1,557 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} +\PassOptionsToPackage{hyphens}{url} +$if(colorlinks)$ +\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor} +$endif$ +$if(CJKmainfont)$ +\PassOptionsToPackage{space}{xeCJK} +$endif$ +% +\documentclass[ +$if(fontsize)$ + $fontsize$, +$endif$ +$if(papersize)$ + $papersize$paper, +$endif$ +$if(beamer)$ + ignorenonframetext, +$if(handout)$ + handout, +$endif$ +$if(aspectratio)$ + aspectratio=$aspectratio$, +$endif$ +$endif$ +$for(classoption)$ + $classoption$$sep$, +$endfor$ +]{$documentclass$} +$if(beamer)$ +$if(background-image)$ +\usebackgroundtemplate{% + \includegraphics[width=\paperwidth]{$background-image$}% +} +$endif$ +\usepackage{pgfpages} +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{caption label separator}{: } +\setbeamercolor{caption name}{fg=normal text.fg} +\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ +$for(beameroption)$ +\setbeameroption{$beameroption$} +$endfor$ +% Prevent slide breaks in the middle of a paragraph +\widowpenalties 1 10000 +\raggedbottom +$if(section-titles)$ +\setbeamertemplate{part page}{ + \centering + \begin{beamercolorbox}[sep=16pt,center]{part title} + \usebeamerfont{part title}\insertpart\par + \end{beamercolorbox} +} +\setbeamertemplate{section page}{ + \centering + \begin{beamercolorbox}[sep=12pt,center]{part title} + \usebeamerfont{section title}\insertsection\par + \end{beamercolorbox} +} +\setbeamertemplate{subsection page}{ + \centering + \begin{beamercolorbox}[sep=8pt,center]{part title} + \usebeamerfont{subsection title}\insertsubsection\par + \end{beamercolorbox} +} +\AtBeginPart{ + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \frame{\subsectionpage} +} +$endif$ +$endif$ +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ +\usepackage{amsmath,amssymb} +$if(linestretch)$ +\usepackage{setspace} +$endif$ +\usepackage{iftex} +\ifPDFTeX + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex +$if(mathspec)$ + \ifXeTeX + \usepackage{mathspec} % this also loads fontspec + \else + \usepackage{unicode-math} % this also loads fontspec + \fi +$else$ + \usepackage{unicode-math} % this also loads fontspec +$endif$ + \defaultfontfeatures{Scale=MatchLowercase}$-- must come before Beamer theme + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +\fi +$if(fontfamily)$ +$else$ +$-- Set default font before Beamer theme so the theme can override it +\usepackage{lmodern} +$endif$ +$-- Set Beamer theme before user font settings so they can override theme +$if(beamer)$ +$if(theme)$ +\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} +$endif$ +$if(colortheme)$ +\usecolortheme{$colortheme$} +$endif$ +$if(fonttheme)$ +\usefonttheme{$fonttheme$} +$endif$ +$if(mainfont)$ +\usefonttheme{serif} % use mainfont rather than sansfont for slide text +$endif$ +$if(innertheme)$ +\useinnertheme{$innertheme$} +$endif$ +$if(outertheme)$ +\useoutertheme{$outertheme$} +$endif$ +$endif$ +$-- User font settings (must come after default font and Beamer theme) +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$endif$ +\ifPDFTeX\else + % xetex/luatex font selection +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} +$endif$ +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} +$endfor$ +$if(mathfont)$ +$if(mathspec)$ + \ifXeTeX + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifXeTeX + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifLuaTeX + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifLuaTeX + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(zero-width-non-joiner)$ +%% Support for zero-width non-joiner characters. +\makeatletter +\def\zerowidthnonjoiner{% + % Prevent ligatures and adjust kerning, but still support hyphenating. + \texorpdfstring{% + \TextOrMath{\nobreak\discretionary{-}{}{\kern.03em}% + \ifvmode\else\nobreak\hskip\z@skip\fi}{}% + }{}% +} +\makeatother +\ifPDFTeX + \DeclareUnicodeCharacter{200C}{\zerowidthnonjoiner} +\else + \catcode`^^^^200c=\active + \protected\def ^^^^200c{\zerowidthnonjoiner} +\fi +%% End of ZWNJ support +$endif$ +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage{xcolor} +$if(geometry)$ +$if(beamer)$ +\geometry{$for(geometry)$$geometry$$sep$,$endfor$} +$else$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$endif$ +$if(beamer)$ +\newif\ifbibliography +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +\lstset{defaultdialect=[5.3]Lua} +\lstset{defaultdialect=[x86masm]Assembler} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs,array} +$if(multirow)$ +\usepackage{multirow} +$endif$ +\usepackage{calc} % for calculating minipage widths +$if(beamer)$ +\usepackage{caption} +% Make caption package work with longtable +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$else$ +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +$endif$ +$endif$ +$if(graphics)$ +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother +$endif$ +$if(svg)$ +\usepackage{svg} +$endif$ +$if(strikeout)$ +$-- also used for underline +\usepackage{soul} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +$endif$ +$if(subfigure)$ +\usepackage{subcaption} +$endif$ +$if(beamer)$ +$else$ +$if(block-headings)$ +% Make \paragraph and \subparagraph free-standing +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ +$if(csl-refs)$ +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newlength{\csllabelwidth} +\setlength{\csllabelwidth}{3em} +\newlength{\cslentryspacingunit} % times entry-spacing +\setlength{\cslentryspacingunit}{\parskip} +\newenvironment{CSLReferences}[2] % #1 hanging-ident, #2 entry spacing + {% don't indent paragraphs + \setlength{\parindent}{0pt} + % turn on hanging indent if param 1 is 1 + \ifodd #1 + \let\oldpar\par + \def\par{\hangindent=\cslhangindent\oldpar} + \fi + % set entry spacing + \setlength{\parskip}{#2\cslentryspacingunit} + }% + {} +\usepackage{calc} +\newcommand{\CSLBlock}[1]{#1\hfill\break} +\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{#1}} +\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{#1}\break} +\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} +$endif$ +$if(lang)$ +\ifLuaTeX +\usepackage[bidi=basic]{babel} +\else +\usepackage[bidi=default]{babel} +\fi +$if(babel-lang)$ +\babelprovide[main,import]{$babel-lang$} +$if(mainfont)$ +\ifPDFTeX +\else +\babelfont[$babel-lang$]{rm}{$mainfont$} +\fi +$endif$ +$endif$ +$for(babel-otherlangs)$ +\babelprovide[import]{$babel-otherlangs$} +$endfor$ +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ +\ifLuaTeX + \usepackage{selnolig} % disable illegal ligatures +\fi +$if(dir)$ +\ifPDFTeX + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(nocite-ids)$ +\nocite{$for(nocite-ids)$$it$$sep$, $endfor$} +$endif$ +$if(csquotes)$ +\usepackage{csquotes} +$endif$ +\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\urlstyle{$if(urlstyle)$$urlstyle$$else$same$endif$} +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(verbatim-in-note)$ +\VerbatimFootnotes % allow verbatim text in footnotes +$endif$ +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(lang)$ + pdflang={$lang$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor={$if(linkcolor)$$linkcolor$$else$Maroon$endif$}, + filecolor={$if(filecolor)$$filecolor$$else$Maroon$endif$}, + citecolor={$if(citecolor)$$citecolor$$else$Blue$endif$}, + urlcolor={$if(urlcolor)$$urlcolor$$else$Blue$endif$}, +$else$ +$if(boxlinks)$ +$else$ + hidelinks, +$endif$ +$endif$ + pdfcreator={LaTeX via pandoc}} + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +$if(beamer)$ +$else$ +\usepackage{etoolbox} +\makeatletter +\providecommand{\subtitle}[1]{% add subtitle to \maketitle + \apptocmd{\@title}{\par {\large #1 \par}}{}{} +} +\makeatother +$endif$ +\subtitle{$subtitle$} +$endif$ +\author{$for(author)$$author$$sep$ \and $endfor$} +\date{$date$} +$if(beamer)$ +$if(institute)$ +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics{$titlegraphic$}} +$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ + +\begin{document} +$if(has-frontmatter)$ +\frontmatter +$endif$ +$if(title)$ +$if(beamer)$ +\frame{\titlepage} +$else$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +$if(toc-title)$ +\renewcommand*\contentsname{$toc-title$} +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks] +$if(toc-title)$ + \frametitle{$toc-title$} +$endif$ + \tableofcontents[hideallsubsections] +\end{frame} +$else$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(linestretch)$ +\setstretch{$linestretch$} +$endif$ +$if(has-frontmatter)$ +\mainmatter +$endif$ +$body$ + +$if(has-frontmatter)$ +\backmatter +$endif$ +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(has-chapters)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue +$endif$ + \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} +$if(beamer)$ +\end{frame} +$endif$ + +$endif$ +$endif$ +$if(biblatex)$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue + \printbibliography[heading=none] +\end{frame} +$else$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ +$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document}