같은 매크로를 매번 프리앰블에 붙여 넣고 있다면, 직접 만든 패키지(\usepackage로 읽는 .sty 파일)나 클래스(.cls)로 묶으세요. 이 페이지는 식별 줄, 옵션 처리, 의존 패키지 로드라는 골격과 패키지와 클래스의 차이를 보여 줍니다.
.sty 파일의 골격
패키지는 프로젝트 안에 있거나 설치된 .sty 파일입니다. 처음에 자신이 무엇인지 선언하고, 이어서 매크로를 정의합니다. \NeedsTeXFormat{LaTeX2e}는 필요한 형식을 선언하고, \ProvidesPackage{name}[date version description]는 패키지 이름과 버전을 밝힙니다(이름은 파일 basename과 일치해야 하며, 날짜는 로그에 나오고 버전 검사에도 쓰입니다). 그 뒤 \newcommand, \newenvironment 등으로 내용을 정의합니다.
% mypackage.sty
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mypackage}[2026/01/01 v1.0 My helpers]
\newcommand{\hello}{こんにちは、\LaTeX!}의존 패키지 로드 — \RequirePackage
.sty 안에서 다른 패키지에 의존한다면 \RequirePackage{...}를 사용합니다. 이는 .sty 내부에서의 \usepackage에 해당합니다. 색을 쓰려면 xcolor, 그림을 그리려면 tikz를 불러옵니다. 옵션 처리가 그 기능에 의존한다면 \ProcessOptions 앞에 두고, 그렇지 않다면 뒤에 둡니다.
\RequirePackage{xcolor}옵션 받기 — \DeclareOption
\usepackage[option]{name}처럼 옵션을 받으려면 각 옵션을 \DeclareOption{option}{code}로 선언하고, 알 수 없는 옵션은 \DeclareOption*{...}로 잡습니다(경고를 내거나 로드한 클래스로 넘기는 등). 마지막에는 \ProcessOptions\relax로 처리를 확정합니다. key=value 형식의 옵션이 필요하면 현대적인 \DeclareKeys(l3keys) 또는 kvoptions 패키지를 사용합니다.
\DeclareOption{color}{\renewcommand\hello{\textcolor{red}{こんにちは}}}
\DeclareOption*{\PackageWarning{mypackage}{Unknown option '\CurrentOption'}}
\ProcessOptions\relax클래스(.cls)와 패키지의 차이
클래스는 .cls 파일(\ProvidesClass로 선언)로, 문서 전체의 종류를 정의합니다. \documentclass로 불러오며 문서 하나에 하나만 쓸 수 있습니다. 보통 \LoadClass{article}처럼 기존 클래스를 바탕으로 합니다. 반면 패키지(.sty)는 기능을 덧붙이는 것이며 여러 개를 불러올 수 있습니다. 식별과 옵션 처리 방식은 거의 같습니다. 클래스 작성 자체는 별도 페이지에서 다룹니다.