summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/sectionbreak/sectionbreak.sty
blob: 28b653b78824ce61f4ca1850d767f9406a2029ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
% This is file sectionbreak.sty
%% (c) 2017--2018 Michal Hoftich
\ProvidesPackage{sectionbreak}[2019-03-11 v0.1d (Michal Hoftich)]
\RequirePackage{kvoptions}
\DeclareStringOption[\relax]{preskip}
\DeclareStringOption[\relax]{postskip}
\DeclareStringOption[\relax]{skip}
\DeclareStringOption[\relax]{style}
\DeclareStringOption[~]{mark}
\DeclareBoolOption{asterism}
\DeclareBoolOption{disable}

\ProcessKeyvalOptions*

% the skip option can be used to set both preskip and postskip

\if\sectionbreak@skip\relax\else%
  % set skips only if the options haven't been used
  \if\sectionbreak@preskip\relax% 
    \def\sectionbreak@preskip{\sectionbreak@skip}%
  \fi%
  \if\sectionbreak@postskip\relax%
    \def\sectionbreak@postskip{\sectionbreak@skip}%
  \fi%
\fi

% add default value for preskip
\if\sectionbreak@preskip\relax%
  \def\sectionbreak@preskip{2em}%
\fi

% add default value for postskip
\if\sectionbreak@postskip\relax%
  \def\sectionbreak@postskip{2em}%
\fi

\newdimen\asterism@width
% asterism is character which consists of three asterisks layed out as a triangel
\newcommand\asterism{%
  \settowidth{\asterism@width}{*}%
  % these values were found by trial and error
  \raise-0.6\asterism@width\hbox{*\kern-.6\asterism@width\raise.7\asterism@width\hbox{*}\kern-.6\asterism@width*}%
}

\newcommand\pre@sectionbreak{\par\vskip\sectionbreak@preskip\relax}
\newcommand\post@sectionbreak{\par\vskip\sectionbreak@postskip\relax}
% print centered section break mark
\newcommand\print@sectionbreak[1]{%
  \bgroup%
  \noindent\null\hfill\sectionbreak@style\hbox{#1}\hfill\null\par%
  \egroup%
}
% default section break mark is an unbreakable space

\newcommand\sectionbreak[1][\sectionbreak@mark]{%
  \pre@sectionbreak%
  \print@sectionbreak{#1}%
  \post@sectionbreak%
}

\newcommand\sectionbreakmark[1]{%
  \gdef\sectionbreak@mark{#1}%
}

% test the asterism option and set the section mark accordingly
\ifsectionbreak@asterism
  \sectionbreakmark{\asterism}
\fi

% disable the section break in the document with the `disable` option
\ifsectionbreak@disable%
  \renewcommand\sectionbreak[1][]{}%
\fi

\endinput