Code:
\documentclass[ngerman]{scrartcl}
\usepackage{babel}
\usepackage{blindtext}
\usepackage[utf8]{inputenc}
%%%%zur genauen Platzierung
%\usepackage[showframe]{geometry}
%\usepackage{showframe}
\usepackage{filecontents}
\begin{filecontents}{mytextblock-rr.sty}
\ProvidesPackage{mytextkasten-rr}[2012/11/11 v0.2 package for typesetting nice textblocks with optional linenumbering, multicolumn and pagebreaks]
%%%Dieses Paket stellt die Umgebung \begin{mytextblock}[]Text inside the block\end{mytextblock} zur Verfügung.
%%%Das Beispiel deomonstriert die Verwendung
%%%Achtung mitunter sind mehrere Latexdurchgänge notwendig (da die labels immer erst im nächsten Durchgang verarbeitet werden können)
\usepackage{xkeyval}
%\usepackage[table]{xcolor}
\usepackage{lineno}
\usepackage{tikz}
\usepackage{calc,xifthen}
\usepackage{multicol}
\usepackage{changepage}
\usepackage{refcount}%not used in the current version
\usepackage{everypage}
\newcounter{mytextblockcounter}
\newcommand{\myisemptycheck}[3]{%like ifthenelse
\ifthenelse{\isempty{#1}\OR\equal{#1}{}\OR\equal{ }{#1}}{#2}{#3}}
%%lets define some keys
\define@cmdkey{mytextblock}{ID}{}
\define@cmdkey{mytextblock}{title}[]{}
\define@cmdkey{mytextblock}{source}[]{}
\define@cmdkey{mytextblock}{beforehook}{}
\define@cmdkey{mytextblock}{einleitung}{}
\define@cmdkey{mytextblock}{aftertexthook}{}
\define@cmdkey{mytextblock}{afterallhook}{}
\define@cmdkey{mytextblock}{pagelayout}{}
\define@cmdkey{mytextblock}{linethickness}{}
\define@cmdkey{mytextblock}{fillcolor}{}
\define@key{mytextblock}{columnsep}{\setlength{\columnsep}{#1}}
\define@cmdkey{mytextblock}{linenumbersep}{}
\newlength{\mytextblockrightstretch}
\newlength{\mytextblockleftstretch}
\define@key{mytextblock}{rightstretch}{\setlength{\mytextblockrightstretch}{#1}}
\define@key{mytextblock}{leftstretch}{\setlength{\mytextblockleftstretch}{#1}}
\newlength{\mytextblockinnerframesep}
\define@key{mytextblock}{innerframesep}{\setlength{\mytextblockinnerframesep}{#1}}
\define@boolkey{mytextblock}{insidemytextblock}{}
\define@boolkey{mytextblock}{framed}{}
\define@boolkey{mytextblock}{shaded}{}
\define@boolkey{mytextblock}{linenumbering}{}
\define@boolkey{mytextblock}{multicol}{}
\define@cmdkey{mytextblock}{multicols}{}
\define@cmdkey{mytextblock}{sourcefont}[]{}
\define@cmdkey{mytextblock}{titlefont}[]{}
\define@cmdkey{mytextblock}{einleitungfont}{}
%%%%%%Presettings
\presetkeys{mytextblock}{%
ID={k-\themytextblockcounter}
,title={}
,source={}
,beforehook={}
,einleitung={}
,aftertexthook={}
,afterallhook={}
,pagelayout={}
,insidemytextblock={true}
,linethickness={1pt}
,innerframesep={3pt}
,rightstretch={0cm}
,leftstretch={0cm}
,columnsep={13pt}
,linenumbersep={3pt}
,fillcolor={}%momentan noch nicht implementiert
,multicol=true
,multicols=2
,framed=true
,shaded=false
,linenumbering=true
,sourcefont={\footnotesize\raggedright}
,titlefont={\large\bfseries}
,einleitungfont={\slshape}
}{}
\newenvironment{mytextblocknumberQuote}%
{\begin{list}{}%
{\setlength\rightmargin{\mytextblockinnerframesep}%
\setlength\leftmargin{\multicolsep+\cmdKV@mytextblock@linethickness}
\setlength{\partopsep}{0pt}
\setlength{\topsep}{0pt}%
\setlength{\itemsep}{0pt}%
}
\item[]\ignorespaces}%
{\end{list}}
%%%%%Koordinaten am Anfang und Ende des Textblock
\newcommand{\mytextblockCatchCoordinateontop}{%
\begin{tikzpicture}[remember picture,overlay,line width=\cmdKV@mytextblock@linethickness]%
\coordinate (\cmdKV@mytextblock@ID topleftFP) at (-.5\pgflinewidth-\mytextblockinnerframesep,\pgflinewidth);%
\coordinate (\cmdKV@mytextblock@ID toprightFP) at (\textwidth+\pgflinewidth+\mytextblockinnerframesep,\pgflinewidth);%
\pgfmathsetlengthmacro\x{1in+\hoffset+\oddsidemargin-.5\pgflinewidth-\mytextblockinnerframesep}%
\pgfmathsetlengthmacro\y{1in+\voffset+\headsep+\headheight+\topmargin+\textheight}%
\path (current page.north west)+(\x,-\y)coordinate (\cmdKV@mytextblock@ID pagebottomleftFP);%
\path (\cmdKV@mytextblock@ID pagebottomleftFP)+(\textwidth+\pgflinewidth+2\mytextblockinnerframesep,0)coordinate(\cmdKV@mytextblock@ID pagebottomrightFP);%
\coordinate (\cmdKV@mytextblock@ID titleplacingFP) at (1,0);%
\end{tikzpicture}%
}%
\newcommand{\mytextblockCatchCoordinateonbottom}{%
\begin{tikzpicture}[remember picture,overlay,line width=\cmdKV@mytextblock@linethickness,baseline=-.8\baselineskip]%
\coordinate(\cmdKV@mytextblock@ID bottomleftLP) at (-\mytextblockinnerframesep-.5\pgflinewidth,-\pgflinewidth);
\coordinate(\cmdKV@mytextblock@ID bottomrightLP) at (\textwidth+1\pgflinewidth+\mytextblockinnerframesep,-\pgflinewidth);%
\pgfmathsetlengthmacro\x{1in+\hoffset+\oddsidemargin-\mytextblockinnerframesep-1\pgflinewidth}
\pgfmathsetlengthmacro\y{1in+\voffset+\headsep+\headheight+\topmargin-\pgflinewidth}%
\path(current page.north west)+(\x,-\y)coordinate(\cmdKV@mytextblock@ID pagetopleftLP);%
\path(\cmdKV@mytextblock@ID pagetopleftLP)+(\textwidth+2\mytextblockinnerframesep+2\pgflinewidth,0)coordinate(\cmdKV@mytextblock@ID pagetoprightLP);%
\end{tikzpicture}%
}
%%%%%%%%%%unser hübscher Textblock
\newenvironment{mytextblock}[1][]{%
\refstepcounter{mytextblockcounter}%
\setkeys{mytextblock}{#1}%
\label{\cmdKV@mytextblock@ID}%
%%%Koordinateneinfangen
\par\noindent\bigskip%
\mytextblockCatchCoordinateontop%
%%%%Kasten und frame setz
\ifthenelse{\equal{\pageref{\cmdKV@mytextblock@ID}}%
{\pageref{\cmdKV@mytextblock@ID-end}}}%
{}%Titel wird erst am Ende gesetzt
{\makeFramOrShadeatOnefirstpage
}
%%Der Text beginnt
\par\noindent%
\ifthenelse{\isempty{\cmdKV@mytextblock@einleitung}}{}{{\par\noindent\cmdKV@mytextblock@einleitungfont\cmdKV@mytextblock@einleitung\par\vspace{.5\baselineskip}}}%
\ifKV@mytextblock@linenumbering\begin{mytextblocknumberQuote}\else\begin{mytextblockQuote}\fi
\ifKV@mytextblock@multicol\begin{multicols}{\cmdKV@mytextblock@multicols}
[\vspace*{-\multicolsep}]
\else\fi
\ifKV@mytextblock@linenumbering
\resetlinenumber\modulolinenumbers[5]%
\setlength{\linenumbersep}{\cmdKV@mytextblock@linenumbersep}
\setlength{\linenumberwidth}{8pt}
\begin{linenumbers}%
\else\fi
}
{%
\ifKV@mytextblock@linenumbering%
\end{linenumbers}%
\else\fi%
\ifKV@mytextblock@multicol%
\end{multicols}\vspace*{-.8\baselineskip}%
\else\fi%
\ifKV@mytextblock@linenumbering\end{mytextblocknumberQuote}\else\end{mytextblockQuote}\fi%
\myisemptycheck{\cmdKV@mytextblock@source}{}%
{\rule{\textwidth}{.5pt}\par\noindent{\cmdKV@mytextblock@sourcefont\cmdKV@mytextblock@source}}%
\myisemptycheck{\cmdKV@mytextblock@aftertexthook}{}{\par\noindent\cmdKV@mytextblock@aftertexthook}%
\par\noindent%
%%Position
%%%%Koordinaten bestimmen
\mytextblockCatchCoordinateonbottom
%%%Rahmen setzen
\ifthenelse{\equal{\pageref{\cmdKV@mytextblock@ID}}{\pageref{\cmdKV@mytextblock@ID-end}}}%
{\makeFramOrShadeomOnepage%
}%
{\makeFramOrShadeonLastpage%
}%
\label{\cmdKV@mytextblock@ID-end}
\KV@mytextblock@insidemytextblockfalse%
}%
%%%alle Rahmen und Shattierungen
\newcommand{\makeFramOrShadeomOnepage}{%
\begin{tikzpicture}[remember picture,overlay,line width=\cmdKV@mytextblock@linethickness]
\ifKV@mytextblock@shaded\fill[opacity=.08] (\cmdKV@mytextblock@ID topleftFP) rectangle (\cmdKV@mytextblock@ID bottomrightLP);\else\fi%
\ifKV@mytextblock@framed\path[draw] (\cmdKV@mytextblock@ID topleftFP) rectangle (\cmdKV@mytextblock@ID bottomrightLP);
\node at (\cmdKV@mytextblock@ID titleplacingFP)[draw,above=0mm,fill=white,rectangle,anchor=west,rounded corners=2mm] (title)
{{\cmdKV@mytextblock@titlefont\cmdKV@mytextblock@title}};%
\else\fi
\end{tikzpicture}
}
\newcommand{\makeFramOrShadeatOnefirstpage}{%
\begin{tikzpicture}[remember picture,overlay,line width=\cmdKV@mytextblock@linethickness]
\ifKV@mytextblock@shaded%
\fill[opacity=0.08](\cmdKV@mytextblock@ID topleftFP)rectangle(\cmdKV@mytextblock@ID pagebottomrightFP);%
\else\fi%
\ifKV@mytextblock@framed%
\path[draw](\cmdKV@mytextblock@ID pagebottomleftFP)--(\cmdKV@mytextblock@ID topleftFP)--(\cmdKV@mytextblock@ID toprightFP)--(\cmdKV@mytextblock@ID pagebottomrightFP);%
\node at (\cmdKV@mytextblock@ID titleplacingFP)[draw,above=0mm,fill=white,rectangle,anchor=west,rounded corners=2mm] (titel)%
{{\cmdKV@mytextblock@titlefont\cmdKV@mytextblock@title}};%
\else%
\fi
\end{tikzpicture}
}
\newcommand{\makeFramOrShadeonLastpage}{%
\begin{tikzpicture}[remember picture,overlay,line width=\cmdKV@mytextblock@linethickness]
\ifKV@mytextblock@shaded\fill[opacity=0.1](\cmdKV@mytextblock@ID bottomleftLP) rectangle (\cmdKV@mytextblock@ID pagetoprightLP);\else\fi
\ifKV@mytextblock@framed\draw(\cmdKV@mytextblock@ID pagetoprightLP)--(\cmdKV@mytextblock@ID bottomrightLP)--(\cmdKV@mytextblock@ID bottomleftLP)--(\cmdKV@mytextblock@ID pagetopleftLP);\else\fi
\end{tikzpicture}
}
\newcommand{\makeFrameOrShadebetweenpages}{%
\AddEverypageHook{%
\ifKV@mytextblock@insidemytextblock
\ifthenelse{\equal{\pageref{\cmdKV@mytextblock@ID}}{\thepage}\OR\equal{\pageref{\cmdKV@mytextblock@ID-end}}{\thepage}}
{}%erste oder letzte Seite
{\begin{tikzpicture}[remember picture,overlay,line width=\cmdKV@mytextblock@linethickness]%
\pgfmathsetlengthmacro\x{1in+\hoffset+\oddsidemargin-.5\pgflinewidth-\mytextblockinnerframesep}%
\pgfmathsetlengthmacro\y{1in+\voffset+\headsep+\headheight+\topmargin}%
\path[draw] (current page.north west)+(\x,-\y)coordinate (\cmdKV@mytextblock@ID page\thepage topleft);%
\path[draw] (\cmdKV@mytextblock@ID page\thepage topleft)+(\textwidth+1\pgflinewidth+2\mytextblockinnerframesep,0)coordinate (\cmdKV@mytextblock@ID page\thepage topright);%
\path[draw] (\cmdKV@mytextblock@ID page\thepage topright)+(0,-\textheight)coordinate(\cmdKV@mytextblock@ID page\thepage bottomright);%
\path[draw] (\cmdKV@mytextblock@ID page\thepage topleft)+(0,-\textheight)coordinate(\cmdKV@mytextblock@ID page\thepage bottomleft);%
\ifKV@mytextblock@framed%
\path [draw](\cmdKV@mytextblock@ID page\thepage topleft)--(\cmdKV@mytextblock@ID page\thepage bottomleft);%
\path [draw](\cmdKV@mytextblock@ID page\thepage topright)--(\cmdKV@mytextblock@ID page\thepage bottomright);%
\else%
\fi%
\ifKV@mytextblock@shaded%
\fill[opacity=0.08](\cmdKV@mytextblock@ID page\thepage topleft)rectangle(\cmdKV@mytextblock@ID page\thepage bottomright);%
\else%
\fi%
\end{tikzpicture}%
}%
\else%
\fi%
}%
}%
\makeFrameOrShadebetweenpages%
%%%%%%%%%%%ENde
\endinput
\end{filecontents}
\usepackage{mytextkasten-rr}
\begin{document}
Der Kasten \ref{T-Beispiel} erstreckt sich von Seite \pageref{T-Beispiel} bis \pageref{T-Beispiel-end}, dort befinden sich in Zeile \ref{frag} drei xxx auf Seite \pageref{frag}
\begin{mytextblock}%Demonstration mit Standardeinstellung und den Textfeldern
[ID={T-Beispiel}
,title={Ein langer langer und überlanger Titel mit etwas mehr}
,beforehook={Hier kann man sich mit Latexcode einhäcken}
,einleitung={Das ist der Einleitungstext, mit dem man etwas über den kommenden Text sagen kann, er ist Standardmäßig schräggestellt. Die Formatierung kann mit {einleitungfont=\string\bfseries} geändert werden}
%,aftertexthook={Dieser Text steht im Anschluss}
,source={Hier wird die Quelle eingegeben, die auch mal ein bisschen länger sein kann und am besten über den cite Befehl funktioniert.}
,shaded=true
,multicol=true
,linenumbering=true
]
\blindtext[1]\linelabel{frag}xxx\blindtext[1]
\end{mytextblock}
%
\begin{mytextblock}%Demonstration mit Standardeinstellung und den Textfeldern
[ID={T-2}
,title={Ein langer langer und überlanger Titel mit etwas mehr}
,beforehook={Hier kann man sich mit Latexcode einhäcken}
,einleitung={Das ist der Einleitungstext, mit dem man etwas über den kommenden Text sagen kann, er ist Standardmäßig schräggestellt. Die Formatierung kann mit {einleitungfont=\{...\}} geändert werden}
%,aftertexthook={Dieser Text steht im Anschluss}
,source={Hier wird die Quelle eingegeben, die auch mal ein bisschen länger sein kann und am besten über den cite Befehl funktioniert.}
,framed=true
,shaded=false
,innerframesep={1pt}
,columnsep={18pt}
,linenumbersep={5pt}
,linethickness={3pt}
]
\blindtext[5]
\blindtext
\end{mytextblock}
Text \ref{T-2} beginnt auf Seite \pageref{T-2}
\begin{mytextblock}%Demonstration mit Standardeinstellung und den Textfeldern
[ID={T-3}
,title={Ein langer langer und überlanger Titel mit etwas mehr}
,beforehook={Hier kann man sich mit Latexcode einhäcken}
,einleitung={Das ist der Einleitungstext, mit dem man etwas über den kommenden Text sagen kann, er ist Standardmäßig schräggestellt. Die Formatierung kann mit {einleitungfont=\{...\}} geändert werden}
%,aftertexthook={Dieser Text steht im Anschluss}
,source={Hier wird die Quelle eingegeben, die auch mal ein bisschen länger sein kann und am besten über den cite Befehl funktioniert.}
,framed=true
,multicols=3
,shaded=false
,innerframesep={6pt}
]
\blindtext[6]
\blindtext
\end{mytextblock}
\tikz[remember picture,overlay]{\node at (T-2pagetoprightLP) [anchor=west,rectangle]{zum Einhecken};}
\end{document}
Lesezeichen