mirror of
				https://github.com/Brandon-Rozek/website.git
				synced 2025-11-04 07:11:14 +00:00 
			
		
		
		
	New Post
This commit is contained in:
		
							parent
							
								
									f78540d68e
								
							
						
					
					
						commit
						e42ea0680e
					
				
					 2 changed files with 1344 additions and 0 deletions
				
			
		
							
								
								
									
										149
									
								
								content/blog/codeoutputlatex.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								content/blog/codeoutputlatex.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,149 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					title: "Code alongside Output in LaTex"
 | 
				
			||||||
 | 
					date: 2022-01-27T09:15:10-05:00
 | 
				
			||||||
 | 
					draft: false
 | 
				
			||||||
 | 
					tags: ["LaTex"]
 | 
				
			||||||
 | 
					math: false
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Working on a tool paper, I had the desire to share code alongside its output. With a combination of the `listings`, `caption`, and `color` packages, we can get a result that's nice looking.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The imports needed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```latex
 | 
				
			||||||
 | 
					\usepackage{color}
 | 
				
			||||||
 | 
					\usepackage{listings}
 | 
				
			||||||
 | 
					\usepackage{caption}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					I want a think topbar that labels which column is the code section and which column is the output section.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```latex
 | 
				
			||||||
 | 
					\DeclareCaptionFormat{listing}
 | 
				
			||||||
 | 
					    {\colorbox[cmyk]{0.73, 0.35, 0.15,.5}
 | 
				
			||||||
 | 
					    {\parbox{\textwidth}{#1#2#3}}}
 | 
				
			||||||
 | 
					\DeclareCaptionFont{white}{\color{white}}
 | 
				
			||||||
 | 
					\captionsetup[lstlisting]{
 | 
				
			||||||
 | 
					    format=listing,
 | 
				
			||||||
 | 
					    labelfont=white,
 | 
				
			||||||
 | 
					    textfont=white,
 | 
				
			||||||
 | 
					    font={bf,footnotesize}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Next I define some colors that I would like to use as the theme for the code output:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```latex
 | 
				
			||||||
 | 
					\definecolor{keyblue}{rgb}{0.1, 0.1, 0.6}
 | 
				
			||||||
 | 
					\definecolor{dkgreen}{rgb}{0,0.6,0}
 | 
				
			||||||
 | 
					\definecolor{gray}{rgb}{0.5,0.5,0.5}
 | 
				
			||||||
 | 
					\definecolor{stringcol}{rgb}{0.58,0.4,0.1}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Setup for the code output
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```latex
 | 
				
			||||||
 | 
					\lstset{
 | 
				
			||||||
 | 
					  language=Python,
 | 
				
			||||||
 | 
					  columns=flexible,
 | 
				
			||||||
 | 
					  basicstyle={\small\ttfamily},
 | 
				
			||||||
 | 
					  keywordstyle=\color{keyblue},
 | 
				
			||||||
 | 
					  commentstyle=\color{dkgreen},
 | 
				
			||||||
 | 
					  stringstyle=\color{stringcol},
 | 
				
			||||||
 | 
					  breaklines=true,
 | 
				
			||||||
 | 
					  breakatwhitespace=true,
 | 
				
			||||||
 | 
					  tabsize=4
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then inside the document, you can use `minipage` to setup a two column layout.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```latex
 | 
				
			||||||
 | 
					% Column 1: Code
 | 
				
			||||||
 | 
					\begin{minipage}[t]{.45\textwidth}
 | 
				
			||||||
 | 
					\begin{lstlisting}[title=Code]
 | 
				
			||||||
 | 
					def factorial(n):
 | 
				
			||||||
 | 
					    if n == 0:
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    return n * factorial(n - 1)
 | 
				
			||||||
 | 
					# Let's test it out!
 | 
				
			||||||
 | 
					print(factorial(5))
 | 
				
			||||||
 | 
					\end{lstlisting}
 | 
				
			||||||
 | 
					\end{minipage}
 | 
				
			||||||
 | 
					% Column 2: Output
 | 
				
			||||||
 | 
					\begin{minipage}[t]{.45\textwidth}
 | 
				
			||||||
 | 
					\begin{lstlisting}[title=Output]
 | 
				
			||||||
 | 
					    120
 | 
				
			||||||
 | 
					\end{lstlisting}
 | 
				
			||||||
 | 
					\end{minipage}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Below is all these steps combined into a compile-able LaTex file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```latex
 | 
				
			||||||
 | 
					\documentclass{article}
 | 
				
			||||||
 | 
					\usepackage[utf8]{inputenc}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					% Imports
 | 
				
			||||||
 | 
					\usepackage{color}
 | 
				
			||||||
 | 
					\usepackage{listings}
 | 
				
			||||||
 | 
					\usepackage{caption}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					% Define colors
 | 
				
			||||||
 | 
					\definecolor{keyblue}{rgb}{0.1, 0.1, 0.6}
 | 
				
			||||||
 | 
					\definecolor{dkgreen}{rgb}{0,0.6,0}
 | 
				
			||||||
 | 
					\definecolor{gray}{rgb}{0.5,0.5,0.5}
 | 
				
			||||||
 | 
					\definecolor{stringcol}{rgb}{0.58,0.4,0.1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					% Caption Setup
 | 
				
			||||||
 | 
					\DeclareCaptionFormat{listing}
 | 
				
			||||||
 | 
					    {\colorbox[cmyk]{0.73, 0.35, 0.15,.5}
 | 
				
			||||||
 | 
					    {\parbox{\textwidth}{#1#2#3}}}
 | 
				
			||||||
 | 
					\DeclareCaptionFont{white}{\color{white}}
 | 
				
			||||||
 | 
					\captionsetup[lstlisting]{
 | 
				
			||||||
 | 
					    format=listing,
 | 
				
			||||||
 | 
					    labelfont=white,
 | 
				
			||||||
 | 
					    textfont=white,
 | 
				
			||||||
 | 
					    font={bf,footnotesize}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					% Code listing setup
 | 
				
			||||||
 | 
					\lstset{
 | 
				
			||||||
 | 
					  language=Python,
 | 
				
			||||||
 | 
					  columns=flexible,
 | 
				
			||||||
 | 
					  basicstyle={\small\ttfamily},
 | 
				
			||||||
 | 
					  keywordstyle=\color{keyblue},
 | 
				
			||||||
 | 
					  commentstyle=\color{dkgreen},
 | 
				
			||||||
 | 
					  stringstyle=\color{stringcol},
 | 
				
			||||||
 | 
					  breaklines=true,
 | 
				
			||||||
 | 
					  breakatwhitespace=true,
 | 
				
			||||||
 | 
					  tabsize=4
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\begin{document}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					% Column 1: Code
 | 
				
			||||||
 | 
					\begin{minipage}[t]{.45\textwidth}
 | 
				
			||||||
 | 
					\begin{lstlisting}[title=Code]
 | 
				
			||||||
 | 
					def factorial(n):
 | 
				
			||||||
 | 
					    if n == 0:
 | 
				
			||||||
 | 
					        return 1
 | 
				
			||||||
 | 
					    return n * factorial(n - 1)
 | 
				
			||||||
 | 
					# Let's test it out!
 | 
				
			||||||
 | 
					print(factorial(5))
 | 
				
			||||||
 | 
					\end{lstlisting}
 | 
				
			||||||
 | 
					\end{minipage}
 | 
				
			||||||
 | 
					% Column 2: Output
 | 
				
			||||||
 | 
					\begin{minipage}[t]{.45\textwidth}
 | 
				
			||||||
 | 
					\begin{lstlisting}[title=Output]
 | 
				
			||||||
 | 
					    120
 | 
				
			||||||
 | 
					\end{lstlisting}
 | 
				
			||||||
 | 
					\end{minipage}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\end{document}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										1195
									
								
								static/files/images/202201292013.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1195
									
								
								static/files/images/202201292013.svg
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
		 After Width: | Height: | Size: 48 KiB  | 
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue