diff options
author | Norbert Preining <norbert@preining.info> | 2021-04-20 03:00:55 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2021-04-20 03:00:55 +0000 |
commit | d65c208b161ffee9ce5343fdfdb17d00523cecae (patch) | |
tree | 6829c46d8881891365b9be3fb660dba3ca79e6f5 /macros/luatex/optex/base/ref-file.opm | |
parent | 272d21375e83d59014b6591075291d172bbfa007 (diff) |
CTAN sync 202104200300
Diffstat (limited to 'macros/luatex/optex/base/ref-file.opm')
-rw-r--r-- | macros/luatex/optex/base/ref-file.opm | 141 |
1 files changed, 0 insertions, 141 deletions
diff --git a/macros/luatex/optex/base/ref-file.opm b/macros/luatex/optex/base/ref-file.opm deleted file mode 100644 index d594bf88c0..0000000000 --- a/macros/luatex/optex/base/ref-file.opm +++ /dev/null @@ -1,141 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \openref {File for references <2021-02-05>} % preloaded in format - - \_doc -------------------------- - The \`\_inputref` macro is used in `\everyjob`. It reads `\jobname.ref` file - if it exists. After the file is read then it is removed and opened to write - a new contents to this file. - \_cod -------------------------- - -\_newwrite\_reffile - -\_def\_inputref {% - \_isfile{\_jobname.ref}\_iftrue - \_input {\_jobname.ref} - \_gfnotenum=0 \_lfnotenum=0 \_mnotenum=0 - \_openrefA{\_string\_inputref}% - \_fi -} - - \_doc -------------------------- - If the file does not exist then it is not created by default. It means that if you - process a document without any forward references then no `\jobname.ref` - file is created because it is unusable. The \^`\_wref` macro is a dummy in - this case. - \_cod -------------------------- - -\_def\_wrefrelax#1#2{} -\_let\_wref=\_wrefrelax - - \_doc --------------------- - If a macro needs to create and to use `.ref` file then such macro must use - \`\openref`. When the file is created (using internal \`\_openrefA`) then - the \`\_wref` `\<macro>{<data>}` is redefined in order to - save the line `\<macro><data>` to the `.ref` file using asynchronous - `\write` primitive. Finally, the `\_openref` destroys itself, because we - need not open the file again.\nl - The `\_wref``<csname>{<params>}` does exactly `\write\_reffile{\string<csname><params>}` - in this case and \`\_ewref``<csname>{<params>}` does - `\write\_reffile{\string<csname><expanded-params>}`. - \_cod --------------------- - -\_def\_openref {% - \_ifx \_wref\_wrefrelax \_openrefA{\_string\openref}\_fi - \_gdef\_openref{}% -} -\_def\_openrefA #1{% - \_immediate\_openout\_reffile="\_jobname.ref"\_relax - \_gdef\_wref ##1##2{\_write\_reffile{\_bslash\_csstring##1##2}}% - \_immediate\_write\_reffile {\_pcent\_pcent\_space OPTeX <\_optexversion> - REF file (#1)}% - \_immediate\_wref \Xrefversion{{\_REFversion}}% -} -\_def\_ewref #1#2{\_edef\_ewrefA{#2}\_ea\_wref\_ea#1\_ea{\_ewrefA}} -\_def\openref{\_openref} - - \_doc ---------------------- - We are using the convention that the macros used in `.ref` file are named - `\_X<foo>`. If there is a new version of \OpTeX/ with a different collection - of such macros then we don't want to read the `.ref` files produced by an - old version of \OpTeX/ or by OPmac. So the first line of `.ref` file is in - the form - \begtt \catcode`\<=13 - \Xrefversion{<version>} - \endtt - We can check the version compatibility by this macro. - Because OPmac does not understand `\_Xrefversion` we use - \`\Xrefversion` (with a different number of `<version>` form OPmac) here. - The result: OPmac skips the `.ref` files produced by \OpTeX/ and vice - versa. - \_cod ---------------------- - -\_def\_REFversion{5} % actual version of .ref files in OpTeX -\_def\_Xrefversion#1{\_ifnum #1=\_REFversion\_relax \_else \_endinput \_fi} -\_public \Xrefversion ; % we want to ignore .ref files generated by OPmac - - \_doc ----------------------- - You cannot define your special `.ref` macros before `.ref` file is read - because it is read in `\everyjob`. But you can define such macros using - \`\refdecl``{<definitions of your ref macros>}`. - This command sends to `.ref` file your `<definitions of your ref macros>` - immediately. Next lines in `.ref` file should include our macros. Example - from CTUstyle2: - \begtt - \refdecl{% - \def\totlist{} \def\toflist{}^^J - \def\Xtab#1#2#3{\addto\totlist{\totline{#1}{#2}{#3}}}^^J - \def\Xfig#1#2#3{\addto\toflist{\tofline{#1}{#2}{#3}}} - } - \endtt - We must read `<definition of your ref macros>` when the catcode of `#` is 12 - because we needn't duplicate each `#` in the `.ref` file. - \_cod \_fin ----------------- - -\_def\_refdecl{\_bgroup \_catcode`\#=12 \_refdeclA} -\_def\_refdeclA #1{\egroup\_openref - \_immediate\_write\_reffile {\_pcent\_space \_string \refdecl:}% - \_immediate\_write\_reffile {\_detokenize{#1}}% -} -\_public \refdecl ; - -\_endcode % ================================================ - - -The `.ref` file has the name `\jobname.ref` and -it saves information about references, TOC lines, etc. -All data needed in next \TeX/ run are saved here. -\OpTeX/ reads this file at the beginning of the document -(using `\everyjob`) if such file exists. -The `.ref` file looks like: - -\begtt \catcode`\<=13 -\Xrefversion{<ref-version>} -\_Xpage{<gpageno>}{<pageno>} -\_Xtoc{<level>}{<type>}{<text>}{}<title> -\_Xlabel{<label>}{<text>} -\_Xlabel{<label>}{<text>} -... -\_Xpage{<gpageno>}{<pageno>} -\_Xlabel{<label>}{<text>} -... -\endtt -% -where <gpageno> is internal page number globally numbered from one and -`<pageno>` is a page number (`\the\pageno`) used in pagination (they may differ). -Each page begins with \^`\_Xpage`. -The `<label>` is a label used by user in `\label[<label>]` and `<text>` is a -text which should be referenced (the number of section or table, for -example `2.3.14`). The `<title>` is the title of the chapter (`<level>`=1, -`<type>`=`chap`), section (`<level>`=2, `<type>`=`sec`), subsection -(`<level>`=3, `<type>`=`secc`). The \^`\_Xpage` is written at the beginning of each -page, the `\_Xtoc` is written when chapter or section or subsection title -exists on the page and `\_Xlabel` when labeled object prefixed by -`\label[<label>]` exists on the page. - -The `.ref` file is read when the processing of the document starts using -`\everyjob`. It is read, removed, and opened to writing immediately. -But the `.ref` file should be missing. If none forward references are needed -in the document then `.ref` file is not created. For example, you only want -to test a simple plain \TeX/ macro, you create `test.tex` file, you do -`optex test` and you don't need to see an empty `test.ref` file in your directory. - |