Soubory tvarů a písem (SHX) jsou kompilovány ze souborů definic tvarů (SHP). Tyto definice lze vytvářet (nebo upravovat) libovolným textovým editorem umožňujícím volně pracovat se soubory ASCII.
Syntaxe popisu tvarů nebo znaku je vždy shodná bez ohledu na cílové použití (tvar vs. písmo) této definice. Pokud taková definice má být užívána jako písmo aplikace AutoCAD, první položka v souboru nepopisuje žádný znak, ale nese informaci o vlastním písmu. Pokud je tato úvodní položka popisem tvaru, bude vygenerován soubor tvarů.
Jednotlivé řádky v definici tvarů mohou dosahovat délky až 128 znaků. Delší řádky nelze kompilovat. Vzhledem k tomu, že aplikace ignoruje prázdné řádky a text napravo od středníku, lze do souborů s definicemi tvarů vkládat komentáře.
Popis každého tvaru začíná záhlavím a následuje jedna nebo více řádek se specifikačními bajty vlastní definice; ty jsou odděleny čárkami a ukončeny číslem 0.
*shapenumber,defbytes,shapenamespecbyte1,specbyte2,specbyte3,...,0
Jednotlivá pole definice tvaru mají následující význam:
Číslo (jedinečné pro soubor) mezi 1 a 258 (a u písem Unicode až po 32768), začínající hvězdičkou (*). Čísla 256, 257 a 258 jsou kromě písem Unicode vyhrazena pro znaky stupňů, +/- a průměru. Tyto symboly se v písmech Unicode zobrazují v číslech tvarů U+00B0, U+00B1 a U+2205 a jsou součástí rozšířené znakové sady “Latin A”.
Textová písma (soubory obsahující definice tvaru pro každý znak) vyžadují specifická čísla odpovídající hodnotě každého znaku v kódu ASCII; k jiným tvarům lze přiřadit libovolná čísla.
Počet datových bajtů ( specbajty ) vyžaduje popsat tvar, včetně ukončovací 0. Povoleno je maximálně 2000 bajtů na jeden tvar.
Název tvaru. Názvy tvarů musí být psány velkými písmeny. Názvy obsahující malá písmena jsou ignorována a slouží jako orientační popisy definic písem.
Specifikační bajt tvaru. Každý bajt je informací o směru a délce vektoru nebo jedním ze speciálních kódů. Bajt může být zapsán jako desítková nebo šestnáctková hodnota. Jestliže je první znak specifikačního bajtu 0 (nula), dva následující znaky jsou interpretovány jako šestnáctkové hodnoty.