diff options
author | Norbert Preining <norbert@preining.info> | 2020-05-07 03:01:09 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-05-07 03:01:09 +0000 |
commit | 56bd1f5b8377f54b4af39a114362a7762d27f13c (patch) | |
tree | 882c573288f2a3f158b490ea3de1672fca9e94a9 /macros/luatex/optex/sections.opm | |
parent | 36d8a5cd45b5a96007208a0d5b1f52e708d0fec8 (diff) |
CTAN sync 202005070301
Diffstat (limited to 'macros/luatex/optex/sections.opm')
-rw-r--r-- | macros/luatex/optex/sections.opm | 410 |
1 files changed, 0 insertions, 410 deletions
diff --git a/macros/luatex/optex/sections.opm b/macros/luatex/optex/sections.opm deleted file mode 100644 index bbe599c533..0000000000 --- a/macros/luatex/optex/sections.opm +++ /dev/null @@ -1,410 +0,0 @@ -%% This is part of OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \chap {Titles, chapters, sections, subsections <2020-03-14>} % preloaded in format - - \_doc --------------------------- - We are using scaled fonts for titles - \`\_titfont`, \`\_chapfont`, \`\_secfont` and \`\_seccfont`. - They are scaled from main fonts size - of the document, which is declared by first `\typosize[<fo-size>/<b-size>]` - command. - \_cod --------------------------- - -\_def \_titfont {\_scalemain\_boldify\_typoscale[\_magstep4/\_magstep5]} -\_def \_chapfont {\_scalemain\_boldify\_typoscale[\_magstep3/\_magstep3]} -\_def \_secfont {\_scalemain\_boldify\_typoscale[\_magstep2/\_magstep2]} -\_def \_seccfont {\_scalemain\_boldify\_typoscale[\_magstep1/\_magstep1]} - - \_doc --------------------------- - The \`\tit` macro is defined by `\eoldef`, it means that the parameter is - separated by end of line. The macros `\chap`, `\sec` and `\secc` use - `\eoldef` too. - \_cod --------------------------- - -\_eoldef\_tit #1{\_vglue\_titskip - {\_leftskip=0pt plus1fill \_rightskip=\_leftskip % centering - \_titfont \_noindent #1\_par}% - \_nobreak\_bigskip -} -\_public \tit ; - - \_doc --------------------------- - You can re-define \`\_printchap`, \`\_printsec` or \`\_printsecc` macros if - another design of section titles is needed. These macros gets the - `<title>` text in its parameter. The common recommendations for these macros are: - \begitems - * Use \^`\_abovetitle``{<penaltyA>}{<skipA>}` and \^`\_belowtitle``{<skipB>}` - for inserting vertical material above and below the section title. - The arguments of these macros are normally used, i.\,e.\ \^`\_abovetitle` - inserts `<penaltyA><skipA>` and \^`\_belowtitle` inserts `<skipB>`. - But there is an - exception: if \^`\_belowtitle``{<skipB>}` is immediately followed by - \^`\_abovetitle``{<penaltyA>}{<skipA>}` (for example section title is - immediately followed by subsection title), then only `<skipA>` is generated, - i.\,e.\ `<skipB><penaltyA><skipA>` is reduced only to `<skipA>`. - The reason of such behavior: we don't want to duplicate vertical skip - and we don't want to use negative penalty in such cases. - Moreover, \^`\_abovetitle``{<penaltyA>}{<skipA>}` takes previous whatever - vertical skip (other than from `\_belowtitle`) and generates only - greater from this pair of skips. It means that `<whatever-skip><penaltyA><skipA>` - is transformed to `<penaltyA>`max(`<whatever-skip><skipA>`). - The reason of such behavior: we don't want to - duplicate vertical skips (from `\_belowlistskip`, for example) above the title. - * Use \^`\_printrefnum``[<pre>@<post>]` in horizontal mode. It prints - `<pre><ref-num><post>`. The `<ref-num>` is \^`\_thechapnum` or \^`\_thesecnum` - or \^`\_theseccnum` depending on what type o title is processed. - If \^`\nonum` prefix is used then \^`\_printrefnum` prints nothing. - The macro \^`\_printrefnum` does more work: it creates destination of hyperlinks - (if \^`\hyperlinks``{}{}` is used) and saves references from label (if - \^`\label``[<label>]` precedes) and saves references for table of contents - (if \^`\maketoc` is used). - * Use \^`\nbpar` for closing the paragraph for printing title. This - command inserts `\_nobreak` between each line of such paragraph, so - the title cannot be broken to more pages. - * You can use \^`\_firstnoindent` in order to the first paragraph after - the title is not indented. - \enditems - \_cod --------------------------- - -\_def\_printchap #1{\_vfill\_supereject - {\_chapfont \_noindent \_mtext{chap} \_printrefnum[@]\_par - \_nobreak\_smallskip - \_noindent \_raggedright #1\_nbpar}\_mark{}% - \_nobreak \_belowtitle{\_bigskip}% - \_firstnoindent -} -\_def\_printsec#1{\_par - \_abovetitle{\_penalty-400}\_bigskip - {\_secfont \_noindent \_raggedright \_printrefnum[@\_quad]#1\_nbpar}\_insertmark{#1}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} -\_def\_printsecc#1{\_par - \_abovetitle{\_penalty-200}\_medskip - {\_seccfont \_noindent \_raggedright \_printrefnum[@\_quad]#1\_nbpar}% - \_nobreak \_belowtitle{\_medskip}% - \_firstnoindent -} - - \_doc -------------------------- - The \`\_sectionlevel` is the level of the printed section: - \begitems - * `\_sectionlevel=0` -- reserved for parts of the book (unused by default) - * `\_sectionlevel=1` -- chapters (used in `\chap`) - * `\_sectionlevel=2` -- sections (used in `\sec`) - * `\_sectionlevel=3` -- subsections (used in `\secc`) - * `\_sectionlevel=4` -- subsubsections (unused by default) - \enditems - \_cod -------------------------- - -\_newcount\_sectionlevel -\_def \_secinfo {\_ifcase \_sectionlevel - part\_or chap\_or sec\_or secc\_or seccc\_fi -} - - \_doc -------------------------- - The \`\_chapx` initializes counters used in chapters, - the \`\_secx` initializes counters in sections - and \`\_seccx` initializes counters in subsections. - If you have more types of numbered objects in your document then you can - declare appropriate counters and do `\addto\_chapx{\yourcounter=0 }` - for example. If you have another concept of numbering objects used in your - document, you can re-define these macros. All settings here are global - because it is used by `{\_globaldefs=1 \_chapx}`. - - Default concept: Tables, figuers and display maths are numbered - from one in each section -- subsetions doesn't reset these counters. - Footnotes declared by \^`\fnotenumchapters` are numbered in each chapter - from one. - - The `\_the*` macros - \`\_thechapnum`, \`\_thesecnum`, \`\_theseccnum`, - \`\_thetnum`, \`\_thefnum` and \`\_thednum` - include the format of numbers used when the object - is printing. If chapter is never used in the document then `\_chapnum=0` - and \`\_othe``\_chapnum.` expands to empty. Sections have numbers <num> and - subsections <num>.<num>. On the other hand, if chapter is used in the - document then `\_chapnum>0` and sections have numbers` <num>.<num>` - and subsections have numbers `<num>.<num>.<num>`. - - \_cod -------------------------- - -\_newcount \_chapnum % chapters -\_newcount \_secnum % sections -\_newcount \_seccnum % subsections -\_newcount \_tnum % table numbers -\_newcount \_fnum % figure numbers -\_newcount \_dnum % numbered display maths - -\_def \_chapx {\_secx \_secnum=0 \_lfnotenum=0 } -\_def \_secx {\_seccx \_seccnum=0 \_tnum=0 \_fnum=0 \_dnum=0 \_resetABCDE } -\_def \_seccx {} - -\_def \_thechapnum {\_the\_chapnum} -\_def \_thesecnum {\_othe\_chapnum.\_the\_secnum} -\_def \_theseccnum {\_othe\_chapnum.\_the\_secnum.\_the\_seccnum} -\_def \_thetnum {\_othe\_chapnum.\_the\_secnum.\_the\_tnum} -\_def \_thefnum {\_othe\_chapnum.\_the\_secnum.\_the\_fnum} -\_def \_thednum {(\_the\_dnum)} - -\_def\_othe #1.{\_ifnum#1>0 \_the#1.\_fi} -\_def\_incr #1{\_global\_advance#1by1 } - - \_doc ---------------------------- - The \`\notoc` and \`\nonum` prefixes are implemented by - internal `\_ifnotoc` and `\_ifnonum`. They are reset - after each chapter/section/subsection by the \`\_resetnonumnotoc` macro. - \_cod ---------------------------- - -\_newifi \_ifnotoc \_notocfalse \_def\_notoc {\_global\_notoctrue} -\_newifi \_ifnonum \_nonumfalse \_def\_nonum {\_global\_nonumtrue} -\_def \_resetnonumnotoc{\_global\_notocfalse \_global\_nonumfalse} -\_public \notoc \nonum ; - - \_doc ---------------------------- - The \`\chap`, \`\sec` and \`\secc` macros are implemented here. - The \`\_inchap`, \`\_insec` and \`\_insecc` macros does the real work, - First, we read the optional parameter `[<label>]`, if it exists. - \_cod ---------------------------- - -\_optdef\_chap[]{\_trylabel \_inchap} -\_optdef\_sec []{\_trylabel \_insec} -\_optdef\_secc[]{\_trylabel \_insecc} -\_def\_trylabel{\_istoksempty\_opt\_iffalse \_label[\_the\_opt]\_fi} - -\_eoldef\_inchap #1{\_par \_sectionlevel=1 - \_def \_savedtitle {#1}% saved to .ref file - \_ifnonum \_else {\_globaldefs=1 \_incr\_chapnum \_chapx}\_fi - \_edef \_therefnum {\_ifnonum \_space \_else \_thechapnum \_fi}% - \_printchap{#1}% - \_resetnonumnotoc -} -\_eoldef\_insec #1{\_par \_sectionlevel=2 - \_def \_savedtitle {#1}% saved to .ref file - \_ifnonum \_else {\_globaldefs=1 \_incr\_secnum \_secx}\_fi - \_edef \_therefnum {\_ifnonum \_space \_else \_thesecnum \_fi}% - \_printsec{#1}% - \_resetnonumnotoc -} -\_eoldef\_insecc #1{\_par \_sectionlevel=3 - \_def \_savedtitle {#1}% saved to .ref file - \_ifnonum \_else {\_globaldefs=1 \_incr\_seccnum \_seccx}\_fi - \_edef \_therefnum {\_ifnonum \_space \_else \_theseccnum \_fi}% - \_printsecc{#1}% - \_resetnonumnotoc -} -\_public \chap \sec \secc ; - - \_doc ---------------------------- - The \`\_printrefnum``[<pre>@<post>]` macro is used in `\_print*` macros. - \nl - The \`\_wtotoc` `{<level>}{<info>}{<ref-num>}{<title-text>}` - macro expands its parameters and does \^`\_wref`. - - Note that the `<tite-text>` is `\detokenize`d before `\_wref`, so the - problem of \"fragile macros" from old \LaTeX/ never occurs. - \_cod ---------------------------- - -\_def \_printrefnum [#1@#2]{\_leavevmode % we must be in horizontal mode - \_ifnonum \_else #1\_therefnum #2\_fi - \_wlabel \_therefnum % references, if `\label[<label>]` is declared - \_ifnotoc \_else \_incr \_tocrefnum - \_dest[toc:\_the\_tocrefnum]% - \_wtotoc{\_the\_sectionlevel}{\_secinfo}% - {\_therefnum}{\_detokenize\_ea{\_savedtitle}}% - \_fi -} -\_def \_wtotoc #1#2#3#4{\_edef\_tmp{{#1}{#2}{#3}{#4}}\_ea\_wtotocA\_tmp} -\_def \_wtotocA #1#2#3#4{\_wref\_Xtoc{{#1}{#2}{#3}{#4}}} - - \_doc ----------------------------- - The \`\_abovetitle``{<penaltyA>}{<skipA>}` and \`\_belowtitle``{<skipB>}` pair - communicates using a special penalty 11333 in vertical mode. - The `\_belowtitle` puts the vertical skip (its value is saved in - `\_savedtitleskip`) followed by this special penalty. - The `\_abovetitle` reads `\lastpenalty` and if it has this special value - then it removes the skip used before and don't use the parameter. - The `\abovetitle` creates `<skipA>` only if whatever previous skip is less - or equal than `<skipA>`. We must save `<whatever-skip>`, remove it, - create `<penaltyA>` (if `\_belowtitle` does not preceded) and create - <whatever-skip> or `<skipA>` depending on what is greater. - The amount of `<skipA>` is measured using `\setbox0=\vbox`. - \_cod ----------------------------- - -\_newskip \_savedtitleskip -\_newskip \_savedlastskip -\_def\_abovetitle #1#2{\_savedlastskip=\_lastskip % <whatever-skip> - \_ifdim\_lastskip>0pt \_vskip-\_lastskip \_fi - \_ifnum\_lastpenalty=11333 \_vskip-\_savedtitleskip \_else #1\_fi - \_ifdim\_savedlastskip>0pt \_setbox0=\_vbox{#2\_global\_tmpdim=\_lastskip}% - \_else \_tmpdim=\_maxdimen \_fi - \_ifdim\_savedlastskip>\_tmpdim \vskip\_savedlastskip \_else #2\_fi -} -\_def\_belowtitle #1{#1\_global\_savedtitleskip=\_lastskip \_penalty11333 } - - \_doc ----------------------------- - \`\nbpar` sets `\interlinepenaty` value. - \`\nl` is \"new line" in text (or titles), but space in toc or headlines or outlines. - \_cod ----------------------------- - -\_def\_nbpar{{\_interlinepenalty=10000\_endgraf}} - -\_protected\def\_nl{\hfil\break} -\_regmacro {\def\_nl{\_unskip\_space}} {\def\_nl{\_unskip\_space}} {\def\_nl{ }} -\_regmacro {\def\nl{\_unskip\_space}} {\def\nl{\_unskip\_space}} {\def\nl{ }} - -\_public \nbpar \nl ; - - \_doc ----------------------------- - \`\_firstnoindent` puts a material to `\everypar` in order to next - paragraph will be without indentation. It is useful after titles. - If you dislike this feature then you can say `\let\_firtnoindent=\relax`. - The \`\_wipeepar` removes the material from `\everypar`. - \_cod ----------------------------- - -\_def \_firstnoindent {\_global\_everypar={\_wipeepar \_setbox7=\_lastbox}} -\_def \_wipeepar {\_global\_everypar={}} - - \_doc ----------------------------- - The `\mark` (for running heads) is used in `\_printsection` only. We - suppose that chapters will be printed after `\vfil\break`, so user can - implement chapter titles for running headers directly by macros, no - `\mark` mechanism is needed. But sections need `\mark`s. And they can be - mixed with chapter's running heads, of course. - - The \`\_insermark``{<title text>}` saves `\mark` in the format - `{<title-num>} {<title-text>}`, so it can be printed \"as is" in - `\headline` (see the space between them), or you can define a formating - macro with two parameters for processing these data, if you need it. - \_cod ----------------------------- - -\_def\_insertmark#1{\_mark{{\_ifnonum\_else\_therefnum\_fi} {\_unexpanded{#1}}}} - - \_doc ----------------------------- - \OpTeX/ sets `\headline={}` by default, so no running headings are printed. - You can activate the running headings by following code, for example: - \begtt - \addto\_chapx {\_edef\_runningchap {\_thechapnum: \_unexpanded\_ea{\_savedtitle}}} - \def \formathead #1#2{\isempty{#1}\iffalse #1: #2\fi} - \headline = {% - \ifodd \pageno - \hfil \ea\formathead\firstmark{}{}% - \else - Chapter: \runningchap \hfil - \fi - } - \endtt - The \`\caption``/<letter>` uses `\_<letter>num` counter. - The group opened by `\caption` is finalized by first `\par` from - empty line or from `\vskip` or from `\endinsert`. - The `\_printcaption<letter>` is called, it starts with - printing of the caption.\nl - The \`\cskip` macro inserts nobreakable vertical space between caption and - the object. - \_cod ----------------------------- - -\_def\_caption/#1{\_def\_tmpa{#1}\_nospaceafter \_capA} -\_optdef\_capA []{\_trylabel \_incaption} -\_def\_incaption {\_bgroup - \_ifcsname _\_tmpa num\_endcsname \_ea\_incr \_csname _\_tmpa num\_endcsname - \_else \_opwarning{Unknown caption /\_tmpa}\_fi - \_edef\_thecapnum {\csname _the\_tmpa num\endcsname}% - \_edef\_thecaptitle{\_mtext{\_tmpa}}% - \_ifcsname _everycaption\_tmpa\_endcsname - \_ea\_the \_csname _everycaption\_tmpa\_endcsname \_fi - \_def\_par{\_nbpar\_egroup}\_let\par=\_par - \_cs{_printcaption\_tmpa}% -} -\_def \_cskip {\_par\_nobreak\_medskip} % space between caption and the object - -\_public \caption \cskip ; - - \_doc ----------------------------- - The \`\_printcaptiont` and \`\_printcaptionf` macros start in vertical mode. - They switch to horizontal mode and use `\_wlabel\_thecapnum` (in order to - make reference and hyperlink destination) a they can use: - \begitems - * `\_thecaptitle` ... expands to the word Table or Figure (depending on - the current language). - * `\_thecapnum` ... expands to `\the<letter>num` (caption number). - \enditems - \_cod ----------------------------- - -\_def \_printcaptiont {% - \_noindent \_wlabel\_thecapnum {\_bf\_thecaptitle~\_thecapnum}\_enspace - \_narrowlastlinecentered\_iindent -} -\_let \_printcaptionf = \_printcaptiont % caption of figures = caption of tables - - \_doc ----------------------------- - The default format of `\caption` text is paragraph in block narrower by - `\_iindent` and with the last line is centered. This setting is done by - the \`\_narrowlastlinecentered` macro. - \_cod ----------------------------- - -\_def\_narrowlastlinecentered#1{% - \_leftskip=#1plus1fil - \_rightskip=#1plus-1fil - \_parfillskip=0pt plus2fil -} - - \_doc ----------------------------- - \`\eqmark` is processed in display mode (we add `\eqno` primitive) - or in internal mode when `\eqaligno` is used (we don't add `\eqno`). - \_cod ----------------------------- - -\_optdef\_eqmark []{\_trylabel \_ineqmark} -\_def\_ineqmark{\_incr\_dnum - \_ifinner\_else\_eqno \_fi - \_wlabel\_thednum \_thednum -} -\_public \eqmark ; - - \_doc ----------------------------- - The \`\numberedpar` `<letter>{<name>}` is implemented here. - \_cod ----------------------------- - -\_newcount\_counterA \_newcount\_counterB \_newcount\_counterC -\_newcount\_counterD \_newcount\_counterE - -\_def\_resetABCDE {\_counterA=0 \_counterB=0 \_counterC=0 \_counterD=0 \_counterE=0 } - -\_def \_theAnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterA} -\_def \_theBnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterB} -\_def \_theCnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterC} -\_def \_theDnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterD} -\_def \_theEnum {\_othe\_chapnum.\_othe\_secnum.\_the\_counterE} - -\_def\_numberedpar#1#2{\_ea \_incr \_csname _counter#1\_endcsname - \_def\_tmpa{#1}\_def\_tmpb{#2}\_numberedparparam} -\_optdef\_numberedparparam[]{% - \_ea \_printnumberedpar \_csname _the\_tmpa num\_ea\_endcsname\_ea{\_tmpb}} - -\_public \numberedpar ; - - \_doc ----------------------------- - The \`\_printnumberedpar` `\theXnum {<name>}` opens numbered paragraph and - prints it. The optional parameter is in `\_the\_opt`. You can re-define - it if you need another design. - - `\_printnumberedpar` needs not to be re-defined if you only want to print - Theorems in italic and to insert vertical skips (for example). You can do this - by the following code: - \begtt - \def\theorem {\medskip\bgroup\it \numberedpar A{Theorem}} - \def\endtheorem {\par\egroup\medskip} - - \theorem Let $M$ be... \endtheorem - \endtt - \_cod ----------------------------- - -\_def \_printnumberedpar #1#2{\_par - \_noindent\_wlabel #1% - {\bf #2 #1\_istoksempty\_opt\_iffalse \_space \_the\_opt \_fi.}\_space - \_ignorespaces -} - -\_endcode % ------------------------------------- - -2020-04-22 \_chapx, \_secx, \_seccx rewritten -2020-03-14 introduced |