summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/snotez/snotez.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/snotez/snotez.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/snotez/snotez.sty')
-rw-r--r--macros/latex/contrib/snotez/snotez.sty299
1 files changed, 299 insertions, 0 deletions
diff --git a/macros/latex/contrib/snotez/snotez.sty b/macros/latex/contrib/snotez/snotez.sty
new file mode 100644
index 0000000000..62c0c2d53a
--- /dev/null
+++ b/macros/latex/contrib/snotez/snotez.sty
@@ -0,0 +1,299 @@
+% --------------------------------------------------------------------------
+% the SNOTEZ package
+%
+% Sidenotes for LaTeX2e
+%
+% --------------------------------------------------------------------------
+% Clemens Niederberger
+% Web: https://bitbucket.org/cgnieder/enotez/
+% E-Mail: contact@mychemistry.eu
+% --------------------------------------------------------------------------
+% Copyright 2012--2013 Clemens Niederberger
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Clemens Niederberger.
+% --------------------------------------------------------------------------
+% The snotez package consists of the files
+% - snotez.sty, snotez_en.tex, snotez_en.pdf, README
+% --------------------------------------------------------------------------
+% If you have any ideas, questions, suggestions or bugs to report, please
+% feel free to contact me.
+% --------------------------------------------------------------------------
+\def\snotez@date{2013/04/21}
+\def\snotez@version{v0.3}
+\def\snotez@description{sidenote support for LaTeX 2e (CN)}
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{snotez}[\snotez@date\space \snotez@version\space \snotez@description]
+
+\RequirePackage{etoolbox,pgfopts,marginnote}
+\@ifpackageloaded{zref-abspage}
+ {\RequirePackage{perpage}}
+ {\AtEndPreamble{\RequirePackage{perpage}}}
+
+% --------------------------------------------------------------------------
+% message handling
+\def\snotez@create@message#1{%
+ \ifstrequal{#1}{Error}
+ {%
+ \lowercase{\csdef{snotez@#1}}##1##2{%
+ \csuse{Package#1}{snotez}{##1}{##2}}%
+ }{%
+ \lowercase{\csdef{snotez@#1}}##1{%
+ \csuse{Package#1}{snotez}{##1}}%
+ }}
+\snotez@create@message{Error}
+\snotez@create@message{Warning}
+\snotez@create@message{WarningNoLine}
+\snotez@create@message{Info}
+
+% --------------------------------------------------------------------------
+% package options:
+\newbool{snotez@marginnote}
+\newbool{snotez@perpage}
+\newbool{snotez@footnote}
+\newbool{snotez@dblarg}
+\booltrue{snotez@dblarg}
+
+\def\snotez@note@mark@sep{\space}
+\def\snotez@note@mark@format#1{\@textsuperscript{\normalfont#1}}
+\def\snotez@format{\footnotesize}
+\def\snotez@text@mark@format#1{\@textsuperscript{\normalfont#1}}
+
+\pgfkeys{
+ snotez/.cd,
+ % all sidenotes use \marginnote:
+ marginnote/.is if = snotez@marginnote ,
+ text-format/.code = \def\snotez@format{#1} ,
+ text-format+/.code =
+ \expandafter\def\expandafter\snotez@format\expandafter{\snotez@format#1} ,
+ % make sidenotes counted per page:
+ perpage/.is if = snotez@perpage ,
+ note-mark-sep/.code = \def\snotez@note@mark@sep{#1} ,
+ note-mark-format/.code = \def\snotez@note@mark@format##1{#1} ,
+ text-mark-format/.code = \def\snotez@text@mark@format##1{#1} ,
+ % make all footnotes sidenotes:
+ footnote/.is if = snotez@footnote ,
+ dblarg/.is if = snotez@dblarg
+}
+
+\ProcessPgfOptions*
+
+\newrobustcmd\setsidenotes[1]{\pgfqkeys{/snotez}{#1}}
+
+% --------------------------------------------------------------------------
+% the \sidenote command
+\ifbool{snotez@dblarg}{
+ % syntax:
+ % - \sidenote{text}
+ % - \sidenote[mark]{text}
+ % - \sidenote[offset][mark]{text}
+ \newrobustcmd*\sidenote{%
+ \@ifnextchar[%
+ {\snotez@sidenote@aux@i}
+ {\snotez@sidenote@aux@ii{}[]}% no option
+ }
+
+ \def\snotez@sidenote@aux@i[#1]{%
+ \@ifnextchar[%
+ {\snotez@sidenote@aux@ii{#1}}% two options
+ {\snotez@sidenote@aux@ii{}[{#1}]}% one option
+ }
+}{
+ % syntax:
+ % - \sidenote{text}
+ % - \sidenote[mark]{text}
+ % - \sidenote(offset){text}
+ % - \sidenote(offset)[mark]{text}
+ \newrobustcmd*\sidenote{%
+ \@ifnextchar(%
+ {\snotez@sidenote@aux@i}% offset
+ {%
+ \@ifnextchar[
+ {\snotez@sidenote@aux@ii{}}% no offset nut mark
+ {\snotez@sidenote@aux@ii{}[]}% no offset and no mark
+ }%
+ }
+
+ \def\snotez@sidenote@aux@i(#1){%
+ \@ifnextchar[%
+ {\snotez@sidenote@aux@ii{#1}}% mark
+ {\snotez@sidenote@aux@ii{#1}[]}% no mark
+ }
+}
+
+% #1: offset
+% #2: mark
+% #3: text
+\long\def\snotez@sidenote@aux@ii#1[#2]#3{%
+ \snotez@mark{#2}%
+ \snotez@text{#1}{#3}%
+}
+
+% this one is very much \@footnotemark from latex.ltx:
+\def\snotez@write@mark#1{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ #1%
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+}
+
+\def\snotez@mark#1{%
+ \ifblank{#1}% or \ifstrempty?
+ {\refstepcounter{sidenote}\protected@xdef\@the@snotez@mark{\thesidenote}}
+ {\protected@edef\@currentlabel{#1}\protected@xdef\@the@snotez@mark{#1}}%
+ \snotez@write@mark{\hbox{\snotez@text@mark@format{\@the@snotez@mark}}}%
+}
+
+\ifcsdef{c@chapter}
+ {\newcounter{sidenote}[chapter]}
+ {\newcounter{sidenote}%
+}
+
+% --------------------------------------------------------------------------
+% the \sidenotemark command
+\newrobustcmd*\sidenotemark[1][]{\snotez@mark{#1}}
+
+% --------------------------------------------------------------------------
+% the \sidenotetext command
+\ifbool{snotez@dblarg}{
+ % syntax:
+ % - \sidenotetext{text}
+ % - \sidenotetext[mark]{text}
+ % - \sidenotetext[offset][mark]{text}
+ \newrobustcmd*\sidenotetext{%
+ \@ifnextchar[%
+ {\snotez@sidenotetext@aux@i}
+ {\snotez@sidenotetext@aux@ii{}[]}% no option
+ }
+
+ \def\snotez@sidenotetext@aux@i[#1]{%
+ \@ifnextchar[%
+ {\snotez@sidenotetext@aux@ii{#1}}% two options
+ {\snotez@sidenotetext@aux@ii{}[{#1}]}% one option
+ }
+}{
+ % syntax:
+ % - \sidenotetext{text}
+ % - \sidenotetext[mark]{text}
+ % - \sidenotetext(offset){text}
+ % - \sidenotetext(offset)[mark]{text}
+ \newrobustcmd*\sidenotetext{%
+ \@ifnextchar(%
+ {\snotez@sidenotetext@aux@i}% offset
+ {%
+ \@ifnextchar[
+ {\snotez@sidenotetext@aux@ii{}}% no offset nut mark
+ {\snotez@sidenotetext@aux@ii{}[]}% no offset and no mark
+ }%
+ }
+
+ \def\snotez@sidenotetext@aux@i(#1){%
+ \@ifnextchar[%
+ {\snotez@sidenotetext@aux@ii{#1}}% mark
+ {\snotez@sidenotetext@aux@ii{#1}[]}% no mark
+ }
+}
+
+% #1: offset
+% #2: mark
+% #3: text
+\long\def\snotez@sidenotetext@aux@ii#1[#2]#3{%
+ \ifblank{#2}{}{\protected@xdef\@the@snotez@mark{#2}}%
+ \snotez@text{#1}{#3}%
+}
+
+% #1: offset
+% #2: text
+\def\snotez@text#1#2{%
+ \ifblank{#1}
+ {%
+ \snotez@marginpar{%
+ \snotez@format
+ \snotez@write@mark{\snotez@note@mark@format{\@the@snotez@mark}}%
+ \snotez@note@mark@sep#2}%
+ }
+ {%
+ \snotez@marginnote{%
+ \snotez@format
+ \snotez@write@mark{\snotez@note@mark@format{\@the@snotez@mark}}%
+ \snotez@note@mark@sep#2%
+ }[\snotez@if@nblskip{#1}{\@cdr#1\@nil\baselineskip}{#1}]%
+ }%
+}
+
+\def\snotez@if@nblskip#1{%
+ \expandafter\ifx\@car#1\@nil*%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+
+\let\snotez@marginpar\marginpar
+\let\snotez@marginnote\marginnote
+
+% --------------------------------------------------------------------------
+% process preamble options:
+\AtBeginDocument{
+ % if option `footnote=true' let \footnote to \sidenote:
+ \ifbool{snotez@footnote}
+ {
+ \let\footnote\sidenote
+ \let\footnotemark\sidenotemark
+ \let\footnotetext\sidenotetext
+ }{}
+ % if option `marginnote=true' use \marginnote for all notes:
+ \ifbool{snotez@marginnote}
+ {%
+ \let\snotez@marginpar\marginnote
+ \snotez@info{All sidenotes are now using \string\marginnote^^J
+ instead of \string\marginpar}%
+ }%
+ {}
+}
+
+\AtEndPreamble{%
+ % if option `perpage=true' count notes per page:
+ \ifbool{snotez@perpage}
+ {\MakeSortedPerPage{sidenote}}
+ {\MakeSorted{sidenote}}%
+ \@ifpackageloaded{fnpct}
+ {%
+ \ifbool{snotez@dblarg}
+ {}
+ {%
+ \snotez@error
+ {When you're using the `fnpct' package together with^^J
+ `snotez' you need to enable the `dblarg' option!}
+ {When you're using the `fnpct' package together with^^J
+ `snotez' you need to enable the `dblarg' option!}%
+ }%
+ }
+ {}%
+}
+
+\endinput
+
+% --------------------------------------------------------------------------
+% HISTORY:
+2012/11/15 v0.1 - first version
+2013/04/03 v0.2 - documentation, removed erroneous `fnpct' adaption, other
+ minor changes
+ - added update of \@currentlabel when a custom mark is used
+2013/04/21 v0.3 - try to avoid conflict with package loading order of
+ `perpage' and `zref-abspage'
+ - allow `*' syntax for offsets that are multiples of
+ \baselineskip
+ - syntax change in optional arguments; option `dblarg'
+ provides previous syntax