ใช้กลุ่มท้องถิ่น{
... }
อย่างชาญฉลาด
ตามที่ระบุไว้ในคำตอบนี้ตัวอักษรที่ใช้งานเช่น~
สามารถใช้เป็นชื่อแมโคร น่าเสียดายที่~
เป็นเพียงตัวอักษรที่ใช้งานโดยค่าเริ่มต้นและการเปลี่ยน catcode สำหรับตัวละครอื่นนั้นมีราคาแพง: \catcode`!13
ใช้เวลา 12 ไบต์ หากต้องการนิยามแมโครใหม่เฉพาะในพื้นที่ขนาดเล็กของรหัสของคุณกลุ่มโลคัลสามารถเป็นโซลูชันได้
เมื่อ TeX เข้าสู่กลุ่มท้องถิ่นใหม่ที่เปิดโดย {
จะสร้างระดับการจัดกลุ่มใหม่ในสแตกการบันทึกภายใน ซึ่งหมายความว่าจะมีการบันทึกมาโครและรีจิสเตอร์ปัจจุบันทั้งหมด การแก้ไขใด ๆ ให้กับพวกเขา (ยกเว้นกรณีที่มีการทำเครื่องหมายอย่างชัดเจนว่า\global
) }
อยู่ในขณะนี้มีเพียงการใช้งานจนกว่ากลุ่มจะถูกปิดโดย ซึ่งหมายความว่า~
สามารถกำหนดได้ใหม่ภายในกลุ่มใช้ที่นั่นพร้อมกับคำจำกัดความใหม่และการกำหนดค่าแบบเก่าจะถูกกู้คืนโดยอัตโนมัติหลังจากที่กลุ่มเสร็จสิ้น
นี่คือตัวอย่าง:
\def~{abc}
~ -- {\def~{123}~} -- ~
ผลลัพธ์นี้
abc - 123 - abc
ผลข้างเคียงที่น่าสนใจของกลไกการจัดกลุ่มนี้คือค่าเก่ายังคงมีอยู่ในกลุ่มจนกว่าจะมีการเปลี่ยนแปลง เพื่อแสดงให้เห็นว่าจินตนาการเราต้องการพิมพ์จำนวนอักขระตามค่าของตัวนับวางด้วยช่องว่างยาวสูงสุดคงที่และไปกับค่าตัวนับเดิม สิ่งนี้สามารถทำได้โดยต่อไปนี้:
\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.
ซึ่งเอาท์พุท
พิมพ์ถ่าน 3 ครั้ง, pad พร้อม 7 ช่องว่างและดำเนินการต่อด้วย x = 3
พฤติกรรมการจัดกลุ่มนี้มีความสำคัญอย่างยิ่งหากคุณต้องการใช้มาโครมาตรฐานของ TeX สำหรับการวนลูป\loop ... \repeat
ซ้อนกัน มาโครเหล่านี้จะกำหนดคำสั่งภายในและใช้เพื่อกำหนดวิธีดำเนินการต่อ การวางซ้อนโดยไม่ใส่ห่วงด้านในเข้ากับเครื่องหมายปีกกาจะทำให้คำสั่งภายในสับสนและนำไปสู่พฤติกรรมที่ไม่คาดคิด