> 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/bilgi-bankasi/064-how-does-overleaf-compile-my-project.md).

# Overleaf projemi nasıl derler?

## LaTeX derlemesini otomatikleştirme

Dizin içeriği, şekiller listeleri, çapraz başvurular, sözlükler, indeksleme ve bibliyografik atıflar gibi özellikleri desteklemek için LaTeX, çok aşamalı bir dizgi oluşturma süreci kullanır: bir aşamada (derleme) üretilen veriler dosyaya/dosyalara yazılır ve gerekirse sonraki aşama/aşamalar için girdi olarak kullanılır. Aşağıdaki video, Overleaf projenizdeki “Yeniden derle” düğmesine her tıkladığınızda ne olduğunu gösterir:

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/Uo3I2FXEI8H6aFPBZq171/e2139f9575a4db6955dc2278dc08283c/latexmk-ol.mp4>" %}

Elle derleme yapılırken genellikle başka bir LaTeX çalıştırmasının (aşamasının) gerekli olup olmadığı açıktır; ancak LaTeX derlemesini otomatikleştirmek bir dizi zorluk ortaya çıkarır. Otomatik çözümler için kilit zorluklardan biri şunu belirlemektir *kaç* LaTeX aşamasının (derlemesinin), herhangi bir veri bağımlılığını çözmek için gerekli olduğu; böylece son dizgiye geçirilmiş belgenin güncel ve eksiksiz olmasının sağlanmasıdır. Bir diğer karmaşıklık ise, belgenin içeriğinin bazı kısımlarını ön işlemek için çalıştırılması gereken dış programları doğru biçimde belirlemektir—örneğin başvuru listeleri üretmek için BibTeX/BibLaTeX çalıştırmak veya şu tür daha uzman grafik uygulamalarını yürütmek gibi [MetaPost](https://tug.org/metapost.html) ya da [Asymptote](https://asymptote.sourceforge.io/).

## latexmk’in tanıtımı

Derlemeyi otomatikleştirmek için köklü paketlerden biri [`latexmk`](https://ctan.org/pkg/latexmk?lang=en)dir; TeX Live’a dahil edilen ve Overleaf tarafından LaTeX projelerinizi derlemek için kullanılan büyük bir Perl betiğidir. `latexmk` gereken sayıda LaTeX çalıştırmasını otomatik olarak tetikler ve belgenizin içeriğinin bölümlerini işlemek için gereken dış (yardımcı) programları yürütür.

### latexmk’i özelleştirme

Her ne kadar `latexmk` son derece çok yönlü olsa da, farklı LaTeX derleme ortamları ve belgenin son derece geniş tür yelpazesi, `latexmk` in düşünülebilecek her türlü LaTeX belgesinin ihtiyaçlarını tam olarak destekleyen otomatik çözümler sunmaya çalışmasını pratik olmaktan çıkarır. Bunun yerine, `latexmk` ’in davranışı yapılandırma dosyaları aracılığıyla özelleştirilebilir *uygulanan **Perl***:

* ortamı/platformu için özel olarak hazırlanmış bir “sistem genelinde” yapılandırma dosyası ve
* belgeye özgü gereksinimleri karşılayan kullanıcı düzeyinde bir yapılandırma dosyası

Bu [`latexmk kılavuzu`](http://mirrors.ctan.org/support/latexmk/latexmk.pdf) yapılandırma dosyalarının kurulumu ve kullanımı hakkında daha fazla ayrıntı sağlar.

## Overleaf’in LatexMk dosyası

Overleaf’in “sistem genelinde” yapılandırma dosyası `latexmk` kurallarını izler (Linux için): adı `**LatexMk**` ve bulunduğu klasör `/usr/local/share/latexmk/`. **Not**olup bu dosya *önce* herhangi bir kullanıcı düzeyindeki yapılandırma dosyasından önce okunur.

Kullanıcı düzeyindeki yapılandırma dosyalarının adı `latexmkrc` olmalı ve Overleaf LaTeX projenizin/belgenizin özel gereksinimlerini karşılayan özel kurallar sağlamak için Overleaf projenize eklenmelidir.

Overleaf’in `LatexMk` dosyası, Overleaf’e özgü işlem için kodun yanı sıra sözlükler, adlandırma ve sık kullanılan diğer paketler için kurallar içerir. Overleaf’in `LatexMk` dosyasında, TeX Live’ın kendi içindeki paketler ve yazılım araçlarında yapılan değişiklik ve güncellemelere uyum sağlamak için TeX Live sürümleri arasında bazı farklılıklar olabilir.

### LaTeX’in derleme kipini değiştirme

Varsayılan olarak Overleaf, latexmk’e bizim (Overleaf) şu olarak adlandırdığımız bir derleme kipini kullanmasını söyler **Hatalara rağmen derlemeyi dene**at son hata kipine. [LaTeX derleme hataları](/latex/tr/latex-temelleri/05-errors.md). Bu derleme kipinde LaTeX derleyicisi,

Yeniden derleme, PDF üretilmeden önce bile durabilir, ancak içinde hatalı çıktı bulunabilir. Çoğu zaman derleme hataları LaTeX derleyicisinin düzeltemeyeceği kadar ciddi ya da çok sayıda olabilir; bu durumda yine de bir PDF üretmeden “vazgeçebilir”. [İlk Hata Üzerinde Dur derleme kipini kullanma](/latex/tr/bilgi-bankasi/149-using-the-stop-on-first-error-compilation-mode.md) Tekniniz bağlı olduğu gibi?

### Overleaf’in LatexMk dosyasının bir kopyasına nasıl erişilir

Aşağıdaki bağlantı, Overleaf `LatexMk` dosyasını dizgiye geçirmek için bir proje açar; bu dosya projenizin LaTeX derleyicisi ve TeX Live sürümüyle kullanılır ve ayrıca indirme için kullanılabilir hale getirir:

```latex
\documentclass[a4paper]{article}
\usepackage[margin=1cm]{geometry}
\usepackage{verbatim,shellesc}
\ShellEscape{cp /usr/local/share/latexmk/LatexMk ./LatexMk}
\begin{document}
\section*{Bu proje hakkında}
Bu proje, Overleaf tarafından kullanılan sistem \texttt{LatexMk} başlatma (yapılandırma) dosyasına erişim sağlar. \texttt{LatexMk}, projede seçilen \TeX{} Live sürümüne ve derleyiciye göre biraz değişebilen bir Perl betiğidir. Hangi \texttt{LatexMk}'in kullanıldığından %100 emin olmanız gerekiyorsa, bu projedeki kodu kendi projenize ekleyin ve \texttt{LatexMk}'in bir listesini dizgiye geçirmek ve çıktı dosyalarından biri olarak indirmeye sunmak için derleyin.
\section*{\texttt{LatexMk} dosyasının listelenmesi}
\verbatiminput{./LatexMk}
\end{document}
```

[Bu kodu Overleaf’te açın.](https://www.overleaf.com/docs?engine=\&snip_name=Display+Overleaf+latexmkrc+file\&snip=%5Cdocumentclass%5Ba4paper%5D%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D1cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%2Cshellesc%7D%0A%5CShellEscape%7Bcp+%2Fusr%2Flocal%2Fshare%2Flatexmk%2FLatexMk+.%2FLatexMk%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csection%2A%7BAbout+this+project%7D%0AThis+project+provides+access+to+the+system+%5Ctexttt%7BLatexMk%7D+initialization+%28configuration%29+file+used+by+Overleaf.++%5Ctexttt%7BLatexMk%7D+is+a+Perl+script+which+may+vary+slightly+according+to+the+%5CTeX%7B%7D+Live+version+and+compiler+chosen+for+the+project.+If+you+need+to+be+100%5C%25+certain+which++%5Ctexttt%7BLatexMk%7D+is+being+used%2C+add+code+from+this+project+to+your+project+and+compile+to+typeset+a+listing+of+%5Ctexttt%7BLatexMk%7D+and+make+it+available+for+download+as+one+of+the+output+files.%0A%5Csection%2A%7BListing+the+%5Ctexttt%7BLatexMk%7D+file%7D%0A%5Cverbatiminput%7B.%2FLatexMk%7D%0A%5Cend%7Bdocument%7D)

Yukarıdaki proje derlendikten sonra, `LatexMk` dosyası **Günlükler ve çıktı dosyaları** düğmesi aracılığıyla aşağıdaki kısa video klibinde gösterildiği gibi indirilebilir:

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/1re6AeMUF2EQnlZ8Cse5ke/ae6ee91fa7e2b2efa8ffb27ad8bab1a0/latexmkrc.mp4>" %}

### Diğer notlar ve tavsiyeler

Projenizi derlemek için kullanılan TeX Live sürümünü ayarlamak veya kontrol etmek isterseniz lütfen bu [Overleaf blog yazısına](https://www.overleaf.com/blog/new-feature-select-your-tex-live-compiler-version#How-Switch) veya aşağıdaki görsele bakın:

![Overleaf TeX Live sürümünü seçme](/files/e19396af84cdf58e1d92d36142e0fe54757d879d)

Overleaf projenizi latexmk kullanarak çevrimdışı derlemek istiyorsanız, Overleaf’in derleme sürecini uyguladığından emin olmak için Overleaf’in LatexMk dosyasının bir kopyasını kullanmak isteyebilirsiniz—Overleaf’in iş adının output olarak ayarlandığını unutmayın.

Overleaf projeleri latexmk’in `-cd` komut satırı bayrağını kullanarak derler ve derleme her zaman projenin kök dizininden yürütülür. Bazı `latexmk` seçeneklerin Overleaf ile uyumlu olmadığını unutmayın—özellikle, `$preview_continuous_mode` ya da `$output_dir` seçeneklerini ayarlarsanız, bu Overleaf üzerindeki önizlemeyi bozabilir.

hakkında daha fazla bilgi için `latexmkrc` dosyaları okuyun, şu makaleye bakın [latexmkrc’yi Overleaf ile nasıl kullanılır](/latex/tr/derinlemesine-makaleler/28-how-to-use-latexmkrc-with-overleaf.md) ki bu makale dostça Overleaf TeXpert’lerimizden yararlı ipuçları ve püf noktaları içerir.

## Overleaf’in LatexMk dosyasının listesi (2023)

Kolaylık olması için, aşağıdaki liste Overleaf’in `LatexMk` dosyasını TeX Live 2023 ile kullanıldığı haliyle gösterir—en güncel sürüme erişmek için yukarıdaki bağlantıyı kullanın.

```perl
# Ayarlar
$xdvipdfmx = "xdvipdfmx -z 6 -i dvipdfmx-unsafe.cfg -o %D %O %S";

# pstricks saydamlığını sağlamak için geçici çözüm (https://github.com/overleaf/issues/issues/3449)
$dvipdf = "dvipdf -dNOSAFER -dALLOWPSTRANSPARENCY %O %S %D";

###############################
# pdf dosyasının sonradan işlenmesi #
###############################

$compiling_cmd = "internal overleaf_pre_process %T %D";
$success_cmd = "internal overleaf_post_process %T %D";
$failure_cmd = $success_cmd;

# -gt seçeneğine eşdeğer. latexmk’in yeniden derlemeyi atlamasını önlemek için kullanılır
# output.log ve output.pdf’nin
$go_mode = 3;

# -bibtex seçeneğine eşdeğer. bbl dosyaları
# güncel olmadığında bibtex’i koşulsuz çalıştır.
$bibtex_use = 2;

my $ORIG_PDF_AGE;

sub overleaf_pre_process {
    my $source_file = $_[0];
    my $output_file = $_[1];

    # varsa mevcut pdf’nin yaşını al
    $ORIG_PDF_AGE = -M $output_file
}

sub overleaf_post_process {
    my $source_file = $_[0];
    my $output_file = $_[1];
    my $source_without_ext = $source_file =~ s/\.tex$//r;
    my $output_without_ext = $output_file =~ s/\.pdf$//r;

    # bir knitr concordance dosyası ara
    my $concordance_file = "${source_without_ext}-concordance.tex";
    if (-e $concordance_file) {
        "knitr için synctex dosyası yamalanıyor...\n" yazdır.
        system("patchSynctex.R", $source_without_ext, $output_without_ext);
    }

    # pdf dosyası yoksa veya güncellenmediyse erken dön
    my $NEW_PDF_AGE = -M $output_file;
    return if !defined($NEW_PDF_AGE);
    return if defined($ORIG_PDF_AGE) && $NEW_PDF_AGE == $ORIG_PDF_AGE;

    # qpdf’nin nerede olduğunu bul
    $qpdf //= "/usr/bin/qpdf";
    $qpdf = $ENV{QPDF} if defined($ENV{QPDF}) && -x $ENV{QPDF};
    return if ! -x $qpdf;
    $qpdf_opts //= "--linearize --newline-before-endstream";
    $qpdf_opts = $ENV{QPDF_OPTS} if defined($ENV{QPDF_OPTS});

    # qpdf’yi çalıştır
    my $optimised_file = "${output_file}.opt";
    system($qpdf, split(' ', $qpdf_opts), $output_file, $optimised_file);
    $qpdf_exit_code = ($? >> 8);
    "qpdf çıkış kodu=$qpdf_exit_code\n" yazdır.

    # qpdf başarılı olursa çıktı dosyasını değiştir
    # qpdf başarı için 0, uyarılar için 3 döndürür (çıktı pdf’si yine de oluşturulur)
    return if !($qpdf_exit_code == 0 || $qpdf_exit_code == 3);
    "optimize edilmiş dosya $output_file olarak yeniden adlandırılıyor\n" yazdır.
    rename($optimised_file, $output_file);

    "$output_file için xref tablosu çıkarılıyor\n" yazdır.
    my $xref_file = "${output_file}xref";
    system("$qpdf --show-xref ${output_file} > ${xref_file}");
    $qpdf_xref_exit_code = ($? >> 8);
    "qpdf --show-xref çıkış kodu=$qpdf_xref_exit_code\n" yazdır.
}

##############
# Sözlükler #
##############
add_cus_dep( 'glo', 'gls', 0, 'glo2gls' );
add_cus_dep( 'acn', 'acr', 0, 'glo2gls');  # Overleaf v1’den
sub glo2gls {
    system("makeglossaries $_[0]");
}

#############
# makeindex #
#############
@ist = glob("*.ist");
if (scalar(@ist) > 0) {
    $makeindex = "makeindex -s $ist[0] %O -o %D %S";
}

################
# adlandırma #
################
add_cus_dep("nlo", "nls", 0, "nlo2nls");
sub nlo2nls {
        system("makeindex $_[0].nlo -s nomencl.ist -o $_[0].nls -t $_[0].nlg");
}

#########
# Knitr #
#########
add_cus_dep( 'Rtex', 'tex', 0, 'do_knitr');
add_cus_dep( 'Rnw', 'tex', 0, 'do_knitr');
sub do_knitr {
    Run_subst(qq{Rscript -e '
        library("knitr");
        opts_knit\$set(concordance=T);
        knitr::knit(%S, output=%D);
        '}
    );
}

##########
# feynmf #
##########
push(@file_not_found, '^feynmf: Files .* and (.*) not found:$');
add_cus_dep("mf", "tfm", 0, "mf_to_tfm");
sub mf_to_tfm { system("mf '\\mode:=laserjet; input $_[0]'"); }

push(@file_not_found, '^feynmf: Label file (.*) not found:$');
add_cus_dep("mf", "t1", 0, "mf_to_label1");
sub mf_to_label1 { system("mf '\\mode:=laserjet; input $_[0]' && touch $_[0].t1"); }
add_cus_dep("mf", "t2", 0, "mf_to_label2");
sub mf_to_label2 { system("mf '\\mode:=laserjet; input $_[0]' && touch $_[0].t2"); }
add_cus_dep("mf", "t3", 0, "mf_to_label3");
sub mf_to_label3 { system("mf '\\mode:=laserjet; input $_[0]' && touch $_[0].t3"); }
add_cus_dep("mf", "t4", 0, "mf_to_label4");
sub mf_to_label4 { system("mf '\\mode:=laserjet; input $_[0]' && touch $_[0].t4"); }
add_cus_dep("mf", "t5", 0, "mf_to_label5");
sub mf_to_label5 { system("mf '\\mode:=laserjet; input $_[0]' && touch $_[0].t5"); }
add_cus_dep("mf", "t6", 0, "mf_to_label6");
sub mf_to_label6 { system("mf '\\mode:=laserjet; input $_[0]' && touch $_[0].t6"); }
add_cus_dep("mf", "t7", 0, "mf_to_label7");
sub mf_to_label7 { system("mf '\\mode:=laserjet; input $_[0]' && touch $_[0].t7"); }
add_cus_dep("mf", "t8", 0, "mf_to_label8");
sub mf_to_label8 { system("mf '\\mode:=laserjet; input $_[0]' && touch $_[0].t8"); }
add_cus_dep("mf", "t9", 0, "mf_to_label9");
sub mf_to_label9 { system("mf '\\mode:=laserjet; input $_[0]' && touch $_[0].t9"); }

##########
# feynmp #
##########
push(@file_not_found, '^dvipdf: Could not find figure file (.*); continuing.$');
add_cus_dep("mp", "1", 0, "mp_to_eps");
sub mp_to_eps {
    system("mpost $_[0]");
    return 0;
}

#############
# asymptote #
#############

sub asy {return system("asy \"$_[0]\"");}
add_cus_dep("asy","eps",0,"asy");
add_cus_dep("asy","pdf",0,"asy");
add_cus_dep("asy","tex",0,"asy");

#############
# metapost  #  # Overleaf v1’den
#############
add_cus_dep('mp', '1', 0, 'mpost');
sub mpost {
    my $file = $_[0];
    my ($name, $path) = fileparse($file);
    pushd($path);
    my $return = system "mpost $name";
    popd();
    return $return;
}

##########
# chktex #
##########
'output.chktex' varsa 'output.chktex' dosyasını sil
if (defined $ENV{'CHKTEX_OPTIONS'}) {
    use File::Basename;
    use Cwd;

    # ana dosyayı belirle
    my $target = $ARGV[-1];
    my $file = basename($target);

    if ($file =~ /\.tex$/) {
        # sınırlı kapsam için dizini değiştir
        my $orig_dir = cwd();
        my $subdir = dirname($target);
        chdir($subdir);
        # ana dosyada chktex çalıştır
        $status = system("/usr/local/bin/run-chktex.sh", $orig_dir, $file);
        # özgün dizine geri dön
        chdir($orig_dir);

        # VALIDATE modunda chktex çalıştırıldıktan sonra her zaman çıkarız
        # aksi halde EXIT_ON_ERROR ayarlıysa çıkarız

        if ($ENV{'CHKTEX_EXIT_ON_ERROR'} || $ENV{'CHKTEX_VALIDATE'}) {
            # chktex hata bilgisine çıkış durumundan erişmemize izin vermez
            # bu yüzden çıktıyı incele
            open(my $fh, "<", "output.chktex");
            my $errors = 0;
            {
                local $/ = "\n";
                while(<$fh>) {
                    if (/^\S+:\d+:\d+: Error:/) {
                        $errors++;
                        print;
                    }
                }
            }
            close($fh);
            $errors > 0 ise exit(1)
            CHKTEX_VALIDATE ayarlıysa exit(0)
        }
    }
}
```


---

# 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/bilgi-bankasi/064-how-does-overleaf-compile-my-project.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.
