Grammar-safe synonymization

Synonymization is the last refinement, not the first step. By the time you reach this guide, you should already have a readable draft, variables extracted, and structure in place. What is left: swap a handful of words for variety without breaking a single variant — in English, and in an inflected language like Russian, where case and gender make the cut harder to place.

The principle

Every {a|b} is a small cut inside an already-correct phrase. The cut must preserve everything around it: case, agreement, governance, articles, word order. If the swap changes any of those, the cut is in the wrong place and you need to bind a larger phrase.

Think of it this way: you are not choosing between two synonyms, you are choosing between two grammatically complete fragments that happen to differ by one word.

The practical test

Before writing any {a|b}, ask:

If I swap only this fragment, do case, agreement, governance, articles, and word order all remain correct?

If the answer is not an immediate yes, bind a larger phrase in one branch.

Synonymization rules

  • Structure first, synonyms last. Never add {a|b} before permutations, variables, and sentence shape are locked.
  • 2–4 options per slot is enough. Five is diminishing returns; ten starts producing awkward variants.
  • Same grammatical role in every branch. All options occupy the same slot: verb vs verb, noun vs noun, prepositional phrase vs prepositional phrase.
  • Preserve register. Do not mix a formal option with a casual one inside the same {a|b}.
  • Vary what matters. Changing "big" to "large" everywhere is noise. Changing verbs in topic sentences is variety.

Good

{offers|provides|features} live support

All three options occupy the same verb slot with the same subject and object.

for {teams|users|customers}

All three fit the same English prepositional slot.

Wrong

{secure|encrypted} connection

The preceding article is missing — one branch needs a, the other needs an. Bind the article inside:

{a secure|an encrypted} connection

Or bind the whole phrase:

{a secure connection|an encrypted connection}

English subject-verb agreement

Bind subject and verb together whenever they could disagree:

Wrong

{the team|all members} {responds|respond}

The two enumerations are independent — nothing prevents the output the team respond.

Right

{the team responds|all members respond}

Article and determiner binding

Any time the branch changes a noun's initial sound or number, pull the article into the branch:

  • Wrong: a {secure|encrypted} connection
  • Right: {a secure|an encrypted} connection
  • Wrong: the {result|results} (if "the" is fine but verb depends on number, re-bind the verb too)
  • Right: {the result is|the results are}

Inflected languages: Russian cases

English gets away with one noun form. Russian does not — case, gender and number have to agree across the whole phrase, and that is what makes the small {a|b} so often too small: the cut that is safe in English lands in the middle of an agreement chain in Russian. The rules below are written for Russian because that is the inflected language this site's authors ship most; the shapes transfer to Ukrainian, Belarusian, Serbian or German — any language where a preposition or a verb dictates the form of the noun after it.

The case table and the suffix convention

QuestionCaseVariable suffix
кто? что?Nominative%Visitors%
кого? чего?Genitive%VisitorsGen%
кому? чему?Dative%VisitorsDat%
кого? что?Accusative%VisitorsAcc%
кем? чем?Instrumental%VisitorsInstr%
о ком? о чём?Prepositional%VisitorsLoc%

Standard suffixes: Gen, Dat, Acc, Instr, Loc. No suffix means nominative. The naming follows the variables guide's PascalCaseWithSuffix convention for grammatical variants; create only the forms the template actually uses.

Case families: forms that must agree come from one roll

Declare variables as a family: one nominative and as many case forms as the templates really need. The rule that governs every family is simple to state and easy to break: forms that must agree have to come from one roll. The trap right under the example is what breaking it looks like; the ladder after it is how to keep variety without breaking it.

#def %Visitors%      = посетители
#def %VisitorsGen%   = посетителей
#def %VisitorsDat%   = посетителям
#def %VisitorsAcc%   = посетителей
#def %VisitorsInstr% = посетителями
#def %VisitorsLoc%   = посетителях

Rung 1 — pick synonyms that decline alike, and keep the endings outside the definition. One #def holds the stems, the case ending is written after each reference:

#def %e% = {магазин|сайт|проект}
о %e%е … для %e%а … к %e%у

One roll, every case, full variety, no second name: о магазине … для магазина … к магазину, never a mix. This rung is a selection criterion, not a restriction: test every branch against every case the template uses, and one differing ending disqualifies the branch — {больш|нов} breaks in the nominative alone (большый) and is fine in the other five.

Rung 2 — the endings agree but the stems differ: cut at the stem and reference it. The stem is one #def; every case form is another #def built from it, so the family keeps its named cases and its variety and still comes from one roll:

#def %s%           = {посетител|гост}
#def %Visitors%    = %s%и
#def %VisitorsGen% = %s%ей
%Visitors% — для %VisitorsGen%

Renders посетители — для посетителей or гости — для гостей, nothing else. The stem must be #def: swap that one line to #set and it re-rolls at every reference, and гости — для посетителей is back — the sharpest demonstration of the difference between the two directives there is.

Rung 3 — genuinely different declensions: the whole span in one enumeration, exactly as this whole guide says:

{посетители — для посетителей|гости — для гостей|клиенты — для клиентов}

The plural guide's warning against suffix concatenation is rung 1 seen from the failure side: concatenation is only safe for branches that decline alike, which is what the selection test guarantees.

#def or #set? While the value is a single word there is no difference: both directives render byte for byte the same. The difference appears the moment any variation enters the value, and it appears silently — #set substitutes its value afresh at every reference, so the same variable in two paragraphs can land on different words; #def rolls once per render and holds the result everywhere. Declaring case families with #def is therefore a cheap habit: it costs nothing today and keeps the text from drifting tomorrow, when someone adds an enumeration to the value.

Preposition + governed form, in one branch

Different prepositions demand different case forms. You cannot cut between them:

  • Wrong: {после|при} первом заказе — renders после первом заказе
  • Right: {после первого заказа|при первом заказе}

German has the same shape, with articles carrying the case:

  • Wrong: {mit|für} dem Team — renders für dem Team
  • Right: {mit dem Team|für das Team}

Gender and number

When the branches differ in gender or number, bind the whole phrase:

  • Wrong: {сайт|платформа} {удобен|удобна}
  • Right: {сайт удобен|платформа удобна}
  • Wrong: {команда|специалисты} {работает|доступны}
  • Right: {команда работает|специалисты доступны}

Verb governance

Different verbs demand different cases from their object — bind verb and object together:

  • Wrong: {получают|наслаждаются} широким каталогом
  • Right: {получают доступ к широкому каталогу|наслаждаются широким каталогом}

Quantifiers and case

A quantifier requires a specific case form of its noun — keep them together:

  • Wrong: {множество|различные} способов (множество takes genitive plural, различные takes nominative plural)
  • Right: {множество способов|различные методы}

Wrong

для {клиенты|пользователей}

Nominative and genitive mixed in one slot.

Right

для {клиентов|пользователей}

Or through a variable family:

для {%ClientsGen%|%UsersGen%}

Repeated-word collision

When two nearby {a|b} slots share a word, they can produce awkward repetition:

Users who {need to acquire the tool|do not own the tool} can {acquire|purchase} it here.

If both slots pick acquire, the result reads "need to acquire... can acquire". Fix: ensure the overlapping word appears in only one slot, or rephrase the other branch.

Common mistakes

Don'tWhyDo instead
Synonymize before structure is finalizedLocks grammar before you know the sentence shape.Do structure, variables, then synonyms.
Split subject and verb across a boundaryAgreement breaks in at least one variant.Bind subject+verb inside one branch.
Keep article outside the branch when branches change sound/numberProduces a encrypted or the results is.Pull the article (and noun if needed) into each branch.
Use a nominative noun in an oblique context (Russian)The case does not match the governing word.Use %VarGen%, %VarDat% and the other family forms.
Cut a preposition off its governed formThe case breaks in one of the branches.The whole "preposition + governed form" goes in one branch.
Cut a verb off its case requirementполучают каталогом — broken governance.Bind verb + object together.
Stack 6+ options per slotVariants grow awkward and register drifts.Cap at 2–4 high-quality options.
Synonymize narrative connectives"Therefore / Thus / Hence" change register mid-paragraph.Keep narrative connectives fixed.
Use the same word in two adjacent slotsOutput repeats mechanically.Ensure the overlap only lives in one slot.

Grammar checklist

  • Every enumeration branch holds a grammatically complete fragment in its own slot.
  • Every enumeration has been put through the practical test.
  • Subject-verb agreement works in every branch.
  • Articles and determiners are bound inside branches when sound or number changes (English).
  • Russian case forms are correct in every branch.
  • "Preposition + case" and "verb + case" pairs each live in one branch.
  • Gender and number agree across the phrase (noun phrase + predicate + adjectives).
  • No word appears in two adjacent enumerations.
  • Register stays consistent across all branches of a slot.
  • Five sample renders read naturally end to end.
  • No leftover %...%, {...}, or [...] in any sample.

Structure, variables, permutations, grammar — in that order. Come back to the mindset when you start a new article. The workflow is faster every time. And when a finished template still renders dirty, the fix is a recipe, not a rewrite: Repairing spintax templates.


Continue the series