This template puts the page on which it's used ({{FULLPAGENAME}}) into appropriate categories, based on certain page-naming and page-categorization conventions.

When used without parameters, it

  • places subpages of a book in the book's category (श्रेणी:पुस्तक:{{BOOKNAME}}) and sorts them by chapter name.
  • places a book's templates in the book's template category (श्रेणी:पुस्तक:{{BOOKNAME}}/साँचे). This only does the right thing if a book's templates begin with  साँचा:{{BOOKNAME}} .
  • places a book's template category in the book's category and in  श्रेणी:पुस्तक-विशेषक साँचे .
  • places any other category in its parent, sorted by the category's last name. The parent has the same name except removing everything from the last slash on; and the last name is the part that was removed after that last slash. For example, Category:My Book/Images  would go in  Category:My Book  with sort key  Images .

Optional parameter  filing=deep  changes the behavior on book pages, so that a book page with more than one slash in its name is placed in a subcategory of the category where its parent page would be placed, sorted by the page's last name. For example, using  {{BookCat|filing=deep}}  on page  My Book/Maps/Asia  would put that page in  Category:My Book/Maps  with sort key  Asia .

Optional parameter  template-filing=deep  changes the behavior on template pages to deep filing (so  Template:My book/Maps/Asia  would go in  Category:My book/Templates/Maps).

Optional parameter  sort or sortkey specifies a sort key to be used for categorization instead of relying on {{BOOKSORTKEY}}.

Optional first unnamed parameter is a full page name to use instead of the {{FULLPAGENAME}} of the current page.

An alternative template {{BookCat/diagnose}} reports the output of {{BookCat}} (with or without parameters) as an inert string, rather than categorizing the current page.

This template itself only contains the logic to sort out the identity of the target page; deducing the appropriate categorization is then delegated to {{BookCat/core}}. As of this writing, parameters assembled here are namespace, pagename, fullpagename, and sortkey; the first unnamed parameter is removed, and all other parameters are passed through to the subtemplate.