Akıllıca yerel {
... }
grupları kullanın
Bu cevapta belirtildiği gibi ~
, gibi aktif karakterler bir makro adı olarak kullanılabilir. Ne yazık ki, ~
varsayılan olarak tek aktif karakterdir ve başka bir karakter için kod kodunu değiştirmek pahalıdır: \catcode`!13
12 bayt sürer. Yeni makro tanımına yalnızca kodunuzun küçük bir bölgesinde ihtiyaç duyulursa, yerel gruplar bir çözüm olabilir.
TeX açılan yeni bir yerel gruba girdiğinde {
, iç tasarruf yığında yeni bir gruplama düzeyi oluşturur. Bu, mevcut tüm makro ve kayıtların kaydedildiği anlamına gelir. Bunlarda yapılacak herhangi bir değişiklik (açıkça işaretlenmediği sürece \global
) şu anda sadece grup tarafından kapatılana kadar aktif durumdadır }
. Bu, ~
bir grup içinde yeniden tanımlanabilecek, orada yeni tanımla kullanılan ve eski tanım, grup bittikten sonra otomatik olarak geri yükleneceği anlamına gelir.
İşte bir örnek:
\def~{abc}
~ -- {\def~{123}~} -- ~
Bu çıkışlar
abc - 123 - abc
Bu gruplandırma mekanizmasının ilginç bir yan etkisi, eski değerlerin orada değişinceye kadar grup içinde hala mevcut olmasıdır. Bunu göstermek için, bir sayacın değerini temel alan bir dizi karakter yazdırmak istediğimizi, bunları sabit bir uzunluğa kadar boşluklarla doldurup orijinal sayaç değeriyle devam etmek istediğimizi hayal edin. Bu, aşağıdakilerle başarılabilir:
\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.
hangi çıktılar
3 kez bir char yazdırın, 7 boşluk ile doldurun ve x = 3 ile devam edin.
Bu gruplama davranışı, TeX'in \loop ... \repeat
iç içe döngü için standart makrolarını kullanmak istiyorsanız özellikle önemlidir . Bu makrolar dahili komutları tanımlar ve nasıl ilerleyeceğinizi belirlemek için bunları kullanır. Onları iç halkayı diş tellerine sokmadan yerleştirmek, iç komutları şaşırtacak ve beklenmeyen davranışlara yol açacaktır.