add tag
निरंजन
If I understand it correctly, whenever one needs to use a register (e.g., `tl`, `str`) internally for their package; they are supposed to use `\⟨scope⟩__⟨module⟩_⟨name⟩_⟨register⟩` kind of syntax. Notice the double underscore in the name. It works okay, but when creating the documentation of the code, I get the following warning:

```
Package l3doc Warning: A control sequence of the form '...__' was used. It
(l3doc)                should only be used in the module '', not in 'xyz'.
```

What does this warning mean? How else shall I use internal registers?
Top Answer
F. Pantigny
A register with a name of the form `\<scope>__<module>_<name>_<type>` is a macro private of the module `<module>`. It should be defined and used only in the module whose name is `<module>`.

On the other side, a register with a name of the form `\<scope>_<module>_<name>_<type>` is public and may be used freely in other modules (but it's not meant to be used by the final LaTeX user).

Your L3 module should begin with an instruction of the form:

```
\ProvidesExplPackage
  { <module> }
  { <date_version> }
  { <version> }
  { <short description> }
```

(After that instruction, the `expl3` syntax is in force).

The names of the form `\<scope>__<module>_<name>_<type>` are allowed only in such a module.



Enter question or answer id or url (and optionally further answer ids/urls from the same question) from

Separate each id/url with a space. No need to list your own answers; they will be imported automatically.