summaryrefslogtreecommitdiff
path: root/macros/luatex/optex/maketoc.opm
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-03-15 03:01:24 +0000
committerNorbert Preining <norbert@preining.info>2020-03-15 03:01:24 +0000
commit87cddce361c3b477029d13b27bdaa57190b2d74b (patch)
tree0b8f15ef416645c1438cdc4228a1ddb44691b17c /macros/luatex/optex/maketoc.opm
parent942e56ba7d147d18d379305e76f064cec0aade7d (diff)
CTAN sync 202003150301
Diffstat (limited to 'macros/luatex/optex/maketoc.opm')
-rw-r--r--macros/luatex/optex/maketoc.opm157
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`