How can I keep paragraphs together?

How can I prevent page/column breaks between the glossary keyword and its defnition?

My glossary looks like this:

\p \k angel\k*
\p A winged flying creature

I use changes.txt to change “\p \k” to “\m \k”. How do I keep the \m and the \p paragraph together? Something is keeping \s section headings with their following paragraph. Should I change my glossary keywords to \s?

Eric,

This is untested, but I think something along these lines should work.

In your ptxprint-mods.tex file, add
\sethook{after}{k}{\penalty10000}

Thanks!
\sethook{after}{m}{\penalty10000}
does work, now how do I restrict it so that it only applies in GLO?

Once again, untested, but I think this works:
\sethook{after}{id:GLO|m}{\penalty10000}

One of the things I couldn’t remember was whether \penalty10000 applied to the beginning of the line it occurs on, or the end. I thought it occurred at the end, which is why I set the hook on {k}–because that would tell \k to stick to whatever comes below it. But maybe you tested that and it didn’t work.

{k} didn’t do anything, but {m} worked. Adding id:GLO doesn’t appear to change anything, so I guess it works. Probably the best practice would be to use a marker unique to the glossary instead of using \m.

By adding the id:GLO| you are already specifying ‘only in the GLO book’, so there’s no benefit to using another marker, unless you want to format it differently.
Even if you want to format \m differently in GLO, you can still leave the USFM unchanged, and format the marker id:GLO|m The only reason I’d use a special marker would be if it’s not a \m ‘at heart’.

FWIW, \penalty applies at exactly the place it’s met, whether that’s in horizontal (breaking a line of text into paragraphs) or vertical (breaking paragraphs into pages).
Since at the end of the \k it’s in horizontal mode, inserting it after the \k says ‘don’t start a new paragraph here’. TeX then meets the \p or \m which includes in its definition “If we are in horizontal mode, fill the paragraph with whatever has been specified and \penalty -10000, and so it breaks there instead (even if there were no end-of-par fill, penalties are not cumulative, so it would obediently not break at the 10000 and obediently break at the -10000).

FWIW2, Don’t get tempted to try to make a hook to try to insert a paragraph break after a character style. I tried it several ways, and concluded that it just gets the code really really confused if you ask it to set up a new paragraph while it’s processing the end of a character style.