diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/strc-not.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/strc-not.mkiv | 1378 |
1 files changed, 0 insertions, 1378 deletions
diff --git a/Master/texmf-dist/tex/context/base/strc-not.mkiv b/Master/texmf-dist/tex/context/base/strc-not.mkiv deleted file mode 100644 index bf815c7281f..00000000000 --- a/Master/texmf-dist/tex/context/base/strc-not.mkiv +++ /dev/null @@ -1,1378 +0,0 @@ -%D \module -%D [ file=strc-not, -%D version=2008.10.20, -%D title=\CONTEXT\ Structure Macros, -%D subtitle=Note Handling, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright=PRAGMA-ADE / Hans Hagen] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -\writestatus{loading}{ConTeXt Structure Macros / Note Handling} - -\registerctxluafile{strc-not}{1.001} - -\unprotect - -% this needs a further cleanup ... -% -% -- set breakpoint in descriptions -% -- reset after trialtypesetting -% -- that way we can trick the symbol space - -% removed: -% -% \pushsomestates -% -% core-ins -> obsolete -% -% saveinsertiondata -% restoreinsertiondata -% saveinsertionbox -% eraseinsertionbackup -% restoreinsertionbackup - -\def\savenotedata {} % \writestatus{todo}{save note data}} -\def\restorenotedata {} % \writestatus{todo}{restore note data}} -\def\savenotecontent {} % \writestatus{todo}{save note content}} -\def\restorenotecontent{} % \writestatus{todo}{restore note content}} -\def\erasenotebackup {} % \writestatus{todo}{erase note backup}} - -% page-set: - -\def\enablenotes {\writestatus{todo}{enable notes}} -\def\disablenotes {\writestatus{todo}{disable notes}} -\def\savenotes {\writestatus{todo}{save notes}} -\def\flushsavednotes{\writestatus{todo}{flush notes}} - -% experiment: (compare scope=text and scope=page) -% -% \definenote[mynote][way=bytext,location=text,width=\leftmarginwidth,scope=page,rule=,before=,after=,factor=0] -% \setuptexttexts[margin][\vbox to \textheight{\placenotes[mynote]\vfill}][] - -%D Footnotes are can be characterized by three components: -%D -%D \startitemize[packed] -%D \item a small number \footnote {a footnote number} or -%D symbol {\setupfootnotes [conversion=set 2]\footnote -%D {a footnote}} -%D \item and a similar mark at the bottom of the page -%D \item followed by some additional text -%D \stopitemize -%D -%D Because footnotes are declared at the location of their -%D reference they can be seen as a special kind of -%D floating bodies. Their placement is postponed but has to be -%D taken into account in the pagebreak calculations. This kind -%D of calculations are forced by using \type{\insert}s and dealing -%D with all cases is not trivial. - -%D \macros -%D {notesenabled} -%D -%D We need a couple of states because at some moments we don't want -%D to mess around with inserts at all. Take for instance a table -%D of contents. And so we can temporary disable footnotes by saying -%D -%D \starttyping -%D \notesenabledfalse -%D \stoptyping - -\newif\ifnotesenabled \notesenabledtrue - -% better mark a note .. once flushed no more flushing - -%appendtoks \notesenabledfalse \to \everymarking -\appendtoks \notesenabledfalse \to \everypagebody -\appendtoks \notesenabledfalse \to \everystructurelist % quick hack - -%D Often we need to process the whole set of notes and to make that -%D fast, we use a token register: - -\newtoks\tobeprocessednotes - -\unexpanded\def\processnotes#1% #1: \macro that uses \currentnote - {\def\doprocesssomenote##1{\edef\currentnote{##1}\let\currentdescription\currentnote#1}% - \the\tobeprocessednotes} - -%D Notes have their own paremater handlers. The complication here -%D is that we use descriptions to typeset the note, so we have several -%D resolvers. - -\let\currentnote\v!footnote - -\def\noteparameter #1{\csname\donoteparameter{\??vn\currentnote}#1\endcsname} -\def\noteparameterhash#1{\donoteparameterhash {\??vn\currentnote}#1} - -\def\namednoteparameter#1#2{\csname\donoteparameter{\??vn#1}#2\endcsname} - -\def\donoteparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\donoteparentparameter \csname#1\s!parent\endcsname#2\fi} -\def\donoteparameterhash#1#2{\ifcsname#1#2\endcsname #1\else\expandafter\donoteparentparameterhash\csname#1\s!parent\endcsname#2\fi} - -\def\donoteparentparameter #1#2{\ifx#1\relax\s!empty\else\donoteparameter #1#2\fi} -\def\donoteparentparameterhash#1#2{\ifx#1\relax \else\donoteparameterhash#1#2\fi} - -\def\detokenizednoteparameter#1{\detokenize\expandafter\expandafter\expandafter{\csname\??vn#1\endcsname}} - -\def\dosetnoteattributes#1#2% style color - {\edef\fontattributehash {\noteparameterhash#1}% - \edef\colorattributehash{\noteparameterhash#2}% - \ifx\fontattributehash \empty\else\dosetfontattribute \fontattributehash #1\fi - \ifx\colorattributehash\empty\else\dosetcolorattribute\colorattributehash#2\fi} - -%D \macros -%D {setupnote,setupnotedefinition} -%D -%D We can influence footnote typesetting with the setup -%D command: -%D -%D \showsetup{setupnotes} -%D \showsetup{setupnote} -%D -%D The definition command indicate that we can frame the footnote -%D area. The footnotes themselves are treated as descriptions. -%D -%D \showsetup{definenote} -%D -%D It's sort of a custom to precede footnotes by a horizontal -%D rule and although fancy rules like -%D -%D \starttyping -%D \hbox to 10em{\hskip-3em\dotfill} -%D \stoptyping -%D -%D Are quite ligitimate, we default to a simple one 20\% of the -%D text width. - -\unexpanded\def\setupnotes - {\dodoubleargument\getparameters[\??vn]} - -\setupnotes - [\c!location=\v!page, - \c!way=\v!by\v!part, - %\c!conversion=, - \c!rule=\v!on, - \c!before=\blank, - \c!bodyfont=\v!small, - %\c!style=, - %\c!color=, - %\c!after=, - %\c!rulecolor=, - \c!rulethickness=\linewidth, - \c!frame=\v!off, - \c!margindistance=.5em, - \c!columndistance=1em, - \c!distance=.125em, - \c!align=\v!normal, - \c!tolerance=\v!tolerant, - \c!split=\v!tolerant, - %\c!width=\makeupwidth, - %\c!width=\ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi, - \c!width=\defaultnotewidth, - \c!height=\textheight, - \c!numbercommand=\high, - \c!command=, % \noteparameter\c!numbercommand, % (command in enumeration) too messy, called twice - \c!separator=,% \@@koseparator, - \c!textcommand=\high, - \c!textstyle=\tx, - %\c!textcolor=, - \c!interaction=\v!yes, - %\c!factor=, - %\c!scope=, % \v!text \v!page - \c!prefixconnector=., - %\c!next=\autoinsertnextspace, - \c!prefix=\v!no, - %\c!continue=\v!no, - \c!paragraph=\v!no, - \c!inbetween=\hskip1em, - \c!n=1] - -\setupnotes - [\c!expansion=\v!no, - \c!xmlsetup=, - \s!catcodes=, - \c!saveinlist=\v!yes] - -\def\@@defaultnotedefloc{\v!inleft} -\def\@@defaultnotedefdis{\!!zeropoint} - -\unexpanded\def\startnotedef{\resetdescriptions\csname\e!start\??vn\??vn\currentnote\endcsname} -\unexpanded\def\stopnotedef {\csname\e!stop \??vn\??vn\currentnote\endcsname} - -\def\currentnoteins{\csname\??vn:\currentnote\endcsname} - -\newtoks \everysetupnote - -\unexpanded\def\definenote - {\dotripleempty\dodefinenote} - -\def\dodefinenote[#1][#2][#3]% note [parent] [settings] - {\edef\currentnote{#1}% - \ifcsname\??vn:\currentnote\endcsname\else - \@EA\installinsertion\csname\??vn:\currentnote\endcsname\relax - \appendtoks\doprocesssomenote{#1}\to\tobeprocessednotes - \fi - \ifsecondargument - \doifassignmentelse{#2}{\dodefinenotewithsettings{#2}}{\dodefinenotewithparent{#2}{#3}}% - \else - \dodefinenotesimple - \fi - \ctxlua{structures.notes.define("\currentnote","insert",\number\csname\??vn:\currentnote\endcsname)}% - \the\everysetupnote - \dochecknote} - -\def\dodefinenotesimple - {\defineenumeration - [\currentnote] - [\s!handler=\v!note, - \c!text=, - \c!location=\@@defaultnotedefloc, - \c!distance=\@@defaultnotedefdis, - \c!width=\v!fit, - \c!headstyle=\noteparameter\c!style, - \c!headcolor=\noteparameter\c!color, - \c!before=, - \c!after=]% - \doredefinenotecommands - \presetlocalframed - [\??vn\currentnote]% - \setupenumerations - [\currentnote] - [\s!parent=\??vn\currentnote, - \c!number=\v!yes]% no inheritance from decriptions which is okay - \getparameters - [\??vn\currentnote] - [\s!parent=\??vn]} - -\def\dodefinenotewithsettings#1% - {\defineenumeration % description - [\currentnote] - [\s!handler=\v!note, - \c!text=, - \c!location=\@@defaultnotedefloc, - \c!distance=\@@defaultnotedefdis, - \c!width=\v!fit, - \c!headstyle=\noteparameter\c!style, - \c!headcolor=\noteparameter\c!color, - \c!before=, - \c!after=]% - \doredefinenotecommands - \presetlocalframed - [\??vn\currentnote]% - \setupenumerations - [\currentnote] - [\s!parent=\??vn\currentnote, - \c!number=\v!yes]% - \getparameters - [\??vn\currentnote] - [\s!parent=\??vn,#1]} - -\def\dodefinenotewithparent#1#2% - {%setevalue{\??vn:#2:kids}{\ifcsname\??vn:#2:kids\endcsname\csname\??vn:#2:kids\endcsname,\fi#1}% - \defineenumeration - [\currentnote] - [\s!handler=\v!note, - \c!text=]% - \doredefinenotecommands - \presetlocalframed - [\??vn\currentnote]% - \setupenumerations - [\currentnote] - [\s!parent=\??dd#1, - \c!number=\v!yes]% - \getparameters - [\??vn\currentnote] - [\s!parent=\??vn#1,#2]} - -% \starttext -% text \startfootnote Test.\stopfootnote -% test \footnote{xxxx} \subfootnote{xxxx} -% test \footnote{xxxx} \subfootnote{xxxx} -% \stoptext - -\def\dodoredefinenotecommands#1#2#3% - {\unexpanded\expandafter\def\csname\e!start#3#1\expandafter\endcsname\expandafter - {\expandafter\dosingleempty\csname\s!do\e!start#3#1\endcsname}% - \unexpanded\expandafter\def\csname\s!do\e!start#3#1\expandafter\endcsname - \expandafter[\expandafter##\expandafter1\expandafter]\expandafter##\expandafter2\csname\e!stop#3#1\endcsname - {\begingroup - \doenumerationinit{#1}{#2}{#3}% - \@@notemakedescription[##1]{}{##2}% - \expandafter\endgroup\noteparameter\c!next}} % WS: added \noteparameter\c!next - -\def\doredefinenotecommands - {\normalexpanded{\noexpand\dodoredefinenotecommands{\currentnote}{1}{}}% - \let\@@subslevel\empty - \dostepwiserecurse{2}{\descriptionparameter\c!levels}{1} - {\normalexpanded{\noexpand\dodoredefinenotecommands{\currentnote}{\recurselevel}{\@@subslevel\v!sub}}% - \edef\@@subslevel{\@@subslevel\v!sub}}} - -\let\setupnotedefinition\setupenumerations - -% \def\dodowithcurrentnoteandkids#1#2% action kid -% {\pushmacro\currentnote -% \def\currentnote{#2}% -% \dowithcurrentnoteandkids{#1}% recursive -% \popmacro\currentnote}% - -\appendtoks - \setupenumerations[\currentnote][]% -\to \everysetupnote - -\unexpanded\def\setupnote - {\dodoubleempty\dosetupnote} - -\def\dosetupnote[#1][#2]% - {\edef\currentnote{#1}% - \ifsecondargument - \getparameters[\??vn\currentnote][#2]% - \the\everysetupnote - \fi - \dochecknote} - -\appendtoks - \setvalue{\??vn\c!rule:c:\currentnote}{\normalnoterule}% hm - \letvalue{\??vn\c!rule:a:\currentnote}\v!left -\to \everysetupnote - -\appendtoks - \expanded{\processallactionsinset - [\noteparameter\c!rule]} - [ \v!on=>\setvalue{\??vn\c!rule:c:\currentnote}{\normalnoterule}, % no let as it can be changed afterwards - \v!normal=>\setvalue{\??vn\c!rule:c:\currentnote}{\normalnoterule}, - \v!left=>\setvalue{\??vn\c!rule:a:\currentnote}{l2r}, - \v!right=>\setvalue{\??vn\c!rule:a:\currentnote}{r2l}, - \v!off=>\letvalue{\??vn\c!rule:c:\currentnote}\relax, - \s!default=>\letvalue{\??vn\c!rule:c:\currentnote}\relax, - \s!unknown=>\setvalue{\??vn\c!rule:c:\currentnote}{\noteparameter\c!rule}]% -\to \everysetupnote - -\appendtoks - \processaction % todo - [\noteparameter\c!split] - [ \v!tolerant=>\notepenalty\zeropoint, - \v!strict=>\notepenalty9999, - \v!verystrict=>\notepenalty\maxdimen, - \s!default=>\notepenalty\zeropoint, - \s!unknown=>\notepenalty\commalistelement]% -\to \everysetupnote - -%D The following switch can be used to disable limiting the -%D height of the footnote area, something that is needed in -%D multi column balancing. Use this switch with care. - -\newif\ifnotelimit \notelimittrue % shared - -% bottomnotes endnotes -% clevernotes - -\appendtoks - \doifsomething{\noteparameter\c!factor} - {\ifnum\noteparameter\c!factor<\zerocount\else - \count\currentnoteins\noteparameter\c!factor - \fi}% -\to \everysetupnote - -% compatibility (will go away) - -\newif\ifbottomnotes % still used in page-one.mkiv -%newif\endnotes % no longer used - -% locations: - -\def\s!noteloc{nodeloc} % 1=page 2=columns 3=lastcolumn 4=firstcolumn 5=none -\def\s!notepos{nodepos} % 0=nothing 1=high 2=bottom -\def\s!notefmt{nodefmt} % 1 text -\def\s!notecol{nodecol} - -\def\clevernotes % compatibility hack, will be redone - {\numexpr\ifcase\namednoteparameter\v!footnote\s!noteloc\or0\or2\or2\or1\else0\fi\relax} - -\def\setnotelocation #1{\expandafter\let\csname\??vn\currentnote\s!noteloc\endcsname#1\relax} -\def\setnoteposition #1{\expandafter\let\csname\??vn\currentnote\s!notepos\endcsname#1\relax} -\def\setnoteformatting#1{\expandafter\let\csname\??vn\currentnote\s!notefmt\endcsname#1\relax} - -\def\currentnofcolumns{\@@kln} - -\setvalue{\??vn @\v!page }{\setnotelocation\plusone} -\setvalue{\??vn @\v!columns }{\setnotelocation\plustwo} -\setvalue{\??vn @\v!lastcolumn }{\setnotelocation\plusthree} -\setvalue{\??vn @\v!firstcolumn}{\setnotelocation\plusfour} -\setvalue{\??vn @\v!none }{\setnotelocation\plusfive} -\setvalue{\??vn @\v!text }{\setnotelocation\plusfive \setnoteformatting\plusone} % test -\setvalue{\??vn @\v!high }{\setnoteposition\plusone} -\setvalue{\??vn @\v!bottom }{\setnoteposition\plustwo} - -\def\dosetcheckednote#1{\csname\??vn @#1\endcsname} - -\newtoks\everychecknote - -\def\dochecknote - {% node states - \setnotelocation\plusone % page - \setnoteposition\plustwo % high - \normalexpanded{\rawprocesscommalist[\noteparameter\c!location]}\dosetcheckednote - % compatibility hack - %ifnum\noteparameter\s!noteloc=\plusfive \endnotestrue \else \endnotesfalse \fi - \ifnum\noteparameter\s!notepos=\plustwo \bottomnotestrue \else \bottomnotesfalse \fi - % set column multiplier - \edef\currentnotenofcolumns{\noteparameter\c!n}% - \ifx\currentnotenofcolumns\empty - \let\currentnotenofcolumns\!!plusone - \fi - \ifcase\noteparameter\s!noteloc - % can't happen - \scratchcounter\plusone - \or - % page - \scratchcounter \currentnotenofcolumns - \or - % columns - \scratchcounter\ifnum\currentnofcolumns=\zerocount \plusone \else \currentnotenofcolumns \fi \relax - \or - % firstcolumn - \scratchcounter\plusone - \or - % lastcolumn - \scratchcounter\plusone - \or - % text - \scratchcounter\currentnotenofcolumns - \fi - % column factor - \ifcase\scratchcounter - \scratchcounter\plusone - \fi - \global\count\currentnoteins\plusthousand - \global\count\currentnoteins\numexpr\plusthousand/\scratchcounter\relax - % maximize height - \ifnotelimit - \global\dimen\currentnoteins\dimexpr\noteparameter\c!height*\scratchcounter\relax - \fi - % distance -> tricky as this might depend on a font switch so we need a fast checker - \dosetnotedistance - % play safe - \ifnum\noteparameter\s!noteloc=\plusfive - \ctxlua{structures.notes.setstate("\currentnote","store")}% - % text notes (e.g. end notes) but we don't use inserts anyway - \global\dimen\currentnoteins\maxdimen - \global\count\currentnoteins\zerocount - \global\skip \currentnoteins\zeropoint - \fi - \the\everychecknote} - -\def\dosetnotedistance - {\begingroup - \setbox\scratchbox\vbox - {\forgetall -% \setnotebodyfont - \dontcomplain - \noteparameter\c!before - \placenoterule - \noteparameter\c!after}% - \global\skip\currentnoteins\ht\scratchbox - \endgroup} - -% \def\checknotes % no longer needed -% {\processnotes\dochecknote} -% -% \def\checknotedistances -% {\processnotes\dosetnotedistance} -% -% fails but not that much needed anyway: -% -% \appendtoks -% \checknotedistances -% \to \everyglobalbodyfont - -% D When \type{n} exceeds~1, footnotes are typeset in -% D multi||columns, using the algoritm presented on page~397 -% D of \TEX book. Footnotes can be places on a per page basis -% D or whereever suitable. When we set~\type{n} to~0, we get a -% D rearanged paragraph, typeset by the algoritms on pages 398 -% D and~389 (at least in \MKII). We definitely did not reinvent -% D that wheel. - -% Example of using factor: -% -% \definenote[mynote][way=bypage,location=text,width=\marginwidth,rule=,before=,factor=0] -% \setuplayout[backspace=5cm,margin=3cm,margindistance=.5cm,width=middle] -% \setuptexttexts[margin][\vbox to \textheight{\placenotes[mynote]\vfill}][] -% \starttext -% \dorecurse{10}{test \mynote{one one one one one one} \input zapf \mynote{one one one one one one} } -% \stoptext - -%D The noterule can be a graphic and therefore calling this -%D setup macro at every skipswitch is tricky (many many MP -%D runs). Let's just reserve a few points, that probably match -%D those of the stretch component. - -%D A bit messy: - -\unexpanded\def\placenoterule - {\bgroup - \setupalign[\getvalue{\??vn\c!rule:a:\currentnote}]% - \righttoleft - \getvalue{\??vn\c!rule:c:\currentnote}% - \par - \egroup} - -\unexpanded\def\normalnoterule - {\ifvmode - \dontleavehmode \blackrule - [ \c!color=\noteparameter\c!rulecolor, - \c!width=.2\hsize, - \c!height=\noteparameter\c!rulethickness, - \c!depth=\zeropoint]% - \endgraf - \kern\strutdepth - \fi} - -\ifx\setnotehsize\undefined - - \unexpanded\def\setnotehsize{\hsize\noteparameter\c!width\relax} % can be overloaded - -\fi - -%D The formatting depends on the width of the table, so we -%D have to set \type {n} to zero. -%D -%D \starttyping -%D \startbuffer -%D \bTABLE -%D \bTR \bTD one \footnote{\dorecurse{10}{abcd }} \eTD \bTD two \eTD \eTR -%D \bTR \bTD three fout five six seven eight nine \eTD \bTD ten \eTD \eTR -%D \eTABLE -%D \stopbuffer -%D -%D \startlocalfootnotes[n=0,location={text,none}] -%D \placelegend[n=2]{\getbuffer}{\placelocalfootnotes} -%D \stoplocalfootnotes -%D \stoptyping - -%D \macros -%D {footnote} -%D -%D A footnote can have a reference as optional argument and -%D therefore its formal specification looks like: -%D -%D \showsetup{footnote} -%D -%D This command has one optional command: the reference. By -%D saying \type{[-]} the number is omitted. The footnote -%D command is not that sensitive to spacing, so it's quite -%D legal to say: -%D -%D \startbuffer -%D Users of \CONTEXT\ must keep both feet \footnote{Given they -%D have two.} on the ground and not get confused \footnote{Or -%D even crazy.} by all those obscure \footnote{But fortunately -%D readable.} parameters. -%D \stopbuffer -%D -%D \typebuffer -%D -%D When setting the \type{conversion} to \type{set 2} we get -%D something like: -%D -%D \bgroup -%D \startnarrower -%D \setupfootnotes[conversion=set 1] -%D \getbuffer -%D \stopnarrower -%D \egroup -%D -%D Typesetting footnotes is, at least for the moment, disabled -%D when reshaping boxes. -%D -%D The additional macro \type {\footnotetext} and the -%D associated \type {\note} macro were implemented at -%D request of users on the mailing list and a suggestion by -%D taco to split of the symbol placement. I decided to -%D merge this functionality with the existing \type {\note} -%D functionality. - -%D The next implementation runs on top of enumerations (only in \MKIV). -%D -%D \starttyping -%D \setupenumerations -%D [footnote] -%D [ style=\type{(es)}, -%D headstyle=\type{(hs)}] -%D -%D \setupnote -%D [footnote] -%D [ style=\type{(s)}, -%D command=\type{(c)}, -%D textcommand=\type{(tc)}, -%D textstyle=\type{(ts)}, -%D numberstyle=\type{(ns)}, -%D numbercommand=\type{(nc)}] -%D -%D \setuplayout[backspace=6cm,marginwidth=cm,width=middle] -%D -%D \starttext -%D \dorecurse{9}{This\footnote{Hello World #1} is a test.\par } -%D \stoptext -%D \stoptyping - -% TODO: \ifnotesenabled - -\newif\ifnotesymbol \notesymboltrue - -\newconditional\skipnoteplacement - -\unexpanded\def\setnote [#1]{\getvalue{#1}} -\unexpanded\def\setnotetext[#1]{\global\settrue\skipnoteplacement\getvalue{#1}} - -\def\domovednote#1#2#3#4% - {\ifcase\ctxlua{structures.notes.deltapage("#1",#2)}\or\symbol[#3]\or\symbol[#4]\fi} - -\setvalue{\??dd:\v!note:\s!handler:\s!text }{\@@donotetext} -\setvalue{\??dd:\v!note:\s!handler:\s!number}{\@@donotenumber} -\setvalue{\??dd:\v!note:\s!handler }{\@@donotehandler} -\setvalue{\??dd:\v!note:\s!handler:\s!do }{\@@somenotedescription} -\setvalue{\??dd:\v!note:\s!handler:\s!start }{\@@startsomenotedescription} - -\let\@@donotehandler\@@dodescriptionhandler - -\def\@@somenotedescription {\@@notemakedescription} -\def\@@startsomenotedescription{\@@notemakedescription} - -\def\@@notemakedescription[#1]#2#3% - {\ifnotesenabled - \edef\currentdescriptionreference{#1}% - \iftrialtypesetting - \doenumerationcheckconditions - \let\currentnote\currentdescriptionmain - \typesetdummynotesymbol - \else - \begingroup - \doenumerationcheckconditions - \let\currentnote\currentdescriptionmain - \dodescriptioncomponent[\c!reference=#1,\c!label={\descriptionparameter\c!text},\c!title={#3},\c!list=,\c!bookmark=,][]% - \xdef\currentnotenumber{\ctxlua{structures.notes.store("\currentnote",\currentdescriptionnumberentry)}}% - \settrue\processingnote - \ifconditional\skipnoteplacement - \globallet\lastnotesymbol\dolastnotesymbol - \else - \iftypesettinglines % otherwise problems with \type <crlf> {xxx} - \ignorelines % makes footnotes work in \startlines ... \stoplines - \fi - \ifnotesymbol - \dolastnotesymbol - \else - \unskip\unskip - \globallet\lastnotesymbol\dolastnotesymbol - \fi - \fi - \ifconditional\postponingnotes % todo: per note class - \global\settrue\postponednote - \else\ifconditional\inlocalnotes % todo: per note class - \global\settrue\postponednote - \else - \handlenoteinsert\currentnote\currentnotenumber - \fi\fi - \endgroup - \fi - \fi - \ifconditional\skipnoteplacement - \global\setfalse\skipnoteplacement - \else - \kern\notesignal\relax % \relax is needed to honor spaces - \fi} - -\def\dolastnotesymbol - {\typesetsomenotesymbol\currentnote\currentnotenumber\currentdescriptionnumberentry} - -\let\dotagsetnotesymbol\relax - -\def\dotypesetsomenotesymbol#1#2#3% running text (messy: #1 and current mixed) - {\dodonotesymbol - {\synchronizesomenotesymbol{#1}{#2}{#3}% -% \ctxlua{structures.notes.number("\currentnote",\currentnotenumber)}% \currentdescriptionnumberentry - \dostarttagged\t!descriptionsymbol\currentnote - \dotagsetnotesymbol - \ctxlua{structures.notes.number("#1",#2)}% - \dostoptagged - \domovednote{#1}{#2}\v!previouspage\v!nextpage}} - -\unexpanded\def\typesetsomenotesymbol#1#2#3% running text - {\removeunwantedspaces - \doifitalicelse\/\donothing % Charles IV \footnote{the fourth} - \ifdim\lastkern=\notesignal - \dodonotesymbol{\kern\noteparameter\c!distance}% gets the font right, hack ! - \fi - \nobreak - \doifelse{\noteparameter\c!interaction}\v!no - {\dotypesetsomenotesymbol{#1}{#2}{#3}} - {\directgotobox{\dotypesetsomenotesymbol{#1}{#2}{#3}}[page(\ctxlua{structures.notes.getnumberpage("#1",\number#2)})]}% f: - \globallet\lastnotesymbol\relax} - -\unexpanded\def\typesetdummynotesymbol % temp hack - {\removeunwantedspaces - \doifitalicelse\/\donothing % Charles IV \footnote{the fourth} - \ifdim\lastkern=\notesignal - \dodonotesymbol{\kern\noteparameter\c!distance}% gets the font right, hack ! - \fi - \nobreak - \hbox to .5em{}% - \globallet\lastnotesymbol\relax} - -\def\currentnotedescriptiontext % todo: can be other number - {\ctxlua{structures.notes.title("\currentnote",\currentdescriptionnumberentry)}} - -\def\@@donotetext - {\ifconditional\enumerationnumberenabled - \iftrialtypesetting - \doenumerationfullnumber\showdntext - \doenumerationcouplingsymbol - \else - \doenumerationregistercoupling - \doenumerationfullnumber\showdntext - \doenumerationcouplingsymbol - \fi - \else - \doenumerationfullnumber\showdnpuretext - \fi} - -% \def\currentnoteenumerationfullnumber -\def\@@donotenumber - {\doifelse{\noteparameter\c!interaction}\v!no - {\docurrentnoteenumerationfullnumber}% - {\directgotobox - {\docurrentnoteenumerationfullnumber}% - [page(\ctxlua{structures.notes.getsymbolpage("\currentnote",\currentdescriptionnumberentry)})]}} - -\def\docurrentnoteenumerationfullnumber - {\noteparameter\c!numbercommand - {\dosetnoteattributes\c!numberstyle\c!numbercolor - \ctxlua{structures.notes.number("\currentnote",\currentdescriptionnumberentry)}% - \domovednote\currentdescription\currentdescriptionnumberentry\v!nextpage\v!previouspage}} - -\def\synchronizesomenotesymbol#1#2#3% called more often than needed - {\iftrialtypesetting\else - \normalexpanded{\noexpand\ctxlatelua{structures.notes.setsymbolpage("#1",#2,#3)}}% - \fi} - -\def\handlenoteinsert#1#2% tg, id - {\begingroup - \edef\currentnote{#1}% - \the\everybeforenoteinsert - \insert\currentnoteins\bgroup - \the\everyinsidenoteinsert - \doprocesslocalsetups{\noteparameter\c!setups}% experimental - \doifelse{\noteparameter\c!paragraph}\v!yes - {\nointerlineskip - \startvboxtohbox - \handlenoteitself{#1}{#2}% - % add some slack - \stopvboxtohbox} - {\handlenoteitself{#1}{#2}}% - \egroup - \the\everyafternoteinsert - \endgroup} - -\def\betweennoteitself#1% tg - {\edef\currentnote{#1}% - \doif{\noteparameter\c!paragraph}\v!yes\dobetweenparagraphnotes} - -\def\handlenoteitself#1#2% tg, id - {\edef\currentdescription{#1}% - \edef\currentnote{#1}% - \edef\currentdescriptionnumberentry{#2}% - \edef\currentdescriptionlistentry{\ctxlua{tex.write(structures.notes.listindex("#1",#2))}}% - % as we can have collected notes (e.g. in tables) we need to recover - % \currentdescriptionattribute and \currentdescriptionsynchronize - \reinstatedescriptionnumberentry\currentdescriptionlistentry % we could store the number in the entry - % - \dontcomplain % should be done in startstoreddescription instead - \dostartstoreddescription\begstrut\currentnotedescriptiontext\endstrut\dostopstoreddescription} - -\def\dostartstoreddescription - {\bgroup\@@dostartdescriptionindeed} - -\def\dostopstoreddescription - {\@@stopdescription} - -%D The main typesetting routine is more or less the same as the -%D \PLAIN\ \TEX\ one, except that we only handle one type while -%D \PLAIN\ also has something \type{\v...}. In most cases -%D footnotes can be handled by a straight insert, but we do so -%D by using an indirect call to the \type{\insert} primitive. - -%D Making footnote numbers active is not always that logical, -%D especially when we keep the reference and text at one page. -%D On the other hand we need interactivity when we refer to -%D previous notes or use end notes. Therefore we support -%D interactive footnote numbers in two ways \footnote{This -%D feature was implemented years after we were able to do so, -%D mainly because endnotes had to be supported.} that is, -%D automatically (vise versa) and by user supplied reference. - -\let\startpushnote\relax -\let\stoppushnote \relax - -\newsignal\notesignal -\newcount \notepenalty - -\notepenalty=0 % needed in order to split in otrset - -\newconditional\processingnote -\newconditional\postponednote - -\newtoks\everybeforenoteinsert -\newtoks\everyinsidenoteinsert -\newtoks\everyafternoteinsert - -\appendtoks - \let\flushnotes\relax - \let\postponenotes\relax - \forgetall - \resetallattributes % new, we don't want color bleed into notes -\to \everybeforenoteinsert - -\appendtoks - \doif{\noteparameter\c!scope}\v!page{\floatingpenalty\maxdimen}% experiment - \penalty\notepenalty - \forgetall - \setnotebodyfont - \redoconvertfont % to undo \undo calls in in headings etc - \splittopskip\strutht % not actually needed here - \splitmaxdepth\strutdp % not actually needed here - \leftmargindistance\noteparameter\c!margindistance - \rightmargindistance\leftmargindistance -% \ifnum\noteparameter\c!n=\zerocount % no ifcase new 31-07-99 ; always ? -% \doifnotinset{\noteparameter\c!width}{\v!fit,\v!broad}\setnotehsize % ? -% \fi -\to \everyinsidenoteinsert - -% not: \appendtoks \setnotehsize \to \everyinsidenoteinsert (spoils columns) - -\let\lastnotesymbol\relax - -%D \macros -%D {note} -%D -%D Refering to a note is accomplished by the rather short -%D command: -%D -%D \showsetup{note} -%D -%D This command is implemented rather straightforward as: - -\unexpanded\def\notesymbol - {\dodoubleempty\donotesymbol} - -\def\donotesymbol[#1][#2]% - {\bgroup - \ifnotesenabled - \edef\currentnote{#1}% - \ifsecondargument - \unskip - \dodonotesymbol{\in[#2]}% - \else - \dodonotesymbol\lastnotesymbol - \fi - \fi - \egroup} - -\def\dodonotesymbol#1% - {\noteparameter\c!textcommand{\dosetnoteattributes\c!textstyle\c!textcolor#1}} - -%D Normally footnotes are saved as inserts that are called upon -%D as soon as the pagebody is constructed. The footnote -%D insertion routine looks just like the \PLAIN\ \TEX\ one, -%D except that we check for the end note state. - -% testcase for split bottom alignment see (a) below -% -% \dorecurse{6}{\input tufte\footnote{\input ward \input tufte \relax}} - -\unexpanded\def\placenoteinserts - {\processnotes\doplacenoteinserts} - -\unexpanded\def\unvboxed {\ifvmode\unvbox \else\box \fi} -\unexpanded\def\unvcopied{\ifvmode\unvcopy\else\copy\fi} - -% idea: tag with attr and then just flush them again - -\def\dobetweenparagraphnotes % should not be too much - {\noteparameter\c!inbetween} - -\def\doflushgobalnotes - {\doifelse{\noteparameter\c!paragraph}\v!yes - {\vbox - {\beginofshapebox - \iftrialtypesetting\unvcopied\else\unvboxed\fi\currentnoteins - \endofshapebox - %\doreshapebox{\box\shapebox}{}{}{}% get rid of penalties etc - \gdef\dodobetweenparagraphnotes{\glet\dodobetweenparagraphnotes\dobetweenparagraphnotes}% shape works reverse - \doreshapebox{\hbox{\unhbox\shapebox\dodobetweenparagraphnotes}}{}{}{}% get rid of penalties etc - \innerflushshapebox - \convertvboxtohbox}} - {\iftrialtypesetting\unvcopied\else\unvboxed\fi\currentnoteins}} - -\def\dodoplacenoteinserts - {\ifcase\noteparameter\c!n\relax - % should not happen - \or - \doglobalflushnotesnormal - \else - \doglobalflushnotescolums - \fi} - -\def\doglobalflushnotesnormal - {%\iftrialtypesetting\copy\else\box\fi\currentnoteins - \doflushgobalnotes - \obeydepth} % (a) added , since split footnotes will not align properly - -\def\doglobalflushnotescolums - {\edef\currentnotewidth{\noteparameter\c!width}% - \doifdimensionelse\currentnotewidth\donothing - {\edef\currentnotewidth{\the\hsize}}% - \startsimplecolumns[\c!distance=\noteparameter\c!columndistance,\c!n=\noteparameter\c!n,\c!width=\currentnotewidth]% - %\iftrialtypesetting\unvcopied\else\unvboxed\fi\currentnoteins % compare with local - \doflushgobalnotes - \stopsimplecolumns} - -\def\doplacenoteinserts - {\relax\ifdim\ht\currentnoteins>\zeropoint\relax - \ifnum\noteparameter\s!noteloc=\plusfive - \else - \endgraf - \ifvmode - \whitespace - \noteparameter\c!before - \fi - % \bgroup - % \setupalign[\noteparameter\c!align]% - \placenoterule % alleen in ..mode - % \par - % \egroup - \bgroup - \setnotebodyfont - \setbox\scratchbox\hbox - {\dodoplacenoteinserts}% - \setbox\scratchbox\hbox - {\localframed - [\??vn\currentnote] - [\c!width=\v!fit, - \c!height=\v!fit, - \c!strut=\v!no, - \c!offset=\v!overlay] - {\ifdim\dp\scratchbox=\zeropoint % this hack is needed because \vadjust - \hbox{\lower\strutdp\box\scratchbox}% % in margin number placement - \else % hides the (always) present depth - \box\scratchbox - \fi}}% - \setbox\scratchbox\hbox{\lower\strutdepth\box\scratchbox}% - \dp\scratchbox\strutdepth % so we know that it has the note bodyfont depth - \box\scratchbox - \egroup - \endgraf - \ifvmode - \noteparameter\c!after - \fi - \fi - \fi} - -%D Supporting end notes is surprisingly easy. Even better, we -%D can combine this feature with solving the common \TEX\ -%D problem of disappearing inserts when they're called for in -%D deeply nested boxes. The general case looks like: -%D -%D \starttyping -%D \postponenotes -%D \.box{whatever we want with footnotes} -%D \flushnotes -%D \stoptyping -%D -%D This alternative can be used in headings, captions, tables -%D etc. The latter one sometimes calls for notes local to -%D the table, which can be realized by saying -%D -%D \starttyping -%D \setlocalfootnotes -%D some kind of table with local footnotes -%D \placelocalfootnotes -%D \stoptyping -%D -%D Postponing is accomplished by simply redefining the (local) -%D insert operation. A not too robust method uses the -%D \type{\insert} primitive when possible. This method fails in -%D situations where it's not entirely clear in what mode \TEX\ -%D is. Therefore the auto method can is to be overruled when -%D needed. - -\newconditional\postponingnotes - -% we need a proper state: normal, postponing, flushing - -\def\postponenotes - {\ifconditional\postponingnotes\else - \global\settrue\postponingnotes - \global\let\flushnotes\doflushnotes - \ctxlua{structures.notes.postpone()}% - \fi} - -\let\flushnotes\relax - -\def\doflushnotes - {\ifconditional\postponingnotes - \begingroup - \let\flushnotes \relax - \let\postponenotes\relax - \ctxlua{structures.notes.flushpostponed()}% this also resets the states ! - \global\setfalse\postponednote - \global\setfalse\postponingnotes - \global\let\flushnotes\relax - \endgroup - \fi} - -%D \macros -%D {startlocalfootnotes,placelocalfootnotes} -%D -%D The next two macros can be used in for instance tables, as -%D we'll demonstrate later on. -%D -%D \showsetup{startlocalfootnotes} -%D \showsetup{placelocalfootnotes} - -% todo: compatibility mode: when first arg is assignment or missing, then all - -\newtoks\everyplacelocalnotes - -\appendtoks - \let\flushnotes \relax - \let\postponenotes\relax -\to \everyplacelocalnotes - -\def\defaultnotewidth{\makeupwidth} % {\ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi} - -\newconditional\inlocalnotes - -\unexpanded\def\startlocalnotes - {\dosingleempty\dostartlocalnotes} - -\def\dostartlocalnotes[#1]% - {\def\localnoteslist{#1}% - \settrue\inlocalnotes - \processcommacommand[\localnoteslist]\dodostartlocalnotes} - -\unexpanded\def\stoplocalnotes - {\processcommacommand[\localnoteslist]\dodostoplocalnotes - \setfalse\inlocalnotes} - -\def\dodostartlocalnotes#1% - {\doifnot{\noteparameter\c!continue}\v!yes - {\savestructurecounter[#1]% - \resetstructurecounter[#1]}% - \ctxlua{structures.notes.save("#1","store")}} - -\def\dodostoplocalnotes#1% - {\doifnot{\noteparameter\c!continue}\v!yes - {\restorestructurecounter[#1]}% - \ctxlua{structures.notes.restore("#1")}} - -\unexpanded\def\placelocalnotes - {\dodoubleempty\doplacelocalnotes} - -\def\doplacelocalnotes[#1][#2]% - {\doif{\ctxlua{structures.notes.getstate("#1")}}{store}{\dodoplacelocalnotes{#2}{#1}}} - -\def\dodoplacelocalnotes#1#2% settings note - {\begingroup - \the\everyplacelocalnotes - % beware, we cannot trust setting \currentnote here - \getparameters[\??vn#2][\c!width=\v!fit,\c!height=\v!fit,\c!strut=\v!no,\c!offset=\v!overlay,#1]% we only need a selective one - \dolocalnotealternative{#2}% - \endgroup - \dochecknote} % we need to restore the old state - -%D These commands can be used like: -%D -%D \startbuffer -%D \startlocalnotes[width=.3\hsize,n=0] -%D \placetable -%D {Some Table} -%D \placeontopofeachother -%D {\starttable[|l|r|] -%D \HL -%D \VL Nota\footnote{Bene} \VL Bene\footnote{Nota} \VL\SR -%D \VL Bene\footnote{Nota} \VL Nota\footnote{Bene} \VL\SR -%D \HL -%D \stoptable} -%D {\placelocalnotes} -%D \stoplocalnotes -%D \stopbuffer -%D -%D \typebuffer -%D -%D Because this table placement macro expect box content, and -%D thanks to the grouping of the local footnotes, we don't need -%D additional braces. -%D -%D \getbuffer - -%D \macros -%D {placefootnotes} -%D -%D We still have no decent command for placing footnotes -%D somewhere else than at the bottom of the page (for which no -%D user action is needed). Footnotes (endnotes) can be -%D placed by using -%D -%D \showsetup{placefootnotes} - -\unexpanded\def\placebottomnotes - {\processnotes\placenoteinserts} - -\unexpanded\def\placenotes - {\dodoubleempty\doplacenotes} - -\def\doplacenotes[#1][#2]% - {\processcommalist[#1]{\dodoplacenotes{#2}}} - -\def\dodoplacenotes#1#2% settings note - {\edef\currentnote{#2}% - \doifelse{\ctxlua{structures.notes.getstate("#2")}}{store} - \dodoplacelocalnotes - \dodoplaceglobalnotes - {#1}{#2}} - -\def\dodoplaceglobalnotes#1#2% - {\begingroup - \setupnote[#2][#1]% - \doplacenoteinserts - \endgroup - \the\everysetupnote} % to be checkes - -%D Placement - -\long\def\installnotealternative#1#2% - {\setvalue{\??vn:\c!alternative:#1}{#2}} - -\def\doifnotescollected#1% - {\ctxlua{structures.notes.doifcontent("#1")}} - -\def\dolocalnotealternative#1% - {\edef\currentnote{#1}% - \doifnotescollected\currentnote - {\endgraf - \ifvmode - \whitespace - \noteparameter\c!before - \fi - \begingroup - \setnotebodyfont - \getvalue{\??vn:\c!alternative:\noteparameter\c!alternative}% - \endgroup - \ifvmode - \noteparameter\c!after - \fi}} - -\setvalue{\??vn:\c!alternative:}{\getvalue{\??vn:\c!alternative:\v!none}} - -%D A stupid alternative is also provided: -%D -%D \starttyping -%D \setupfootnotes[location=text,alternative=none] -%D \stoptyping - -% \def\flushlocalnotes#1{\ctxlua{structures.notes.flush("#1","store")}} -\def\flushlocalnotes#1{\ctxlua{structures.notes.flush("#1","store","\noteparameter\c!criterium")}} - -\installnotealternative \v!none - {\flushlocalnotes\currentnote} - -\installnotealternative \v!grid % test if n > 0 - {\snaptogrid\hbox - {\localframed - [\??vn\currentnote] - {\flushlocalnotes\currentnote}}} - -\installnotealternative \v!fixed % test if n > 0 - {\localframed - [\??vn\currentnote] - {\flushlocalnotes\currentnote}} - -\installnotealternative \v!columns % redundant - {\localframed - [\??vn\currentnote] - {\edef\currentnotewidth{\noteparameter\c!width}% - \doifdimensionelse\currentnotewidth\donothing - {\edef\currentnotewidth{\the\hsize}}% -% \setupinmargin[\c!align=\v!left]% - \startsimplecolumns[\c!distance=\noteparameter\c!columndistance,\c!n=\noteparameter\c!n,\c!width=\currentnotewidth]% - \flushlocalnotes\currentnote - \stopsimplecolumns}} - -%D \macros -%D {fakenotes} - - % is this ok? endnotes and such - - \unexpanded\def\fakenotes - {\ifhmode\endgraf\fi\ifvmode - \calculatetotalclevernoteheight - \ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi - \fi} - - \unexpanded\def\fakepagenotes - {\ifhmode\endgraf\fi\ifvmode - \calculatetotalpagenoteheight - \ifdim\totalnoteheight>\zeropoint \kern\totalnoteheight \fi - \fi} - - \newdimen\totalnoteheight - - \def\doaddtototalnoteheight#1% - {\ifdim\ht#1>\zeropoint - \ifcase\count#1\else - % todo: divide by count - \advance\totalnoteheight\ht #1% - \advance\totalnoteheight\skip#1% - \fi - \fi} - - \def\docalculatetotalnoteheight - {\ifcase\clevernotes % tricky here ! ! ! to be sorted out ! ! ! - \doaddtototalnoteheight\currentnoteins - \else -% \doaddtototalnoteheight\currentbackupnoteins - \fi} - - \def\docalculatetotalclevernoteheight - {\ifcase\clevernotes \else % tricky here ! ! ! to be sorted out ! ! ! - \doaddtototalnoteheight\currentnoteins - \fi} - - \def\docalculatetotalpagenoteheight - {\doaddtototalnoteheight\currentnoteins} - - \def\calculatetotalnoteheight {\totalnoteheight\zeropoint\processnotes\docalculatetotalnoteheight} - \def\calculatetotalclevernoteheight{\totalnoteheight\zeropoint\processnotes\docalculatetotalclevernoteheight} - \def\calculatetotalpagenoteheight {\totalnoteheight\zeropoint\processnotes\docalculatetotalpagenoteheight} - - \newif\ifnotespresent - - \def\dochecknotepresence - {\ifdim\ht\currentnoteins>\zeropoint - \notespresenttrue - \fi} - - \def\checknotepresence - {\notespresentfalse - \processnotes\dochecknotepresence} - -%D Now how can this mechanism be hooked into \CONTEXT\ without -%D explictly postponing footnotes? The solution turned out to -%D be rather simple: -%D -%D \starttyping -%D \everypar {...\flushnotes...} -%D \neverypar {...\postponenotes} -%D \stoptyping -%D -%D and -%D -%D \starttyping -%D \def\ejectinsert% -%D {... -%D \flushnotes -%D ...} -%D \stoptyping -%D -%D We can use \type{\neverypar} because in most commands -%D sensitive to footnote gobbling we disable \type{\everypar} -%D in favor for \type{\neverypar}. In fact, this footnote -%D implementation is the first to use this scheme. - -%D This is a nasty and new secondary footnote flusher. It -%D can be hooked into \type {\everypar} like: -%D -%D \starttyping -%D \appendtoks \synchronizenotes \to \everypar -%D \stoptyping - - % \def\dosynchronizenotes - % {\ifvoid\currentnoteins\else\insert\currentnoteins{\unvbox\currentnoteins}\fi} - % - % \def\synchronizenotes - % {\processnotes\dosynchronizenotes} - -\let\synchronizenotes\relax - -%D When typesetting footnotes, we have to return to the -%D footnote specific bodyfont size, which is in most cases derived -%D from the global document bodyfont size. In the previous macros -%D we already used a footnote specific font setting macro. - -\def\setnotebodyfont - {\let\setnotebodyfont\relax - \restoreglobalbodyfont - \switchtobodyfont[\noteparameter\c!bodyfont]% - \setuptolerance[\noteparameter\c!tolerance]% - \setupalign[\noteparameter\c!align]} - -%D The footnote mechanism defaults to a traditional one -%D column way of showing them. By default we precede them by -%D a small line. - -\ifx\v!endnote\undefined \def\v!endnote{endnote} \fi - -\definenote [\v!footnote] -\definenote [\v!endnote ] [\c!location=\v!none] % else no break - -%D Compatibility macros: - -\unexpanded\def\setupfootnotedefinition{\setupnotedefinition [\v!footnote]} -\unexpanded\def\setupfootnotes {\setupnote [\v!footnote]} -%unexpanded\def\footnote {\setnote [\v!footnote]} -\def\footnotetext {\setnotetext [\v!footnote]} -%unexpanded\def\note {\dodoubleempty\notesymbol [\v!footnote]} % alleen footnote -\unexpanded\def\placefootnotes {\dodoubleempty\doplacefootnotes [\v!footnote]} -\unexpanded\def\placelocalfootnotes {\dodoubleempty\doplacelocalfootnotes[\v!footnote]} -\unexpanded\def\startlocalfootnotes {\startlocalnotes [\v!footnote]} % alleen footnote -\unexpanded\def\stoplocalfootnotes {\stoplocalnotes } - -\def\doplacefootnotes [#1][#2]{\ifsecondargument\placenotes [#1][#2,\c!height=\textheight]\else\placenotes [#1]\fi} -\def\doplacelocalfootnotes[#1][#2]{\ifsecondargument\placelocalnotes[#1][#2,\c!height=\textheight]\else\placelocalnotes[#1]\fi} - -\unexpanded\def\note{\dodoubleempty\donote} - -\def\donote[#1][#2]{\ifsecondargument\donotesymbol[#1][#2]\else\secondargumenttrue\donotesymbol[\v!footnote][#1]\fi} - -%D Goodies: -%D -%D \starttyping -%D \dorecurse {100} { -%D test \footnote{\doifnoteonsamepageelse[footnote]{ibidem}{aaa}} -%D } -%D \stoptyping - -\def\doifnoteonsamepageelse[#1]{\ctxlua{structures.notes.doifonsamepageasprevious("#1")}} - -%D New trickery: - -\def\ownnotesymbol#1% #1 gets number passed - {\executeifdefined{\??vn::\currentnote}\empty} - -\unexpanded\def\setnotesymbol[#1]#2#3% - {\prewordbreak % prevent lookback - \setgvalue{\??vn::#1}{#3} - \dolastnotesymbol} - -\unexpanded\def\ownnote[#1]#2#3#4% - {\setnotesymbol[#1]{#2}{#3}% - \setnotetext [#1]{#4}} - -\defineconversion - [ownnote] - [\ownnotesymbol] - -\protect \endinput |