15.5.1 @set and @value

You use the @set command to specify a value for a flag, which is later expanded by the @value command.

A flag (aka variable) name is an identifier starting with an alphanumeric, ‘-’, or ‘_’. Subsequent characters, if any, may not be whitespace, ‘@’, braces, angle brackets, or any of ‘~`^+|’; other characters, such as ‘%’, may work. However, it is best to use only letters and numerals in a flag name, not ‘-’ or ‘_’ or others—they will work in some contexts, but not all, due to limitations in TeX.

The value is the remainder of the input line, and can contain anything.

Write the @set command like this:

@set foo This is a string.

This sets the value of the flag foo to “This is a string.”.

The Texinfo processors then replace a @value{flag} command with the string to which flag is set. Thus, when foo is set as shown above, the Texinfo processors convert this:

to this:
This is a string.

You can write a @value command within a paragraph; but you must write a @set command on a line of its own.

If you write the @set command like this:

@set foo

without specifying a string, the value of foo is the empty string.

If you clear a previously set flag with @clear flag, a subsequent @value{flag} command will report an error.

For example, if you set foo as follows:

@set howmuch very, very, very

then the processors transform

It is a @value{howmuch} wet day.
It is a very, very, very wet day.

If you write

@clear howmuch

then the processors transform

It is a @value{howmuch} wet day.
It is a {No value for "howmuch"} wet day.

@value cannot be reliably used as the argument to an accent command (see Inserting Accents). For example, this fails:

@set myletter a