diff options
author | Norbert Preining <norbert@preining.info> | 2020-03-15 03:01:24 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-03-15 03:01:24 +0000 |
commit | 87cddce361c3b477029d13b27bdaa57190b2d74b (patch) | |
tree | 0b8f15ef416645c1438cdc4228a1ddb44691b17c /macros/luatex/optex/maketoc.opm | |
parent | 942e56ba7d147d18d379305e76f064cec0aade7d (diff) |
CTAN sync 202003150301
Diffstat (limited to 'macros/luatex/optex/maketoc.opm')
-rw-r--r-- | macros/luatex/optex/maketoc.opm | 157 |
1 files changed, 92 insertions, 65 deletions
diff --git a/macros/luatex/optex/maketoc.opm b/macros/luatex/optex/maketoc.opm index 05df7d0d64..6589c66f72 100644 --- a/macros/luatex/optex/maketoc.opm +++ b/macros/luatex/optex/maketoc.opm @@ -1,6 +1,25 @@ %% This is part of OpTeX project, see http://petr.olsak.net/optex -\_codedecl \maketoc {maketoc <2020-02-14>} +\_codedecl \maketoc {Macros for maketoc <2020-02-14>} + + \_doc ------------------------------------ + `\_Xtoc{<level>}{<type>}{<number>}{<text>}` (in `.ref` file) reads the + specified data and saves it to the `\_toclist` as: + + \begtt + \_tocline{<level>}{<type>}{<number>}{<text>}{<gpageno>}{<pageno>} + where: + <level>: 0 reserved, 1: chapter, 2: section, 3: subsection + <type>: the type of the level, i.e. chap, sec, secc + <number>: the number of the chapter/section/subsection in the format 1.2.3 + <text>: the title text + <gpageno>: the page number numbered from 1 independently of pagination + <pageno>: the page number used in the pagination + \endtt + + The last two parameters are restored from previous + `\_Xpage{<pageno>}{<gpageno>}`, data are saved in the `\_currpage` macro. + \_cod ------------------------------------ \_def\_toclist{} \_newifi \_ifischap \_ischapfalse @@ -9,84 +28,92 @@ \_addto\_toclist{\_tocline{#1}{#2}{#3}{#4}} \_ea\_addto\_ea\_toclist\_ea{\_currpage}% } -\def\_tocline#1#2#3#4#5#6{\_bgroup - \_leftskip=\_iindent \_rightskip=2\_iindent - \_ifischap \_advance\_leftskip by \_iindent \_fi - \_def\_pg{\_ilink[pg:#5]}% - \_pretocline \_the\_tochook - \_ifcsname _tocl:#1\_endcsname - \_cs{_tocl:#1}{#3}{#4}{#6}\_nobreak \_hskip-2\_iindent\_null \_par - \_fi - \_egroup + + \_doc ------------------------------------ + `\_tocline{<level>}{<type>}{<number>}{<text>}{<gpageno>}{<pageno>}` prints + the record to the table of contents. It opens group, reduces `\_leftskip`, + `\_rightskip`, runs the `\everytocline` (user can customise the design of TOC + here) and runs `\_tocl:<level> {<number>}{<text>}{<page>}` macro. + This macro starts with vertical mode, + inserts one record with given <level> and ends in horizontal mode. Then + `\_tocline` appends `\_nobreak \_hskip-2\_iindent\_null \_par`. This causes + that the last line of the record is shifted outside the margin given by + `\_rightskip`. A typical record (with long <text>) looks like: + \begtt + | | + \llap{<number>} text text text text text + text text text text text + text text .................... <pageno> + \endtt + + Margins given by `\leftskip` and `\rightskip` are denoted by `|` in the + examle above. + \_cod ------------------------------------ + +\def\_tocline#1#2#3#4#5#6{% \_advance\_tocrefnum by1 + \_bgroup + \_leftskip=\_iindent \_rightskip=2\_iindent + \_ifischap \_advance\_leftskip by \_iindent \_fi + \_def\_pg{\_ilink[pg:#5]}% + \_the\_everytocline + \_ifcsname _tocl:#1\_endcsname + \_cs{_tocl:#1}{#3}{#4}{#6}\_nobreak \_hskip-2\_iindent\_null \_par + \_fi + \_egroup } + + \_doc ----------------------------------- + You can re-define default macros for each level of tocline if you want: + \_cod ----------------------------------- + \_sdef{_tocl:1}#1#2#3{\_nofirst\_bigskip \_bf\_llaptoclink{#1}{#2}\_hfill \_pg{#3}} \_sdef{_tocl:2}#1#2#3{\_llaptoclink{#1}{#2}\_tocdotfill \_pg{#3}} \_sdef{_tocl:3}#1#2#3{\_advance\_leftskip by\_iindent \_cs{_tocl:2}{#1}{#2}{#3}} -\_def\_llaptoclink#1{\_noindent \_llap{\_ilink[toc:\_the\_tocrefnum]{#1\enspace}}} -\_def\_tocdotfill{\_leaders\_hbox to.8em{\_hss.\_hss}\_hskip 1em plus1fill\_relax} + \_doc ----------------------------------- + The auxiliary macros are: + \begitems + * `\_llaptoclink<text>` does `\_noindent\_llap{<linked text>}`. + * `\_tocdotfill` creates dots in the TOC. + * `\_nofirst\macro` applies the `\macro` only if we don't print the first + record of the TOC. + * `\_pg{<pageno>}` creates <pageno> as link to real <gpage> saved in `#6` + of `\tocline`. + \enditems + \_cod ---------------------------------- + +\_def\_llaptoclink#1{\_noindent + \_llap{\_ilink[toc:\_the\_tocrefnum]{\_enspace#1\_kern.4em}\kern.1em}} +\_def\_tocdotfill{\_nobreak\_leaders\_hbox to.8em{\_hss.\_hss}\_hskip 1em plus1fill\_relax} \_def\_nofirst #1{\_ifnum \_lastpenalty=11333 \_else #1\_fi} -\_def\_pretocline{} + \_doc ----------------------------------- + `\maketoc` prints warning if TOC data is empty, lse it creates TOC by + running `\_toclist` + \_cod ---------------------------------- \_def\_maketoc{\_par \_ifx\_toclist\_empty \_opwarning{\_noexpand\maketoc -- data unavailable, TeX me again}\_openref - \_else \_begingroup \_tocrefnum=0 \_penalty11333 \_toclist \_endgroup \_fi} - -\_newtoks \_tochook - -\_public \maketoc \tochook ; - -\_endcode % ------------------------------------- - -`\_Xtoc{<level>}{<type>}{<number>}{<text>}` reads the specified -data from REF file and saves it to `\_toclist` as - -\begtt -\_tocline{<level>}{<type>}{<number>}{<text>}{<gpageno>}{<pageno>} -where: -<level>: 0 reserved, 1: chapter, 2: section, 3: subsection -<type>: the type of the level, i.e. chap, sec, secc (unused) -<number>: the number of the chapret/section/subsection in the format 1.2.3 -<text>: the title text -<gpageno>: the page number numbered from 1 independently of pagination -<pageno>: the page number used in the pagination -\endtt - -The last two parameters are restored from previous -`\_Xpage{<pageno>}{<gpageno>}`, data are saved in the `\_currpage` macro. - -`\_tocline{<level>}{<type>}{<number>}{<text>}{<gpageno>}{<pageno>}` prints -the record to the table of contents. It opens group, reduces `\_leftskip`, -`\_rightskip`, runs the `\tochook` (user can customise the design o TOC -here) and runs `\_tocl:<level> {<number>}{<text>}{<page>}` macro. -This macro starts with vertical mode, -inserts one record with given <level> and ends in horizontal mode. Then -`\_tocline` appends `\_nobreak \_hskip-2\_iindent\_null \_par`. This causes -that the last line of the record is shifted outside the margin given by -`\_rightskip`. A typical record (with long <text>) looks like: - -\begtt - | | -\llap{<number>} text text text text text - text text text text text - text text .................... <pageno> -\endtt - -Margins given by `\leftskip` and `\rightskip` are denoted by `|` in the -examle above. + \_else \_begingroup + \_tocrefnum=0 \_penalty11333 + \_the\_regtoc \_toclist + \_endgroup \_fi +} -You can re-define default macros for each level if you want. + \_doc ----------------------------------- + `\regmacro` appends its parameters to `\_regtoc`, `\_regmark` and + `\_regoul`. These token lists are used in `\maketoc`, `\_begoutput` and + `\pdfunidef`. + \_cod \_fin ----------------------------- -`\_llaptoclink<text>` does `\_noindent\_llap{<linked text>}`. +\_newtoks \_regtoc \_newtoks \_regmark \_newtoks \_regoul -`\_tocdotfill` creates dots in the TOC. +\_def\_regmacro #1#2#3{% + \_toksapp\_regtoc{#1}\_toksapp\_regmark{#2}\_toksapp\_regoul{#3}% +} -`\_nofirst\macro` applies the `\macro` only if we don't print the first -record of the TOC. +\_public \maketoc \regmacro ; -`\_pg{<pageno>}` creates <pageno> as link to real <gpage> saved in `#6`. +\_endcode -`\maketoc` prints warning if TOC data is empty, lse it creates TOC by -running `\_toclist` |