Skip to main content
Displaying source code professionally in LaTeX requires specialized packages. This guide covers both the listings package and the more advanced minted package for syntax highlighting and code formatting.
Key concept: The listings package provides basic code formatting, while minted offers advanced syntax highlighting using Pygments. Choose based on your needs: listings for simple formatting, minted for publication-quality highlighting.Related topics: Text formatting | Colors | Document design

The listings Package

Basic Code Formatting

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

% Basic configuration
\lstset{
  basicstyle=\ttfamily\footnotesize,
  breaklines=true,
  frame=single,
  numbers=left,
  numberstyle=\tiny,
  stepnumber=1,
  showstringspaces=false
}

\begin{document}

\section{Code Examples}

\begin{lstlisting}[language=Python]
def fibonacci(n):
    """Calculate the nth Fibonacci number."""
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

# Example usage
for i in range(10):
    print(f"F({i}) = {fibonacci(i)}")
\end{lstlisting}

% Inline code
The function \lstinline|fibonacci(n)| calculates Fibonacci numbers.

\end{document}

Language-Specific Styling

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

% Python style
\lstdefinestyle{pythonstyle}{
  language=Python,
  basicstyle=\ttfamily\small,
  keywordstyle=\color{blue}\bfseries,
  stringstyle=\color{red},
  commentstyle=\color{gray}\itshape,
  numberstyle=\tiny\color{gray},
  breaklines=true,
  showstringspaces=false,
  frame=leftline,
  framerule=2pt,
  rulecolor=\color{blue!30},
  backgroundcolor=\color{blue!5}
}

% Java style
\lstdefinestyle{javastyle}{
  language=Java,
  basicstyle=\ttfamily\small,
  keywordstyle=\color{purple}\bfseries,
  stringstyle=\color{orange},
  commentstyle=\color{green!60!black}\itshape,
  numberstyle=\tiny\color{gray},
  breaklines=true,
  showstringspaces=false,
  frame=tb,
  framerule=1pt
}

% C++ style
\lstdefinestyle{cppstyle}{
  language=C++,
  basicstyle=\ttfamily\small,
  keywordstyle=\color{blue}\bfseries,
  stringstyle=\color{red!80!black},
  commentstyle=\color{green!60!black}\itshape,
  numberstyle=\tiny\color{gray},
  breaklines=true,
  showstringspaces=false,
  frame=single,
  frameround=tttt
}

\begin{document}

\section{Python Example}
\begin{lstlisting}[style=pythonstyle]
class DataProcessor:
    def __init__(self, data):
        self.data = data
        
    def process(self):
        """Process the data using advanced algorithms."""
        result = []
        for item in self.data:
            if self.validate(item):
                result.append(self.transform(item))
        return result
\end{lstlisting}

\section{Java Example}
\begin{lstlisting}[style=javastyle]
public class Calculator {
    private double result;
    
    public Calculator() {
        this.result = 0.0;
    }
    
    public double add(double value) {
        result += value;
        return result;
    }
    
    public void reset() {
        result = 0.0;
    }
}
\end{lstlisting}

\section{C++ Example}
\begin{lstlisting}[style=cppstyle]
#include <iostream>
#include <vector>
#include <algorithm>

template<typename T>
class Container {
private:
    std::vector<T> data;
    
public:
    void add(const T& item) {
        data.push_back(item);
    }
    
    void sort() {
        std::sort(data.begin(), data.end());
    }
};
\end{lstlisting}

\end{document}

Custom Language Definitions

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

% Define custom language (LaTeX commands)
\lstdefinelanguage{LaTeX}{
  morekeywords={
    documentclass, usepackage, begin, end, section, subsection,
    title, author, maketitle, textbf, textit, emph, label, ref,
    cite, bibliography, includegraphics, caption
  },
  morecomment=[l]{\%},
  morestring=[b]",
  morestring=[b]',
  sensitive=true
}

% Style for LaTeX
\lstdefinestyle{latexstyle}{
  language=LaTeX,
  basicstyle=\ttfamily\small,
  keywordstyle=\color{blue}\bfseries,
  stringstyle=\color{red},
  commentstyle=\color{green!60!black}\itshape,
  breaklines=true,
  showstringspaces=false,
  frame=single,
  backgroundcolor=\color{yellow!10},
  escapeinside={(*@}{@*)}  % Allow LaTeX commands inside
}

% Define SQL language
\lstdefinelanguage{SQL}{
  morekeywords={
    SELECT, FROM, WHERE, INSERT, UPDATE, DELETE, CREATE, TABLE,
    INDEX, PRIMARY, KEY, FOREIGN, REFERENCES, JOIN, INNER, LEFT,
    RIGHT, OUTER, GROUP, BY, ORDER, HAVING, DISTINCT, COUNT, SUM,
    AVG, MAX, MIN, AND, OR, NOT, NULL, TRUE, FALSE
  },
  morecomment=[l]{--},
  morecomment=[s]{/*}{*/},
  morestring=[b]",
  morestring=[b]',
  sensitive=false
}

\begin{document}

\section{LaTeX Code Example}
\begin{lstlisting}[style=latexstyle]
\documentclass{article}
\usepackage{graphicx}
\usepackage{amsmath}

\title{My Document}
\author{John Doe}

\begin{document}
\maketitle

\section{Introduction}
This is an example of (*@\textbf{LaTeX}@*) code formatting.

\begin{equation}
E = mc^2
\end{equation}

\end{document}
\end{lstlisting}

\section{SQL Example}
\begin{lstlisting}[language=SQL, style=javastyle]
-- Create a table for user information
CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Insert sample data
INSERT INTO users (username, email) VALUES
    ('john_doe', 'john@example.com'),
    ('jane_smith', 'jane@example.com');

-- Query with joins
SELECT u.username, p.title, p.created_at
FROM users u
INNER JOIN posts p ON u.id = p.user_id
WHERE p.published = TRUE
ORDER BY p.created_at DESC;
\end{lstlisting}

\end{document}

The minted Package

Basic minted Setup

The minted package requires Python and Pygments to be installed, and LaTeX must be compiled with the --shell-escape flag. In LaTeX Cloud Studio, this is handled automatically.
\documentclass{article}
\usepackage{minted}

% Global minted settings
\setminted{
  fontsize=\footnotesize,
  linenos,
  breaklines,
  frame=lines,
  framesep=2mm
}

\begin{document}

\section{Python with minted}

\begin{minted}{python}
import numpy as np
import matplotlib.pyplot as plt

def mandelbrot(c, max_iter):
    """Calculate the Mandelbrot set value for complex number c."""
    z = 0
    for n in range(max_iter):
        if abs(z) > 2:
            return n
        z = z*z + c
    return max_iter

# Generate Mandelbrot set
width, height = 800, 600
xmin, xmax = -2.0, 1.0
ymin, ymax = -1.5, 1.5

mandelbrot_set = np.zeros((height, width))
for i in range(height):
    for j in range(width):
        c = complex(xmin + (xmax - xmin) * j / width,
                   ymin + (ymax - ymin) * i / height)
        mandelbrot_set[i, j] = mandelbrot(c, 100)

plt.imshow(mandelbrot_set, extent=[xmin, xmax, ymin, ymax], 
           cmap='hot', origin='lower')
plt.colorbar()
plt.title('Mandelbrot Set')
plt.show()
\end{minted}

\end{document}

Advanced minted Styling

\documentclass{article}
\usepackage{minted}
\usepackage{mdframed}
\usepackage{xcolor}

% Define custom style
\definecolor{codegray}{rgb}{0.95,0.95,0.95}
\definecolor{codeframe}{rgb}{0.7,0.7,0.7}

% Custom environment for highlighted code
\newenvironment{mintedbox}[1]{%
  \begin{mdframed}[
    linecolor=codeframe,
    backgroundcolor=codegray,
    roundcorner=5pt,
    linewidth=1pt,
    innertopmargin=10pt,
    innerbottommargin=10pt,
    innerleftmargin=10pt,
    innerrightmargin=10pt
  ]
  \begin{minted}[
    fontsize=\small,
    linenos,
    breaklines,
    numbersep=5pt,
    gobble=2
  ]{#1}
}{%
  \end{minted}
  \end{mdframed}
}

\begin{document}

\section{Styled Code Blocks}

\begin{mintedbox}{javascript}
  // Advanced JavaScript example with ES6+ features
  class APIClient {
    constructor(baseURL) {
      this.baseURL = baseURL;
      this.headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
      };
    }
    
    async request(endpoint, options = {}) {
      const url = `${this.baseURL}${endpoint}`;
      const config = {
        ...options,
        headers: {
          ...this.headers,
          ...options.headers
        }
      };
      
      try {
        const response = await fetch(url, config);
        
        if (!response.ok) {
          throw new Error(`HTTP ${response.status}: ${response.statusText}`);
        }
        
        return await response.json();
      } catch (error) {
        console.error('API request failed:', error);
        throw error;
      }
    }
    
    // Convenience methods
    get(endpoint) {
      return this.request(endpoint, { method: 'GET' });
    }
    
    post(endpoint, data) {
      return this.request(endpoint, {
        method: 'POST',
        body: JSON.stringify(data)
      });
    }
  }
  
  // Usage example
  const client = new APIClient('https://api.example.com');
  
  client.get('/users')
    .then(users => console.log('Users:', users))
    .catch(error => console.error('Failed to fetch users:', error));
\end{mintedbox}

\section{Rust Example}

\begin{minted}[
  bgcolor=codegray,
  fontsize=\footnotesize,
  linenos,
  breaklines,
  frame=single,
  framerule=0.5pt,
  framesep=3mm
]{rust}
use std::collections::HashMap;
use std::fs::File;
use std::io::{BufRead, BufReader, Result};

#[derive(Debug, Clone)]
pub struct WordCounter {
    counts: HashMap<String, usize>,
    total_words: usize,
}

impl WordCounter {
    pub fn new() -> Self {
        Self {
            counts: HashMap::new(),
            total_words: 0,
        }
    }
    
    pub fn add_word(&mut self, word: &str) {
        let normalized = word.to_lowercase();
        *self.counts.entry(normalized).or_insert(0) += 1;
        self.total_words += 1;
    }
    
    pub fn count_from_file(&mut self, filename: &str) -> Result<()> {
        let file = File::open(filename)?;
        let reader = BufReader::new(file);
        
        for line in reader.lines() {
            let line = line?;
            for word in line.split_whitespace() {
                // Remove punctuation
                let clean_word: String = word
                    .chars()
                    .filter(|c| c.is_alphabetic())
                    .collect();
                
                if !clean_word.is_empty() {
                    self.add_word(&clean_word);
                }
            }
        }
        
        Ok(())
    }
    
    pub fn most_frequent(&self, n: usize) -> Vec<(&String, &usize)> {
        let mut pairs: Vec<_> = self.counts.iter().collect();
        pairs.sort_by(|a, b| b.1.cmp(a.1));
        pairs.into_iter().take(n).collect()
    }
}
\end{minted}

\end{document}

Highlighting Specific Lines

\documentclass{article}
\usepackage{minted}
\usepackage{xcolor}

% Define highlight colors
\definecolor{highlightgray}{rgb}{0.9,0.9,0.9}
\definecolor{highlightyellow}{rgb}{1.0,1.0,0.8}

\begin{document}

\section{Line Highlighting Examples}

\subsection{Highlighting Specific Lines}
\begin{minted}[
  linenos,
  highlightlines={3,7-9},
  highlightcolor=highlightyellow
]{python}
def binary_search(arr, target):
    left, right = 0, len(arr) - 1
    
    while left <= right:  # Main loop condition
        mid = (left + right) // 2
        
        if arr[mid] == target:    # Found target
            return mid            # Return index
        elif arr[mid] < target:   # Target in right half
            left = mid + 1
        else:                     # Target in left half
            right = mid - 1
    
    return -1  # Target not found
\end{minted}

\subsection{Multiple Highlight Ranges}
\begin{minted}[
  linenos,
  highlightlines={1-2,8-10},
  highlightcolor=highlightgray
]{cpp}
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> numbers = {64, 34, 25, 12, 22, 11, 90};
    
    std::cout << "Original array: ";
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    
    std::sort(numbers.begin(), numbers.end());
    
    std::cout << "Sorted array: ";
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    
    return 0;
}
\end{minted}

\end{document}

Code Listings in Floats

Floating Code Listings

\documentclass{article}
\usepackage{minted}
\usepackage{caption}
\usepackage{float}

% Define new float type for code
\newfloat{listing}{tbp}{lol}
\floatname{listing}{Listing}

% Caption setup for listings
\captionsetup[listing]{position=below}

\begin{document}

\section{Algorithm Examples}

Listing~\ref{lst:quicksort} shows an implementation of the quicksort algorithm.

\begin{listing}[H]
\begin{minted}[
  fontsize=\footnotesize,
  linenos,
  frame=single,
  framesep=2mm
]{python}
def quicksort(arr):
    """
    Sorts an array using the quicksort algorithm.
    
    Args:
        arr: List of comparable elements
        
    Returns:
        Sorted list
    """
    if len(arr) <= 1:
        return arr
    
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    
    return quicksort(left) + middle + quicksort(right)

# Example usage
if __name__ == "__main__":
    test_array = [3, 6, 8, 10, 1, 2, 1]
    print(f"Original: {test_array}")
    print(f"Sorted: {quicksort(test_array)}")
\end{minted}
\caption{Quicksort algorithm implementation in Python}
\label{lst:quicksort}
\end{listing}

The algorithm shown in Listing~\ref{lst:quicksort} has an average time complexity of O(n log n).

\begin{listing}[t]
\begin{minted}[
  fontsize=\small,
  linenos,
  frame=leftline,
  framerule=2pt,
  rulecolor=blue
]{java}
public class BinaryTree<T extends Comparable<T>> {
    private Node<T> root;
    
    private static class Node<T> {
        T data;
        Node<T> left, right;
        
        Node(T data) {
            this.data = data;
            this.left = this.right = null;
        }
    }
    
    public void insert(T data) {
        root = insertRec(root, data);
    }
    
    private Node<T> insertRec(Node<T> root, T data) {
        if (root == null) {
            root = new Node<>(data);
            return root;
        }
        
        if (data.compareTo(root.data) < 0) {
            root.left = insertRec(root.left, data);
        } else if (data.compareTo(root.data) > 0) {
            root.right = insertRec(root.right, data);
        }
        
        return root;
    }
    
    public boolean search(T data) {
        return searchRec(root, data);
    }
    
    private boolean searchRec(Node<T> root, T data) {
        if (root == null) {
            return false;
        }
        
        if (data.compareTo(root.data) == 0) {
            return true;
        }
        
        return data.compareTo(root.data) < 0 
            ? searchRec(root.left, data)
            : searchRec(root.right, data);
    }
}
\end{minted}
\caption{Generic binary search tree implementation in Java}
\label{lst:bst}
\end{listing}

\end{document}

Code Listings with Subfigures

\documentclass{article}
\usepackage{minted}
\usepackage{subcaption}
\usepackage{caption}

\begin{document}

\section{Algorithm Comparison}

Figure~\ref{fig:sorting-algorithms} compares different sorting algorithm implementations.

\begin{figure}[htbp]
\centering

\begin{subfigure}[t]{0.45\textwidth}
\begin{minted}[
  fontsize=\tiny,
  linenos,
  frame=single,
  framesep=1mm
]{python}
def bubble_sort(arr):
    """Bubble sort - O(n²)"""
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

# Example
numbers = [64, 34, 25, 12, 22, 11, 90]
print("Bubble sort:", bubble_sort(numbers.copy()))
\end{minted}
\caption{Bubble sort algorithm}
\label{fig:bubble-sort}
\end{subfigure}
\hfill
\begin{subfigure}[t]{0.45\textwidth}
\begin{minted}[
  fontsize=\tiny,
  linenos,
  frame=single,
  framesep=1mm
]{python}
def merge_sort(arr):
    """Merge sort - O(n log n)"""
    if len(arr) <= 1:
        return arr
    
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    
    return merge(left, right)

def merge(left, right):
    result = []
    i = j = 0
    
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    
    result.extend(left[i:])
    result.extend(right[j:])
    return result

# Example
numbers = [64, 34, 25, 12, 22, 11, 90]
print("Merge sort:", merge_sort(numbers.copy()))
\end{minted}
\caption{Merge sort algorithm}
\label{fig:merge-sort}
\end{subfigure}

\caption{Comparison of sorting algorithms with different time complexities}
\label{fig:sorting-algorithms}
\end{figure}

\end{document}

Inline Code and Escaping

Inline Code with Special Characters

\documentclass{article}
\usepackage{minted}
\usepackage{listings}

% Configure listings for inline code
\lstset{
  basicstyle=\ttfamily,
  breaklines=true
}

\begin{document}

\section{Inline Code Examples}

% Simple inline code
The \lstinline|print()| function outputs text to the console.

% Inline code with special characters
Use \lstinline|arr[i] = arr[j]| to swap array elements.

% Different delimiters for special characters
The regular expression \lstinline/[a-zA-Z0-9]+/ matches alphanumeric strings.

% Minted inline code
The \mintinline{python}|lambda x: x**2| function squares its input.

% Inline code with highlighting
The key function is \mintinline[bgcolor=yellow!30]{python}|process_data()|.

\section{Code with LaTeX Escapes}

\begin{lstlisting}[language=Python, escapeinside={(*@}{@*)}]
def calculate_(*@\textbf{mean}@*)(values):
    """Calculate the arithmetic (*@\emph{mean}@*) of a list."""
    if not values:
        return 0
    return sum(values) / len(values)  # (*@$\frac{\sum x_i}{n}$@*)

# Example: (*@\textcolor{red}{Important note}@*)
result = calculate_mean([1, 2, 3, 4, 5])
print(f"Mean: {result}")  # Output: (*@\texttt{Mean: 3.0}@*)
\end{lstlisting}

\end{document}

Performance and Customization

Custom Color Schemes

\documentclass{article}
\usepackage{minted}
\usepackage{xcolor}

% Define custom color scheme
\definecolor{darkblue}{rgb}{0.0,0.2,0.4}
\definecolor{darkgreen}{rgb}{0.0,0.4,0.2}
\definecolor{darkred}{rgb}{0.4,0.0,0.2}
\definecolor{darkorange}{rgb}{0.8,0.4,0.0}
\definecolor{codebg}{rgb}{0.98,0.98,0.98}

% Custom minted style
\newminted{python}{
  bgcolor=codebg,
  fontsize=\footnotesize,
  linenos,
  numbersep=8pt,
  frame=leftline,
  framerule=2pt,
  rulecolor=darkblue,
  breaklines,
  breaksymbolleft=\raisebox{0.8ex}{\small\reflectbox{\carriagereturn}},
  breaksymbolindentleft=0pt,
  breaksymbolsepleft=0pt,
  breaksymbolright=\small\carriagereturn,
  breaksymbolindentright=0pt,
  breaksymbolsepright=0pt
}

% Custom environment
\newenvironment{darkcode}
{%
  \begin{tcolorbox}[
    colback=black!95,
    coltext=white,
    colframe=gray!50,
    arc=2mm,
    boxrule=0.5pt
  ]
  \begin{minted}[
    bgcolor={},
    fontsize=\small,
    style=monokai
  ]{python}
}{%
  \end{minted}
  \end{tcolorbox}
}

\begin{document}

\section{Custom Styled Code}

\begin{pythoncode}
import asyncio
import aiohttp
from typing import List, Dict, Optional

class AsyncWebScraper:
    def __init__(self, max_concurrent: int = 10):
        self.max_concurrent = max_concurrent
        self.session: Optional[aiohttp.ClientSession] = None
        
    async def __aenter__(self):
        connector = aiohttp.TCPConnector(limit=self.max_concurrent)
        self.session = aiohttp.ClientSession(connector=connector)
        return self
        
    async def __aexit__(self, exc_type, exc_val, exc_tb):
        if self.session:
            await self.session.close()
            
    async def fetch_url(self, url: str) -> Dict[str, str]:
        """Fetch content from a single URL."""
        try:
            async with self.session.get(url) as response:
                content = await response.text()
                return {
                    'url': url,
                    'status': response.status,
                    'content': content[:1000],  # First 1000 chars
                    'headers': dict(response.headers)
                }
        except Exception as e:
            return {
                'url': url,
                'error': str(e),
                'status': None,
                'content': None
            }
    
    async def scrape_urls(self, urls: List[str]) -> List[Dict[str, str]]:
        """Scrape multiple URLs concurrently."""
        tasks = [self.fetch_url(url) for url in urls]
        results = await asyncio.gather(*tasks, return_exceptions=True)
        return [r for r in results if not isinstance(r, Exception)]

# Usage example
async def main():
    urls = [
        'https://httpbin.org/json',
        'https://httpbin.org/xml',
        'https://httpbin.org/html'
    ]
    
    async with AsyncWebScraper(max_concurrent=5) as scraper:
        results = await scraper.scrape_urls(urls)
        
    for result in results:
        print(f"URL: {result['url']}")
        print(f"Status: {result.get('status', 'Error')}")
        print("-" * 50)

if __name__ == "__main__":
    asyncio.run(main())
\end{pythoncode}

\end{document}

Code Import from Files

\documentclass{article}
\usepackage{minted}

\begin{document}

\section{Importing Code from Files}

% Import entire file
\inputminted{python}{example_script.py}

% Import specific lines from file
\inputminted[firstline=10,lastline=25]{python}{large_script.py}

% Import with custom styling
\inputminted[
  fontsize=\footnotesize,
  linenos,
  numbersep=5pt,
  frame=lines,
  framesep=2mm,
  bgcolor=gray!10
]{python}{algorithm.py}

\section{Code Snippets}

% You can also use external command to include processed code
\immediate\write18{pygmentize -l python -f latex example.py > example_highlighted.tex}
\input{example_highlighted.tex}

\end{document}

Best Practices

Code formatting guidelines:
  1. Choose appropriate package - Use listings for simple formatting, minted for syntax highlighting
  2. Consistent styling - Define styles once and reuse throughout document
  3. Font size - Use \footnotesize or \small for better readability
  4. Line numbers - Include for longer code blocks, omit for short snippets
  5. Break long lines - Enable breaklines for better page layout
  6. Escape special characters - Use proper delimiters for inline code

Production-Ready Setup

\documentclass{article}
\usepackage{minted}
\usepackage{tcolorbox}
\usepackage{caption}

% Global minted configuration
\setminted{
  fontsize=\footnotesize,
  linenos=true,
  numbersep=8pt,
  frame=leftline,
  framerule=1pt,
  breaklines=true,
  breaksymbolleft=\raisebox{0.8ex}{\small\reflectbox{\carriagereturn}},
  autogobble=true
}

% Professional code environment
\newtcolorbox{codebox}[2][]{
  colback=blue!5!white,
  colframe=blue!50!black,
  title=#2,
  fonttitle=\bfseries,
  #1
}

% Language-specific environments
\newenvironment{pythoncode}[1][]
{%
  \begin{codebox}[#1]{Python Code}
  \begin{minted}{python}
}{%
  \end{minted}
  \end{codebox}
}

\newenvironment{javacode}[1][]
{%
  \begin{codebox}[colback=orange!5!white,colframe=orange!50!black,#1]{Java Code}
  \begin{minted}{java}
}{%
  \end{minted}
  \end{codebox}
}

\begin{document}

\section{Professional Code Presentation}

\begin{pythoncode}[title=Data Analysis Pipeline]
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix

class DataAnalysisPipeline:
    """A complete data analysis pipeline for machine learning."""
    
    def __init__(self, random_state=42):
        self.random_state = random_state
        self.scaler = StandardScaler()
        self.model = RandomForestClassifier(
            n_estimators=100,
            random_state=self.random_state
        )
        self.is_fitted = False
        
    def preprocess_data(self, X, y=None, fit_transform=True):
        """Preprocess the input data."""
        if fit_transform:
            X_scaled = self.scaler.fit_transform(X)
        else:
            X_scaled = self.scaler.transform(X)
            
        return X_scaled
        
    def train(self, X, y, test_size=0.2):
        """Train the model with the provided data."""
        # Split the data
        X_train, X_test, y_train, y_test = train_test_split(
            X, y, test_size=test_size, random_state=self.random_state
        )
        
        # Preprocess
        X_train_scaled = self.preprocess_data(X_train, fit_transform=True)
        X_test_scaled = self.preprocess_data(X_test, fit_transform=False)
        
        # Train model
        self.model.fit(X_train_scaled, y_train)
        self.is_fitted = True
        
        # Evaluate
        train_score = self.model.score(X_train_scaled, y_train)
        test_score = self.model.score(X_test_scaled, y_test)
        
        return {
            'train_score': train_score,
            'test_score': test_score,
            'X_test': X_test_scaled,
            'y_test': y_test
        }
        
    def predict(self, X):
        """Make predictions on new data."""
        if not self.is_fitted:
            raise ValueError("Model must be trained before making predictions")
            
        X_scaled = self.preprocess_data(X, fit_transform=False)
        return self.model.predict(X_scaled)
        
    def feature_importance(self):
        """Get feature importance scores."""
        if not self.is_fitted:
            raise ValueError("Model must be trained first")
            
        return self.model.feature_importances_

# Example usage
if __name__ == "__main__":
    # Load your dataset here
    # X, y = load_your_data()
    
    pipeline = DataAnalysisPipeline()
    results = pipeline.train(X, y)
    
    print(f"Training accuracy: {results['train_score']:.3f}")
    print(f"Testing accuracy: {results['test_score']:.3f}")
\end{pythoncode}

\end{document}

Quick Reference

Essential Commands

PackageCommandPurposeExample
listings\lstset{}Global configuration\lstset{language=Python}
listings\begin{lstlisting}Code block\begin{lstlisting}[language=Java]
listings\lstinlineInline code`\lstinlinecode`
minted\setminted{}Global configuration\setminted{fontsize=\small}
minted\begin{minted}Code block\begin{minted}{python}
minted\mintinlineInline code`\mintinlinecode`

Common Options

OptionEffectExample
languageSet programming languagelanguage=Python
linenosShow line numberslinenos=true
fontsizeSet font sizefontsize=\footnotesize
breaklinesAllow line breakingbreaklines=true
frameAdd frame around codeframe=single
bgcolorBackground colorbgcolor=gray!10

Supported Languages

Both packages support many languages including:
  • Python, Java, C++, C, JavaScript, TypeScript
  • HTML, CSS, SQL, LaTeX, Bash, PowerShell
  • Go, Rust, Swift, Kotlin, Scala, Haskell
  • MATLAB, R, Julia, Perl, Ruby, PHP

Next: Learn about Footnotes and margin notes for additional content placement, or explore Document design for comprehensive layout principles.
I