From 799587c8bece3420f45708d9435194a50a72cfa2 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 5 Jan 2015 23:21:26 +0000 Subject: jumplines (5jan15) git-svn-id: svn://tug.org/texlive/trunk@35965 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/jumplines/jumplines.sty | 248 +++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/jumplines/jumplines.sty (limited to 'Master/texmf-dist/tex/latex/jumplines') diff --git a/Master/texmf-dist/tex/latex/jumplines/jumplines.sty b/Master/texmf-dist/tex/latex/jumplines/jumplines.sty new file mode 100644 index 00000000000..b63849bbc71 --- /dev/null +++ b/Master/texmf-dist/tex/latex/jumplines/jumplines.sty @@ -0,0 +1,248 @@ +\NeedsTeXFormat{LaTeX2e}% +\ProvidesPackage{jumplines}[2015/01/05 v0.1 -- Teaser/Continued articles with hyperlinks] +%%% +%% License: LaTeX Project Public License version 1.3 +%% Copyright (2015) Dr. Christian Hupfer +%% Author: Christian Hupfer christian.hupfer@yahoo.de +%% +%%%% + +\RequirePackage{etex}% +\RequirePackage{etoolbox}[2011/01/03 2.2]% +\RequirePackage{xparse}% +\RequirePackage{xkeyval}[2012/10/14 v2.6b]% +\RequirePackage[svgnames]{xcolor} +\RequirePackage[breakable]{tcolorbox}% + +\RequirePackage{tocloft} +\RequirePackage{ifluatex} + +\ifluatex +\RequirePackage{luacolor}% Recommended +\fi + + +%%%% Key - Value definitions + +\NewDocumentCommand{\listofarticlesname}{}{List of Articles}% +\NewDocumentCommand{\listofcontinuedarticlesname}{}{List of continued Articles}% +\newlistof{article}{art}{\listofarticlesname}% +\newlistof{contarticle}{cont}{\listofcontinuedarticlesname}% + + + + +\define@key{jumpline}{ArticleHeadline}{% + \def\JLKVMacroArticleHeadline{#1}% +}% + +\define@key{jumpline}{ArticleAuthor}{% + \def\JLKVMacroArticleAuthor{#1}% +}% + +% Length related keys + +\define@key{jumpline}{ArticleFullHeight}{% + \def\JLKVMacroArticleFullHeight{#1}% +}% + +\define@key{jumpline}{TeaserHeight}[2in]{% + \def\JLKVMacroTeaserHeight{#1}% +}% + +\define@key{jumpline}{ContinuedArticleHeight}{% + \def\JLKVMacroContinuedArticleHeight{#1}% +}% + +\define@key{jumpline}{ContinuedFromTopskip}{% + \def\JLKVMacroContinuedFromTopskip{#1}% +}% +\define@key{jumpline}{ContinuedFromBottomskip}{% + \def\JLKVMacroContinuedFromBottomskip{#1}% +}% + +\define@key{jumpline}{ContinuedOnTopskip}{% + \def\JLKVMacroContinuedOnTopskip{#1}% +}% + +\define@key{jumpline}{ContinuedOnBottomskip}{% + \def\JLKVMacroContinuedOnBottomskip{#1}% +}% + +\define@key{jumpline}{ContinuedArticleBottomskip}{% + \def\JLKVMacroContinuedArticleBottomskip{#1}% +}% + +% Keys for optional teaser/continued article content and options + +\define@key{jumpline}{TeaserHeaderContent}{% + \def\JLKVMacroTeaserHeaderContent{#1}% +}% + +\define@key{jumpline}{TeaserHeaderOptions}{% + \def\JLKVMacroTeaserHeaderOptions{#1}% +}% + +\define@key{jumpline}{ContinuedArticleHeaderContent}{% + \def\JLKVMacroContinuedArticleHeaderContent{#1}% +}% + + +\define@key{jumpline}{ContinuedArticleHeaderOptions}{% + \def\JLKVMacroContinuedArticleHeaderOptions{#1}% +}% + +\presetkeys{jumpline}{TeaserHeight=2in, + ContinuedOnTopskip={0.4\baselineskip}, + ContinuedOnBottomskip={0pt}, + ContinuedFromTopskip={0.4\baselineskip}, + ContinuedFromBottomskip={0pt},% + ContinuedArticleBottomskip={20pt},% + TeaserHeaderContent={}, + TeaserHeaderOptions={breakable,leftlower=0pt,rightlower=0pt,boxrule=0pt,left=0pt,right=0pt, arc=0pt,auto outer arc,colbacktitle=black,coltitle=white,toptitle=2mm,bottomtitle=2mm}, + ContinuedArticleHeaderOptions={breakable,leftlower=0pt,rightlower=0pt,boxsep=0pt,boxrule=0pt,left=0pt,right=0pt,arc=0pt,auto outer arc,colbacktitle=black,coltitle=white,toptitle=2mm,bottomtitle=2mm,righttitle=1mm} + }{}% + + + + +\newcounter{@@jumplines@@internaldocounter}% + +\newlength{\@@jumplines@@articleheight}% +\newlength{\@@jumplines@@teaserboxheight}% + + +\xdef\ContinuedArticleList{}% +\xdef\TeaserBoxList{}% +\xdef\JumplineOptionsList{}% + +\listcsadd{ContinuedArticleList}{}% +\listcsadd{TeaserBoxList}{}% +\listcsxadd{JumplineOptionsList}{}% + + + +\NewDocumentCommand\JumplineArticle{+o+m}{% Provide later on for a starred version + \refstepcounter{article}% + \newbox\articlebox% + \newbox\teaserbox% + \begingroup% + \IfValueTF{#1}{% + \setkeys{jumpline}{#1}% + }{% + \typeout{Nothing!}% + }% + \setlength{\@@jumplines@@teaserboxheight}{\JLKVMacroTeaserHeight}% + \global\setbox\articlebox=\vbox{\noindent#2}% + \setlength{\@@jumplines@@articleheight}{\the\ht\articlebox}% + \global\setbox\teaserbox=\vsplit\articlebox to \@@jumplines@@teaserboxheight% Split the input to teaser box and a continued box + \listcsxadd{TeaserBoxList}{\number\teaserbox}% + \listcsxadd{ContinuedArticleList}{\number\articlebox}% + % Transfer options to the child box handlers + \listcsxadd{JumplineOptionsList}{\unexpanded{#1},ContinuedArticleHeight={\the\ht\articlebox},ArticleFullHeight={\the\@@jumplines@@articleheight}}% + \endgroup% +}% + + +\NewDocumentCommand{\DisplayJumplineTeaser}{+m+m}{% + \begingroup% + \setkeys{jumpline}{#1}% + \begin{tcolorbox}[title={Article \thearticle~\ifdef{\JLKVMacroArticleHeadline}{\JLKVMacroArticleHeadline}{}}, + code={\pgfkeysalsofrom\JLKVMacroTeaserHeaderOptions}] + \ifdef{\JLKVMacroTeaserHeaderContent}{% + \JLKVMacroTeaserHeaderContent}{}% + \end{tcolorbox}% + \phantomsection% + \label{jlarticle::teaser::\number\value{article}}% + \ifdef{\JLKVMacroArticleHeadline}{% + \addcontentsline{art}{section}{\thearticle~\JLKVMacroArticleHeadline} + }{% + \addcontentsline{art}{section}{\thearticle}% + }% + % Now unbox it +% \colorlet{saved}{.} + \begingroup + \noindent\unvbox#2% + \endgroup +% \color{saved} + \vskip\JLKVMacroContinuedOnTopskip% + \ifdef{\JLKVMacroArticleAuthor}{\raggedleft By \JLKVMacroArticleAuthor\par}{}% + \ifdimless{\JLKVMacroArticleFullHeight}{\JLKVMacroTeaserHeight}{% + }{% + \raggedleft\textit{\bfseries Continued on Page \pageref{jlarticle::\number\value{article}}} % Change later on to be more configurable! + }% + \vskip\JLKVMacroContinuedOnBottomskip% + \endgroup% +}% + + + +\NewDocumentCommand{\DisplayContinuedArticle}{+m+m}{% + \begingroup% + \setkeys{jumpline}{#1}% + \ifdimgreater{\JLKVMacroArticleFullHeight}{\JLKVMacroTeaserHeight}{% + \begin{tcolorbox}[title={\raggedleft Continued from Article \ref{jlarticle::teaser::\number\value{article}} on page \pageref{jlarticle::teaser::\number\value{article}}},code={\pgfkeysalsofrom\JLKVMacroContinuedArticleHeaderOptions}]% + \ifdef{\JLKVMacroContinuedArticleHeaderContent}{% + \JLKVMacroContinuedArticleHeaderContent}{% + }% + \end{tcolorbox}% + \phantomsection\label{jlarticle::\number\value{article}}% + \ifdef{\JLKVMacroArticleHeadline}{% + \addcontentsline{cont}{section}{\thearticle~\JLKVMacroArticleHeadline}% + }{% + \addcontentsline{cont}{section}{\thearticle}% + }% + \noindent\unvbox#2% + }{}% + \endgroup% +}% + +\NewDocumentCommand{\@@jumplines@@showcontinuedarticle}{+m}{% + \refstepcounter{article}% + \begingroup% + \setcounter{@@jumplines@@internaldocounter}{0}% + \renewcommand{\do}[1]{% + \stepcounter{@@jumplines@@internaldocounter}% + \ifnumequal{\value{@@jumplines@@internaldocounter}}{\value{article}}{% + \DisplayContinuedArticle{##1}{#1}% + \listbreak% + }{}}% + \dolistcsloop{JumplineOptionsList}% + \endgroup% +}% + +\NewDocumentCommand{\@@jumplines@@showteaser}{+m}{% + \refstepcounter{article}% + \begingroup% + \setcounter{@@jumplines@@internaldocounter}{0}% + \renewcommand{\do}[1]{% + \stepcounter{@@jumplines@@internaldocounter}% + \ifnumequal{\value{@@jumplines@@internaldocounter}}{\value{article}}{% + \DisplayJumplineTeaser{##1}{#1}% + \listbreak% + }{% + % Do nothing in this case + }% + }% End of \do definition + \dolistcsloop{JumplineOptionsList}% + \endgroup% +}% + + + +\NewDocumentCommand{\ShipoutArticleTeasers}{}{% + % Do it for safety reasons% + \setcounter{article}{0}% + \forlistcsloop{\@@jumplines@@showteaser}{TeaserBoxList}% +}% + +\NewDocumentCommand{\ShipoutArticleHangingArticles}{}{% + \setcounter{article}{0}% + \forlistcsloop{\@@jumplines@@showcontinuedarticle}{ContinuedArticleList}% +}% + + + + + +\endinput \ No newline at end of file -- cgit v1.2.3