\documentclass[letterpaper, 10pt, twoside]{article}

% Packages without options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{lipsum}
\usepackage{verbatim}  % Better code blocks
\usepackage{fancyvrb}  % Even better code blocks
\usepackage{fvextra}   % Even more better code blocks
\usepackage{enumitem}  % Control spacing inside list environments
\usepackage{microtype}
\usepackage{wrapfig}   % Allows us to use \wrapfigure command
\usepackage{adjustbox} % Adjust padding inside \minipage environment
\usepackage{tikz}

% Packages with options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\usepackage{multicol}
 \setlength\columnsep{25pt}
\usepackage{fancyhdr}
\pagestyle{fancy}
 \fancyhf{} % Clear existing header/footer entries
 \fancyhead[LE, RO]{\thepage} % Page number is always on the outside
 \fancyhead[CE, CO]{Notes on Python} % Title is always in the middle
 \fancyhfoffset[LE,RO]{0in} % Adjust header and footer width to match text width
% \cfoot{Page \thepage}
% \renewcommand{\footrulewidth}{0.5pt}
 \renewcommand{\headrulewidth}{0.5pt}

\usepackage{geometry}
\geometry{
 bmargin=0.75in, % bottom margin
 tmargin=1in,    % top margin
 hmargin=0.75in, % horizontal margin
 bindingoffset=0.25in
}

\usepackage[nottoc,numbib]{tocbibind} % Add references to TOC

\usepackage[hidelinks]{hyperref} % Include URLs

% My macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Make a nice border and box for the tops of our examples
\newcommand\klab[3]{\vspace{#1}\noindent{}\hrulefill~~\fbox{\texttt{~#2~}}~~\hrulefill\vspace{#3}}

% Add an \hrule with space above and below
\newcommand\krule[2]{\vspace{#1}\hrule\vspace{#2}}

% Make hrefs easier (must load package hyperref}
\newcommand\kref[2]{\href{#1}{{\texttt{#2}}}}

% Make some call outs
\newcommand\kpull[2]{
\setlength{\intextsep}{5.0pt plus 2.0pt minus 2.0pt}%
\setlength{\columnsep}{10pt}
\begin{wrapfigure}[]{r}[8pt]{0pt}
	\fbox{
	\adjustbox{padding*=0pt 2pt 0pt 1pt}{
	\begin{minipage}{#2}  % This is the width of the call out
	\begin{small}
	\begin{flushleft}
		{#1}              % This is the contents of the call out
	\end{flushleft}
	\end{small}
	\end{minipage}
	} % End adjustbox
	} % End fbox
\end{wrapfigure}
}
% And make them work nicely with out multicol environment
% Not quite sure if commented lines are needed. More testing is required.
%\def\ksep{25pt}
\newcommand\kcolb{
%	\setlength{\columnsep}{\ksep}
	\begin{multicols}{2}
}
\newcommand\kcole{
	\end{multicols}
}

% Add an indent to bibliography items
% This is a bit of a kludge, but it works. Look for a best practice to replace this.
\newcommand\kbib{
	\begin{tikzpicture} \draw [white, line width=6] (0,0) -- (0.1,0); \end{tikzpicture}
}

% Make a Python Symbol like a LaTeX symbol
\newcommand\kpy{P{\scriptsize \raisebox{-0.4em}{\hspace{-0.16em}Y}}T{\scriptsize \raisebox{-0.2em}{h}}\hspace{-0.1em}\raisebox{0.4em}{o}\hspace{0.05em}\raisebox{-0.2em}N}

% Additional options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\raggedbottom

% Title info %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{\textbf{Notes on Python}}
\author{Kenneth John Odle\\ {\small \texttt{ken at kjodle dot net}}}
\date{2023\\ \medskip v. 0.0.1}

% Notes to self %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Make sure that \section{} is OUTside the multicols environment
% Make sure that \subsection{} is INside the multilcols environment
% If needed, add \newpage before a \section if the placement of the heading is weird

\begin{document}

\maketitle

\begin{abstract}
	This document consists of notes on Python, gleaned from various sources. A list of references (often with commentary) follows. 
	
	The latest version of this document can be found at \kref{https://git.kjodle.net/kjodle/Notes-on-Python}{https://git.kjodle.net/kjodle/Notes-\\on-Python}.
\end{abstract}

\tableofcontents

\newpage

\section{Preliminaries}

\kcolb

\subsection{What is Python?}


\subsection{Why use Python?}

Many fields depend on \kpy\footnote{This is my attempt to produce a text symbol for Python, similar to \LaTeX{}. My thought is that it looks like a snake wriggling back and forth. Your mileage, of course, may (and probably will) vary.} to process data. 

Mueller\cite{mueller:jp23} has many reasons why a knowledge of Python may be useful in a career search.

\subsection{IDEs and Python}

\kcole

\newpage
\section{Python Basics}

\kcolb

\subsection{Python Data Types}

\kcole

% References page begins below %%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newpage

\begin{thebibliography}{XX}

\kcolb

\bibitem{mueller:jp23}
 Mueller, John Paul.
 \textit{Beginning Programming with Python for Dummies}.
 John Wiley \& Sons Inc. (United States: New Jersey: Hoboken). 
 3rd Edition,
 2023.\\
 \kbib{}This book \textit{heavily} emphasizes the use of Google Colab. It's basically an advertisement for the $\Gamma$oogle and \textit{highly} disappointing. Python is meant to be fairly universal and this book's approach seems to work counter to that intention.

\bibitem{pythonorg:main}
 python.org.
 ``Python for Beginners'',\\
 \kref{https://www.python.org/about/gettingstarted/}{https://www.python.org/about/\\gettingstarted/}\\
 \kbib The official site of the Python Software Foundation.

\kcole

\end{thebibliography}

\end{document}