Gunakan lokal {
... }
grup dengan bijak
Seperti yang ditunjukkan dalam jawaban ini , karakter aktif seperti ~
dapat digunakan sebagai nama makro. Sayangnya, ~
ini adalah satu-satunya karakter aktif secara default, dan mengubah katcode untuk karakter lain itu mahal: \catcode`!13
membutuhkan 12 byte. Jika definisi makro baru hanya diperlukan di wilayah kecil kode Anda, grup lokal dapat menjadi solusi.
Ketika TeX memasuki grup lokal baru yang dibuka oleh {
, TeX menciptakan tingkat pengelompokan baru pada tumpukan penyimpanan internal. Ini berarti bahwa semua makro dan register saat ini disimpan. Setiap modifikasi terhadap mereka (kecuali ditandai secara eksplisit \global
) sekarang hanya aktif sampai grup ditutup oleh }
. Ini berarti bahwa ~
dapat didefinisikan ulang dalam suatu grup, digunakan di sana dengan definisi baru, dan definisi lama akan secara otomatis dikembalikan setelah grup selesai.
Ini sebuah contoh:
\def~{abc}
~ -- {\def~{123}~} -- ~
Ini output
abc - 123 - abc
Efek samping yang menarik dari mekanisme pengelompokan ini adalah bahwa nilai-nilai lama masih tersedia di dalam kelompok sampai mereka diubah di sana. Untuk mengilustrasikannya, bayangkan kita ingin mencetak sejumlah karakter berdasarkan nilai penghitung, padinya dengan spasi hingga panjang tetap, dan lanjutkan dengan nilai penghitung asli. Ini bisa dicapai dengan yang berikut:
\newcount\x
\x=3
Print a char \the\x\ times,
{\x=-\x \advance\x 10 pad with \the\x\ spaces,}
and go on with x=\the\x.
output yang mana
Cetak char 3 kali, pad dengan 7 spasi, dan lanjutkan dengan x = 3.
Perilaku pengelompokan ini sangat penting jika Anda ingin menggunakan makro standar TeX untuk looping \loop ... \repeat
bersarang. Makro ini menetapkan perintah internal dan menggunakannya untuk menentukan cara melanjutkan. Menempatkan mereka tanpa menempatkan loop internal ke dalam kawat gigi akan membingungkan perintah internal dan menyebabkan perilaku yang tidak terduga.