Compare commits
6 Commits
fe80d4c70e
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
1f69aa3114
|
|||
|
39ccb44a50
|
|||
|
962e609e5b
|
|||
|
ee33d1aed6
|
|||
|
a8118b5aea
|
|||
|
8104be2a45
|
5
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
.vscode
|
*.md.pdf
|
||||||
build/
|
out
|
||||||
|
Lab1CourseworkAAR.pdf
|
||||||
|
|||||||
14
Makefile
@@ -1,11 +1,19 @@
|
|||||||
CFLAGS=-lm
|
CFLAGS=-lm
|
||||||
|
OUTDIR=out
|
||||||
|
|
||||||
|
|
||||||
build:
|
build: out Lab1CourseworkAAR.pdf
|
||||||
zip Lab1PrepAAR.zip *.c *.ino *.pdf *.png
|
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:
|
%.c:
|
||||||
$(CC) $(CFLAGS) -c $< -o $*
|
$(CC) $(CFLAGS) -c $< -o $*
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f Lab1PrepAAR.zip TestEncoderAAR TwoSensorsAAR
|
rm -rf TestEncoderAAR TwoSensorsAAR Lab1CourseworkAAR.pdf $(OUTDIR)
|
||||||
|
|||||||
@@ -32,9 +32,9 @@ void loop()
|
|||||||
/* Put your code here to read ADCs and convert ADC voltages to
|
/* Put your code here to read ADCs and convert ADC voltages to
|
||||||
temperatures */
|
temperatures */
|
||||||
thermistor_val = analogRead(ThermistorPin);
|
thermistor_val = analogRead(ThermistorPin);
|
||||||
thermocouple_val = analogRead(TCpin)
|
thermocouple_val = analogRead(TCpin);
|
||||||
// Calculate thermistor temperature in degrees C ( Part b, i,ii,iii & v)
|
// Calculate thermistor temperature in degrees C ( Part b, i,ii,iii & v)
|
||||||
thermistor_temp = kelvin_to_c(resistance_to_temperature(voltage_to_thermistor_resistance(adc_to_voltage(thermistor_val))));
|
thermistor_temp = kelvin_to_c(resistance_to_thermistor_temperature(voltage_to_thermistor_resistance(adc_to_voltage(thermistor_val))));
|
||||||
|
|
||||||
// Calculate thermocouple temperature in degrees C ( Part c, i - iv)
|
// Calculate thermocouple temperature in degrees C ( Part c, i - iv)
|
||||||
e_rc = 1000*voltage_to_erc(adc_to_voltage(thermocouple_val)); // convert to millivolts
|
e_rc = 1000*voltage_to_erc(adc_to_voltage(thermocouple_val)); // convert to millivolts
|
||||||
|
|||||||
BIN
images/IMG_5048.heic
Normal file
BIN
images/IMG_5055.jpg
Normal file
|
After Width: | Height: | Size: 3.1 MiB |
BIN
images/IMG_5062.HEIC.jpg
Normal file
|
After Width: | Height: | Size: 2.6 MiB |
BIN
images/IMG_5063.HEIC.jpg
Normal file
|
After Width: | Height: | Size: 3.1 MiB |
BIN
images/IMG_5064.HEIC.jpg
Normal file
|
After Width: | Height: | Size: 2.7 MiB |
BIN
images/IMG_5065.HEIC.jpg
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
images/IMG_5066.HEIC.jpg
Normal file
|
After Width: | Height: | Size: 3.0 MiB |
BIN
images/IMG_5067.HEIC.jpg
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
images/IMG_5069.HEIC.jpg
Normal file
|
After Width: | Height: | Size: 3.1 MiB |
BIN
images/IMG_5070.HEIC.jpg
Normal file
|
After Width: | Height: | Size: 3.1 MiB |
BIN
images/IMG_5073.HEIC.jpg
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
images/IMG_5074.HEIC.jpg
Normal file
|
After Width: | Height: | Size: 3.0 MiB |
BIN
images/ex2--50.jpg
Normal file
|
After Width: | Height: | Size: 3.0 MiB |
BIN
images/ex2-10.jpg
Normal file
|
After Width: | Height: | Size: 775 KiB |
BIN
images/ex2-100.jpg
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
BIN
images/ex2-25.jpg
Normal file
|
After Width: | Height: | Size: 1018 KiB |
BIN
images/ex2-50.jpg
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
images/ex2-75.jpg
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
BIN
images/ex2-90.jpg
Normal file
|
After Width: | Height: | Size: 2.8 MiB |
BIN
images/ex2b-100.jpg
Normal file
|
After Width: | Height: | Size: 3.0 MiB |
BIN
images/h-bridge.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
images/pwm_frequency.jpg
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
images/pwm_on_off.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
240
images/pwm_on_off.svg
Normal file
|
After Width: | Height: | Size: 7.2 MiB |
BIN
images/q4+.jpg
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
images/q4-.jpg
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
17
readme.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# MMME3085 Lab 1
|
||||||
|
|
||||||
|
## Prep
|
||||||
|
|
||||||
|
### Feedback
|
||||||
|
|
||||||
|
Marks: 100%
|
||||||
|
|
||||||
|
[Feedback sheet](./res/prep-feedback.pdf)
|
||||||
|
|
||||||
|
## Post Lab Coursework
|
||||||
|
|
||||||
|
View [lab coursework report](./report.md).
|
||||||
|
|
||||||
|
Questions stated in [lab procedure sheet](./res/Lab 1 - Sensors and Encoder - Procedure Sheet and Coursework.pdf).
|
||||||
|
|
||||||
|
Marks and feedback pending.
|
||||||
87
report.md
Executable file
@@ -0,0 +1,87 @@
|
|||||||
|
---
|
||||||
|
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
|
||||||
|
(the entire region is the ON region, hence it is not underlined in the figures)
|
||||||
|
- 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.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
## Question 3
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- The difference between the ON+ and ON- in the figure above 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 (see figure below)
|
||||||
|
|
||||||
|
{ height=2in }
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
## Question 4
|
||||||
|
|
||||||
|
{ height=2in }
|
||||||
|
|
||||||
|
{ 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 (<https://playground.arduino.cc/Main/TimerPWMCheatsheet/>)
|
||||||
BIN
res/prep-feedback.pdf
Normal file
557
template.tex
Normal file
@@ -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}
|
||||||