> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/tr/sinif-dosyalari/04-writing-your-own-class.md).

# Kendi sınıfınızı yazma

Bazen bir belgeyi özelleştirmek için en iyi seçenek, sıfırdan yeni bir sınıf yazmaktır. Bu makale, yeni bir sınıfta gereken temel yapıyı ve komutları açıklar.

## Giriş

Yeni bir sınıf kodlamadan önce yapılacak ilk şey, gerçekten yeni bir sınıfa ihtiyaç olup olmadığını belirlemektir. Şunlar önerilir: [CTAN'da (Comprehensive TeX Archive Network) arama yapmak](http://www.ctan.org/ctan-portal/search/) ve ihtiyaç duyduğunuz belge sınıfına benzer bir şeyin daha önce biri tarafından oluşturulup oluşturulmadığını görmek.

Aklınızda bulundurmanız gereken bir diğer önemli şey de [paketler ile sınıflar arasındaki farktır](/latex/tr/sinif-dosyalari/01-understanding-packages-and-class-files.md). Yanlış seçim yapmak, nihai ürünün esnekliğini etkileyebilir.

## Genel yapı

Tüm sınıf dosyalarının yapısı kabaca aşağıdaki dört bölümde açıklanabilir:

* ***Tanımlama***. Dosya, LaTeX2ε sözdizimiyle yazılmış bir sınıf olarak kendini tanımlar.
* ***Ön tanımlar***. Burada gerekli dış paketler ve sınıflar içe aktarılır. Ayrıca dosyanın bu bölümünde, bildirilen seçeneklerin gerektirdiği komutlar ve tanımlar kodlanır.
* ***Seçenekler***. Sınıf, seçenekleri bildirir ve işler.
* ***Daha fazla tanım***. Sınıfın ana gövdesi. Bir sınıfın yaptığı hemen her şey burada tanımlanır.

Sonraki alt bölümlerde yapının daha ayrıntılı bir açıklaması ve çalışan bir örnek, *exampleclass.cls*, sunulacaktır.

### Tanımlama

Tüm sınıfların sahip olması gereken iki basit komut vardır:

```latex
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{exampleclass}[2014/08/16 Örnek LaTeX sınıfı]
```

Komut `\NeedsTeXFormat{LaTeX2e}` sınıfın çalışacağı LaTeX sürümünü ayarlar. Ayrıca, gerekli en eski sürüm tarihini belirtmek için köşeli parantezler içinde bir tarih eklenebilir.

Komut `ProvidesClass{exampleclass}[...]` bu sınıfı şu şekilde tanımlar: *exampleclass* olarak tanımlar ve köşeli parantezlerin içinde sürüm tarihi ve bazı ek bilgiler yer alır. Tarih YYYY/AA/GG biçiminde olmalıdır

[Overleaf'te bir sınıfın nasıl yazılacağına dair bir örneği açın](https://www.overleaf.com/project/new/template/19419?id=65524436\&templateName=An+example+of+writing+a+LaTeX+class\&latexEngine=\&texImage=texlive-full%3A2020.1\&mainFile=)

### Ön tanımlar

Sınıfların çoğu mevcut olanları genişletir ve özelleştirir; ayrıca çalışmak için bazı dış paketlere ihtiyaç duyar. Aşağıda, örnek sınıfa biraz daha kod eklenmiştir `exampleclass.cls`.

```latex
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{exampleclass}[2014/08/16 Örnek LaTeX sınıfı]

\newcommand{\headlinecolor}{\normalcolor}
\LoadClass[twocolumn]{article}
\RequirePackage{xcolor}
\definecolor{slcolor}{HTML}{882B21}
```

Bu bölümdeki komutlar ya daha sonra seçenekleri yönetmek için kullanılacak bazı parametreleri başlatır ya da dış dosyaları içe aktarır.

Komut `\LoadClass[twocolumn]{article}` sınıfı yükler `article` ek parametre olarak `twocolumn`. Dolayısıyla standarttaki tüm komutlar `article` sınıfında otomatik olarak kullanılabilir olacaktır **örnek** sınıfında, ancak belge iki sütunlu biçimde yazdırılacaktır.

`\RequirePackage` iyi bilinen komuta çok benzer `\usepackage`ve köşeli parantezler içinde isteğe bağlı parametreler eklemek de işe yarar. Tek fark, `\usepackage` komutu kullanılmadan önce `\documentclass` kullanılamaz. Yeni paketler veya sınıflar yazarken `\RequirePackage` yeni sınıflar veya paketler yazarken.

[Overleaf'te bir sınıfın nasıl yazılacağına dair bir örneği açın](https://www.overleaf.com/project/new/template/19419?id=65524436\&templateName=An+example+of+writing+a+LaTeX+class\&latexEngine=\&texImage=texlive-full%3A2020.1\&mainFile=)

### Seçenekler

Sınıflarda biraz esneklik sağlamak için birkaç ek seçenek çok yararlıdır. Dosyanın bir sonraki bölümü `exampleclass.cls` belge sınıfı komutuna geçirilen parametreleri işler. Ayrıca biz de şunu taşıdık `\LoadClass` ile *sonrasına* seçenekler işlenir; böylece .tex dosyasında ayarlanan seçenekler temel sınıfa aktarılabilir.

```latex
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{exampleclass}[2014/08/16 Örnek LaTeX sınıfı]

\newcommand{\headlinecolor}{\normalcolor}
\RequirePackage{xcolor}
\definecolor{slcolor}{HTML}{882B21}

\DeclareOption{onecolumn}{\OptionNotUsed}
\DeclareOption{green}{\renewcommand{\headlinecolor}{\color{green}}}
\DeclareOption{red}{\renewcommand{\headlinecolor}{\color{slcolor}}}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass[twocolumn]{article}
```

Burada, sınıfa geçirilen seçenekleri işleyen dört temel komut vardır.

Komut `\DeclareOption{}{}` verilen bir seçeneği işler. İki parametre alır; ilki seçeneğin adı, ikincisi ise seçenek geçirildiğinde çalıştırılacak koddur.

Komut `\OptionNotUsed` derleyicide ve günlüklerde bir mesaj yazdırır, seçenek kullanılmayacaktır. Bu durumda belge iki sütunlu olarak ayarlanır ve kullanıcı bunu tek sütuna değiştirmeye çalışırsa bu çalışmaz; seçenek yok sayılacaktır.

Komut `\Declareoption*{}` Açıkça tanımlanmamış her seçeneği işler. Yalnızca bir parametre alır: bilinmeyen bir seçenek geçirildiğinde çalıştırılacak kod. Bu durumda bir sonraki komut çalıştırılır:

`\PassOptionsToClass{}{}`. İlk süslü parantez çiftinin içindeki seçeneği, ikinci süslü parantez çifti içinde belirtilen belge sınıfına aktarır. Örnekte, tüm bilinmeyen seçenekler şuna aktarılacaktır: **article** belge sınıfına.

`\CurrentOption` belirli bir anda işlenmekte olan sınıf seçeneğinin adını saklar.

Komut `\ProcessOptions\relax` her seçenek için kodu yürütür ve tüm seçenek işleme komutları yazıldıktan sonra eklenmelidir. Bu komutun, seçenekleri çağıran komutların belirttiği tam sırayla yürütecek yıldızlı bir sürümü de vardır.

Örnekte, eğer `red` ya da `green` belgeye aktarılır; başlık ve bölümler için kullanılan yazı tipi ilgili renge ayarlanacaktır. Adı verilen renk `slcolor` içinde tanımlandı [ön tanımlarda](#preliminary-declaration) içe aktarımdan sonra tanımlanmıştır. `xcolor` paketi.

[Overleaf'te bir sınıfın nasıl yazılacağına dair bir örneği açın](https://www.overleaf.com/project/new/template/19419?id=65524436\&templateName=An+example+of+writing+a+LaTeX+class\&latexEngine=\&texImage=texlive-full%3A2020.1\&mainFile=)

### Daha fazla tanım

Komutların çoğu bu bölümde yer alır. "exampleclass.cls" içinde sayfa boyutları ile başlık, gövde ve bölümler için yazı tipi boyutları ayarlanır. Aşağıda tam sınıf dosyasını görebilirsiniz.

```latex
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{exampleclass}[2014/08/16 Örnek LaTeX sınıfı]

\newcommand{\headlinecolor}{\normalcolor}
\RequirePackage{xcolor}
\definecolor{slcolor}{HTML}{882B21}

\DeclareOption{onecolumn}{\OptionNotUsed}
\DeclareOption{green}{\renewcommand{\headlinecolor}{\color{green}}}
\DeclareOption{red}{\renewcommand{\headlinecolor}{\color{slcolor}}}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass[twocolumn]{article}

\renewcommand{\maketitle}{%
    \twocolumn[%
        \fontsize{50}{60}\fontfamily{phv}\fontseries{b}%
        \fontshape{sl}\selectfont\headlinecolor
        \@title
        \medskip
        ]%
}

\renewcommand{\section}{%
    \@startsection
    {section}{1}{0pt}{-1.5ex plus -1ex minus -.2ex}%
    {1ex plus .2ex}{\large\sffamily\slshape\headlinecolor}%
}

\renewcommand{\normalsize}{\fontsize{9}{10}\selectfont}
\setlength{\textwidth}{17.5cm}
\setlength{\textheight}{22cm}
\setcounter{secnumdepth}{0}
```

Komutların geri kalanını anlamak için şuna bakın: [başvuru kılavuzuna](#reference-guide) ve içindeki bağlantılar [daha fazla okuma bölümü](#further-reading).

Örnekteki son dört komut, tüm sınıfların içermesi gereken dört şeyi gösterir:

* \ps@\*somestyle\* `normalsize`. Varsayılanı ayarlar [yazı tipi boyutu](/latex/tr/yazi-tipleri/01-font-sizes-families-and-styles.md).
* için varsayılan bir değer [`textwidth`](/latex/tr/bicimlendirme/07-page-size-and-margins.md)
* için varsayılan bir değer [`textheight`](/latex/tr/bicimlendirme/07-page-size-and-margins.md)
* şunun için belirlemeler [sayfa numaralandırması](/latex/tr/bicimlendirme/03-page-numbering.md).

Aşağıda, şu sınıfı kullanan bir belge yer almaktadır: *exampleclass.cls*.

```latex
\documentclass[red]{exampleclass}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}

\usepackage{blindtext}

\title{Sınıfların nasıl çalıştığını göstermek için örnek}
\author{Team Learn ShareLaTeX}
\date{Ağustos 2014}

\begin{document}

\maketitle

\noindent
Burada basit bir çalışan örnekle başlayalım.

\blindtext

\section{Giriş}

Monty Hall problemi...

\section{Aynı şey}

Monty...
```

![WrittingClassesEx1.png](/files/f7f84976c8b60e448ac3c87c55f4924c413b2bca)

Burada ilk komutun şu olduğuna dikkat edin:

```latex
\documentclass[red]{exampleclass}
```

[Overleaf'te bir sınıfın nasıl yazılacağına dair bir örneği açın](https://www.overleaf.com/project/new/template/19419?id=65524436\&templateName=An+example+of+writing+a+LaTeX+class\&latexEngine=\&texImage=texlive-full%3A2020.1\&mainFile=)

## Hata işleme

Yeni sınıflar geliştirme söz konusu olduğunda, kullanıcıya bir şeylerin ters gittiğini bildirmek için olası hataları işlemek önemlidir. Derleyicide hataları bildirmek için dört temel komut vardır.

* `\ClassError{*class-name*}{*error-text*}{*help-text*}`. Üç parametre alır, her biri süslü parantezler içindedir: sınıf adı, gösterilecek hata metni (derleme süreci duraklatılacaktır) ve hata nedeniyle derleme durakladığında kullanıcı "h" tuşuna basarsa yazdırılacak yardım metni.
* `\ClassWarning{*class-name*}{*warning-text*}`. Bu durumda metin görüntülenir, ancak derleme işlemi durmaz. Uyarının oluştuğu satır numarasını gösterecektir.
* `\ClassWarningNoLine{*class-name*}{*warning-text*}`. Önceki komut gibi çalışır, ancak uyarının oluştuğu satırı göstermez.
* `\ClassInfo{*class name*}{*info-text*}`. Bu durumda ikinci parametredeki bilgi yalnızca satır numarası dahil olmak üzere aktarım dosyasına yazdırılır.

[Overleaf'te bir sınıfın nasıl yazılacağına dair bir örneği açın](https://www.overleaf.com/project/new/template/19419?id=65524436\&templateName=An+example+of+writing+a+LaTeX+class\&latexEngine=\&texImage=texlive-full%3A2020.1\&mainFile=)

## Başvuru kılavuzu

**Sınıflarda ve paketlerde yaygın olarak kullanılan komutların listesi**

* `\newcommand{*isim*}{*tanım*}`. Bir [yeni komut](/latex/tr/komutlar/01-commands.md#defining-a-new-command)tanımlar; ilk parametre yeni komutun adı, ikinci parametre ise komutun ne yapacağıdır.
* `\renewcommand{}{}`. ile aynıdır `\newcommand` ancak mevcut bir komutun üzerine yazar.
* `\providecommand{}{}`. Şununla aynı şekilde çalışır `\newcommand` ancak komut zaten tanımlıysa bu sessizce yok sayılır.
* `\CheckCommand{}{}`. Sözdizimi aynıdır `\newcommand`, ancak bunun yerine komutun var olup olmadığını ve beklenen tanıma sahip olup olmadığını kontrol eder; komut beklenenden farklıysa LaTeX bir uyarı gösterecektir `\CheckCommand` bekleniyordu.
* `\setlength{}{}`. İlk parametre olarak verilen öğenin uzunluğunu ikinci parametre olarak yazılan değere ayarlar.
* `\mbox{}`. Süslü parantezlerin içine yazılan öğeleri içeren bir kutu oluşturur.
* `\fbox{}`. ile aynıdır `\mbox`ile aynı şeydir, ancak içeriğin etrafına gerçekten bir kutu çizilir.

## Daha fazla okuma

Daha fazla bilgi için bakınız

* [Paketleri ve sınıf dosyalarını anlamak](/latex/tr/sinif-dosyalari/01-understanding-packages-and-class-files.md)
* [Kendi paketinizi yazmak](/latex/tr/sinif-dosyalari/03-writing-your-own-package.md)
* [Komutlar](/latex/tr/komutlar/01-commands.md) ve [Ortamlar](/latex/tr/komutlar/02-environments.md)
* [LaTeX'teki uzunluklar](/latex/tr/bicimlendirme/01-lengths-in-latex.md)
* [LaTeX'te renk kullanımı](/latex/tr/bicimlendirme/13-using-colors-in-latex.md)
* [Büyük bir projede yönetim](/latex/tr/belge-yapisi/07-management-in-a-large-project.md)
* [Sınıf ve paket yazarları için LaTeX2ε](http://www.latex-project.org/guides/clsguide.pdf)
* [tex'te programlama üzerine notlar](http://pgfplots.sourceforge.net/TeX-programming-notes.pdf)
* [Saatlerden kısa süreler: LaTeX Kaynaklarını Kullanma](https://tug.org/pracjourn/2005-4/hefferon/hefferon.pdf)
* [The LaTeX Companion. İkinci baskı](http://ptgmedia.pearsoncmg.com/images/9780201362992/samplepages/0201362996.pdf)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/tr/sinif-dosyalari/04-writing-your-own-class.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
