SAT-WiSe-25-26/scripts/create_chapter.sh

251 lines
8.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ==============================================================================
# Create Chapter Script
# ==============================================================================
# Description: Creates a new chapter file and automatically adds it to the
# content loader (01_content.tex)
# Usage: ./scripts/create_chapter.sh <chapter_number> <chapter_name>
# Example: ./scripts/create_chapter.sh 02 methodology
# Author: HSRTReport Template
# ==============================================================================
set -e # Exit on error
# ------------------------------------------------------------------------------
# Configuration
# ------------------------------------------------------------------------------
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
CHAPTERS_DIR="$PROJECT_ROOT/Content/Chapters"
CONTENT_FILE="$PROJECT_ROOT/Content/01_content.tex"
TEMPLATE_FILE="$CHAPTERS_DIR/example_chapter.tex"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# ------------------------------------------------------------------------------
# Functions
# ------------------------------------------------------------------------------
print_usage() {
echo "Usage: $0 <chapter_number> <chapter_name>"
echo ""
echo "Creates a new chapter file and adds it to the content loader."
echo ""
echo "Arguments:"
echo " chapter_number Two-digit number (e.g., 02, 03, 10)"
echo " chapter_name Name without spaces (e.g., methodology, results)"
echo ""
echo "Example:"
echo " $0 02 methodology"
echo " This creates: Content/Chapters/02_methodology.tex"
}
print_error() {
echo -e "${RED}Error: $1${NC}" >&2
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_info() {
echo -e "${YELLOW} $1${NC}"
}
capitalize_first() {
echo "$1" | sed 's/\b\(.\)/\U\1/g'
}
# ------------------------------------------------------------------------------
# Input Validation
# ------------------------------------------------------------------------------
# Check if correct number of arguments
if [ $# -ne 2 ]; then
print_error "Invalid number of arguments"
print_usage
exit 1
fi
CHAPTER_NUM="$1"
CHAPTER_NAME="$2"
# Validate chapter number (should be 2 digits)
if ! [[ "$CHAPTER_NUM" =~ ^[0-9]{2}$ ]]; then
print_error "Chapter number must be exactly 2 digits (e.g., 02, 10)"
exit 1
fi
# Validate chapter name (alphanumeric and underscores only)
if ! [[ "$CHAPTER_NAME" =~ ^[a-zA-Z][a-zA-Z0-9_]*$ ]]; then
print_error "Chapter name must start with a letter and contain only letters, numbers, and underscores"
exit 1
fi
# ------------------------------------------------------------------------------
# File Creation
# ------------------------------------------------------------------------------
CHAPTER_FILE="$CHAPTERS_DIR/${CHAPTER_NUM}_${CHAPTER_NAME}.tex"
CHAPTER_INPUT_LINE="\\\\input{Content/Chapters/${CHAPTER_NUM}_${CHAPTER_NAME}}"
# Check if file already exists
if [ -f "$CHAPTER_FILE" ]; then
print_error "Chapter file already exists: $CHAPTER_FILE"
echo "Do you want to overwrite it? (y/N)"
read -r response
if [[ ! "$response" =~ ^[Yy]$ ]]; then
echo "Aborted."
exit 1
fi
fi
# Create chapter file with template content
print_info "Creating chapter file: ${CHAPTER_NUM}_${CHAPTER_NAME}.tex"
CHAPTER_TITLE=$(capitalize_first "$CHAPTER_NAME" | tr '_' ' ')
cat > "$CHAPTER_FILE" << 'EOF'
% !TEX root = ../../Main.tex
% ==============================================================================
% Chapter: CHAPTER_TITLE_PLACEHOLDER
% ==============================================================================
% Description: [Add chapter description here]
% Author: [Your Name]
% Date: CURRENT_DATE
% ==============================================================================
% ------------------------------------------------------------------------------
% Chapter Declaration
% ------------------------------------------------------------------------------
\chapter{CHAPTER_TITLE_PLACEHOLDER}
\label{chap:CHAPTER_LABEL_PLACEHOLDER}
% ------------------------------------------------------------------------------
% Introduction
% ------------------------------------------------------------------------------
% Begin with an introduction to the chapter's content
% ------------------------------------------------------------------------------
[Introduction text for this chapter goes here. Provide an overview of what
will be covered in this chapter.]
% ------------------------------------------------------------------------------
% Section: First Section
% ------------------------------------------------------------------------------
\section{First Section}
\label{sec:CHAPTER_LABEL_PLACEHOLDER_first_section}
[Content for the first section goes here.]
% ------------------------------------------------------------------------------
% Subsection: Example Subsection
% ------------------------------------------------------------------------------
\subsection{Example Subsection}
\label{subsec:CHAPTER_LABEL_PLACEHOLDER_example}
[Subsection content goes here.]
% ------------------------------------------------------------------------------
% Section: Second Section
% ------------------------------------------------------------------------------
\section{Second Section}
\label{sec:CHAPTER_LABEL_PLACEHOLDER_second_section}
[Content for the second section goes here.]
% Example of a figure reference
% \begin{figure}[htbp]
% \centering
% \includegraphics[width=0.8\textwidth]{Content/Images/your_image.png}
% \caption{Caption for your figure}
% \label{fig:CHAPTER_LABEL_PLACEHOLDER_example}
% \end{figure}
% Example of a table
% \begin{table}[htbp]
% \centering
% \caption{Caption for your table}
% \label{tab:CHAPTER_LABEL_PLACEHOLDER_example}
% \begin{tabular}{lcc}
% \toprule
% \textbf{Column 1} & \textbf{Column 2} & \textbf{Column 3} \\
% \midrule
% Data 1 & Value 1 & Result 1 \\
% Data 2 & Value 2 & Result 2 \\
% \bottomrule
% \end{tabular}
% \end{table}
% ------------------------------------------------------------------------------
% Section: Summary
% ------------------------------------------------------------------------------
\section{Summary}
\label{sec:CHAPTER_LABEL_PLACEHOLDER_summary}
[Chapter summary goes here. Summarize the key points covered in this chapter.]
% ==============================================================================
% End of Chapter
% ==============================================================================
EOF
# Replace placeholders
sed -i "s/CHAPTER_TITLE_PLACEHOLDER/$CHAPTER_TITLE/g" "$CHAPTER_FILE"
sed -i "s/CHAPTER_LABEL_PLACEHOLDER/$CHAPTER_NAME/g" "$CHAPTER_FILE"
sed -i "s/CURRENT_DATE/$(date +%Y-%m-%d)/g" "$CHAPTER_FILE"
print_success "Chapter file created: $CHAPTER_FILE"
# ------------------------------------------------------------------------------
# Update Content Loader
# ------------------------------------------------------------------------------
print_info "Updating content loader: 01_content.tex"
# Check if the chapter is already included
if grep -q "$CHAPTER_INPUT_LINE" "$CONTENT_FILE" 2>/dev/null; then
print_info "Chapter already included in content loader"
else
# Add the chapter input line before the END marker
# Using a more robust method to handle the insertion
# Create a temporary file
TEMP_FILE=$(mktemp)
# Process the content file
awk -v input_line="$CHAPTER_INPUT_LINE" '
/^% --- CHAPTER LIST END ---/ {
print input_line
}
{ print }
' "$CONTENT_FILE" > "$TEMP_FILE"
# Move the temporary file back
mv "$TEMP_FILE" "$CONTENT_FILE"
print_success "Added chapter to content loader"
fi
# ------------------------------------------------------------------------------
# Final Output
# ------------------------------------------------------------------------------
echo ""
print_success "Chapter successfully created!"
echo ""
echo "Chapter file: $CHAPTER_FILE"
echo "Chapter will be included in the document automatically."
echo ""
echo "Next steps:"
echo "1. Edit the chapter file to add your content"
echo "2. Build the document with 'make' or 'xelatex Main.tex'"
echo ""
echo "To reference this chapter in other parts of your document, use:"
echo " \\ref{chap:${CHAPTER_NAME}}"