From e65f51f91e7c01ee998b546ed4149b5937dbe8db Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 14 Apr 2014 22:52:27 +0000 Subject: seealso (10apr14) git-svn-id: svn://tug.org/texlive/trunk@33449 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/seealso/seealso.sty | 92 ++++++++++++++++++++----- 1 file changed, 73 insertions(+), 19 deletions(-) (limited to 'Master/texmf-dist/tex/latex/seealso') diff --git a/Master/texmf-dist/tex/latex/seealso/seealso.sty b/Master/texmf-dist/tex/latex/seealso/seealso.sty index ae67167b76f..235beb8f4a8 100644 --- a/Master/texmf-dist/tex/latex/seealso/seealso.sty +++ b/Master/texmf-dist/tex/latex/seealso/seealso.sty @@ -20,30 +20,35 @@ %% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{seealso} - [2014/04/06 v1.0 makeidx's see and seealso with page number support.] + [2014/04/10 v1.1 makeidx's see and seealso with page number support.] \RequirePackage{etoolbox} \RequirePackage{kvoptions} \SetupKeyvalOptions{ family=seealso@opt, - prefix=seealso@} + prefix=seealso@, + setkeys=\kvsetkeys} \DeclareBoolOption[true]{override} \DeclareBoolOption[true]{activecr} \ProcessKeyvalOptions* \def\seealso@charlet#1{% \begingroup\lccode`\~=`#1\lowercase{\endgroup\let~}} \let\seealso@macrolist\empty -\def\seealso@clearlists{% - \def\do##1{\cslet{seealso@##1@list}\empty}% - \dolistloop\seealso@macrolist} -\AtBeginDocument{\seealso@clearlists} +\def\seealso@clearlist#1{% + \global\cslet{seealso@#1@list}\empty} +\AtBeginDocument{\forlistloop\seealso@clearlist\seealso@macrolist} \newcommand\SeealsoPrintList{% \forlistloop\seealso@printlist\seealso@macrolist - \seealso@clearlists} + \forlistloop\seealso@clearlist\seealso@macrolist} +\newif\ifseealso@gobblefirstlistsep \newif\ifseealso@firstitem \def\seealso@printlist#1{% \ifcsempty{seealso@#1@list} {} - {\csuse{seealso@#1@listsep}% + {\ifseealso@gobblefirstlistsep + \seealso@gobblefirstlistsepfalse + \else + \csuse{seealso@#1@listsep}% + \fi \csuse{seealso@#1@nameformat}{\csuse{#1name}}% \seealso@firstitemtrue \forlistcsloop{\seealso@listitem{#1}}{seealso@#1@list}}} @@ -66,16 +71,16 @@ \csdef{#2name}{##1}}% \ifcsdef{#2name} {} - {\setkeys{seealso@#2}{name=#3}}% + {\kvsetkeys{seealso@#2}{name=#3}}% \def\do##1{% \define@key{seealso@#2}{##1}{% \csdef{seealso@#2@##1}{####1}}% - \setkeys{seealso@#2}{##1=\csuse{seealso@##1}}}% + \kvsetkeys{seealso@#2}{##1=\csuse{seealso@##1}}}% \docsvlist{listsep,itemsep}% \def\do##1{% \define@key{seealso@#2}{##1}{% \csdef{seealso@#2@##1}########1{####1}}% - \setkeys{seealso@#2}{##1=\csuse{seealso@##1}{####1}}}% + \kvsetkeys{seealso@#2}{##1=\csuse{seealso@##1}{####1}}}% \docsvlist{nameformat,itemformat,pageformat}} \@onlypreamble{\DeclareSeealsoMacro} \newif\ifseealso@iscractive @@ -88,9 +93,38 @@ \fi \fi} \def\seealso@cr{% - \catcode`\^^M=5 - \seealso@iscractivefalse - \SeealsoPrintList} + \futurelet\next\seealso@cr@aux} +\def\seealso@cr@aux{% + \seealso@testwrap + \ifseealso@wrap + \space + \else + \catcode`\^^M=5 + \seealso@iscractivefalse + \SeealsoPrintList + \fi} +\newif\ifseealso@wrap +\def\seealso@testwrap{% + \seealso@wraptrue + \forlistloop\seealso@testwrap@aux\seealso@enditemlist} +\def\seealso@testwrap@aux#1{% + \ifx#1\next + \seealso@wrapfalse + \expandafter\listbreak + \fi} +\let\seealso@enditemlist\empty +\def\seealso@enditemlistadd#1{% + \ifinlist{#1}\seealso@enditemlist + {} + {\listadd\seealso@enditemlist{#1}}} +\define@key{seealso}{enditem}{% + \let\seealso@enditemlist\empty + \listadd\seealso@enditemlist{\seealso@cr}% + \forcsvlist\seealso@enditemlistadd{#1}} +\define@key{seealso}{enditem+}{% + \forcsvlist\seealso@enditemlistadd{#1}} +\kvsetkeys{seealso}{% + enditem={\indexspace,\item,\subitem,\subsubitem,\end}} \def\seealso@listsep{,\space} \def\seealso@itemsep{,\space} \def\seealso@nameformat#1{\emph{#1}\space} @@ -104,14 +138,34 @@ \csdef{seealso@#1}####1{##1}}} \forcsvlist\seealso@define@key{listsep,itemsep} \forcsvlist\seealso@define@keyarg{nameformat,itemformat,pageformat} -\def\SeealsoGobble#1{\@ifnextchar#1{\seealso@gobbleignorespaces}{}} -\def\seealso@gobbleignorespaces#1{\ignorespaces} +\AtBeginDocument{% + \ifundef\hyperindexformat{% + \let\SeealsoGobble\seealso@gobble + }{% + \def\SeealsoGobble#1{\seealso@swap{\seealso@gobble{#1}}}% + \def\seealso@swap#1#2#3#4{#2#3#4#1}% + }} +\def\seealso@gobble#1{% + \@ifnextchar#1% + {\seealso@gobbleignorespaces} + {\ifseealso@activecr + \ifx\@let@token\seealso@cr + \seealso@gobblefirstlistseptrue + \fi + \else + \ifx\@let@token\SeealsoPrintList + \seealso@gobblefirstlistseptrue + \fi + \fi}} +\def\seealso@gobbleignorespaces#1{% + \@ifnextchar\seealso@cr{\seealso@gobbleignorespaces}{\ignorespaces}} \newcommand\seealsosetup[2][]{% \ifstrempty{#1}{% - \setkeys{seealso}{#2}% + \kvsetkeys{seealso}{#2}% }{% - \def\do##1{\setkeys{seealso@##1}{#2}}% - \forcsvlist{\do}{#1}}} + \edef\do##1{% + \noexpand\kvsetkeys{seealso@##1}{\unexpanded{#2}}}% + \docsvlist{#1}}} \let\seenopage\see \let\seealsonopage\seealso \DeclareSeealsoMacro\seepage{see}{see} -- cgit v1.2.3