summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/asmeconf/examples/asmeconf-wide-equation-example/asmewide.sty
blob: 3ebe9abe1472883a8a52600a98895268fd59791c (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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
%%
%%  This file is `asmewide.sty'.
%%
%%  Copyright (c) 2022 John H. Lienhard.  Use under the MIT license: https://ctan.org/license/mit 
%%
%%  Defines a widetext environment within ASME dimensions
%%  Use for material spanning both columns (i.e., for wide equations)
%%
%%  The original widetext environment was developed in revtex; elements of the present code have been modified revtex4-2.dtx, under LPPL1.3c. 
%%  The unmodified code is available at: https://ctan.org/pkg/revtex
%%	This code also adopts concepts from the widetext.sty package by Anjishnu Sarkar, https://blog.pnas.org/widetext.sty.
%%  The modifications made were: follow ASME dimensions; remove revtex-specific macros; update/rework commands; adapt to most recent cuted.sty
%%	(Leaders don't vanish at pagebreaks, as in revtex, evidently related to how cuted.sty handles strip construction. Have coded around this.)
%% 
%%  Required packages: cuted.sty v2.0 and flushend.sty v4.0 [2021/10/04] or later; asmeconf.cls or asmejour.cls w/their required packages, esp. etoolbox, xparse
%%
%%	The widetext environment can only appear once per page. It clashes with floats and footnotes, and often requires some hand-fitting of page layouts.
%%
%%  USAGE: 	* \begin{widetext} ...wide material here... \end{widetext}
%%	OPTIONAL ARGUMENTS: 
%%			* \begin{widetext[N] .. changes upper/lower separation of wide material from default Xpt to Npt (X = 5pt asmeconf.cls; X = 10pt asmejour.cls)
%%			* \begin{widetext}[][tbn]: t = top line only; b = bottom line only; n = no lines.  BOTH arguments are REQUIRED, even if first is left empty.
%%
%%  asmewide,sty supports one option, [raggedend], which suppresses final page column balancing: \usepackage[raggedend]{asmewide}
%%
%%  NB: the strip environment from cuted is incompatible with the [lineno] option to asmeconf and asmejour!
%%
\NeedsTeXFormat{LaTeX2e}

\def\AW@versionno{1.1}
\def\AW@versiondate{2022/05/08\space}
\ProvidesPackage{asmewide}[\AW@versiondate\space v\AW@versionno\space ASME wide equation environment (JHL)]

\DeclareOption{raggedend}{% Added 2022/05/08, to suppressed flushend on last page, if desired
	\AfterEndPreamble{\raggedend}
}
\DeclareOption*{}
\ProcessOptions \relax

\ifdefined\NewDocumentCommand\else
  \RequirePackage{xparse}
\fi
\RequirePackage{etoolbox}
\RequirePackage{cuted}[2021/10/04]%features used here were first added in the [2021/10/04] version of cuted.sty!
\@ifpackagelater{cuted}{2021/10/04}{%
    \relax
}{%
    \PackageError{asmewide}{Your version of cuted.sty is too old. You can get an update at https://ctan.org/pkg/cuted}{You need an up-to-date version of cuted.sty to run asmewide.sty.}%
}

\RequirePackage{flushend}[2021/10/04]
%
% https://tex.stackexchange.com/a/43541/119566
\def\@getcl@ss#1.cls#2\relax{\def\@currentclass{#1}}
\def\@getclass{\expandafter\@getcl@ss\@filelist\relax}
\@getclass
\typeout{Running asmewide.sty with the \@currentclass\space class.}
%
\newbox\@TopLeader
\newbox\@BottomLeader
\newlength\savparskip \setlength\savparskip{\parskip}
\newlength\@RuleWidth \AtBeginDocument{\setlength\@RuleWidth{\dimexpr(\columnwidth+0.5\columnsep-1pt)}}
\newlength\@TopSpace \setlength\@TopSpace{0ex}
\newlength\@TopCorr \setlength\@TopCorr{-5pt}
\def\@asmeindent{3.5mm}
\def\@TopRuleWeight{0.5pt}
\def\@BottomRuleWeight{0.5pt}
\def\@DSS{5}% default stripsep
%
\@ifclassloaded{asmeconf}{%
    \setlength\@TopCorr{-1ex}% keep \abovedisplayskip since text could start the page
    \setlength\@TopSpace{1ex}% provide space apparently lost with cuted.sty in asmeconf.cls
    \def\@asmeindent{0.25in}% asmeconf
}{\relax}

\@ifclassloaded{asmejour}{%
	\AtBeginDocument{\setlength\@RuleWidth{\columnwidth}}
    \setlength\@TopCorr{-9pt}% asmejour 
    \def\@BottomRuleWeight{1pt}% asmejour
    \def\@DSS{10}% default stripsep, asmejour
}{\relax}
%
% Set ascenders and descenders 1.2 times greater than \baselineskip
\NewDocumentCommand\@SetTopLeader{}{% NB: boxes are cleared after they are used; this command is issued once with each widetext environment
    \setbox\@TopLeader\vbox{%
    	\hbox to \@RuleWidth{%
	    	\leaders\hrule height\@TopRuleWeight \hfil  
	    	\vrule height 1.2\baselineskip width\@TopRuleWeight}
    }
}
\NewDocumentCommand\@TopLine{}{%
	\vskip\@TopSpace
	\dimen@\ht\@TopLeader\advance\dimen@\dp\@TopLeader
	\cleaders\box\@TopLeader\vskip\dimen@
}
\NewDocumentCommand\@SetBottomLeader{}{%
    \setbox\@BottomLeader\hbox to \@RuleWidth{%
    	\vrule depth 1.2\baselineskip width\@BottomRuleWeight
    	\leaders\hrule height\@BottomRuleWeight \hfil
    }
}
\NewDocumentCommand\@BottomLine{}{%
	\par 
	\vskip 3pt% provide some space between low equation numbers and rule
    \setbox\@BottomLeader\vbox{%
	    \hbox to \textwidth{\hfil\box\@BottomLeader}%
    }%
	\dimen@\ht\@BottomLeader\advance\dimen@\dp\@BottomLeader
	\cleaders\box\@BottomLeader\vskip\dimen@ 
	\vskip -1.5pt% reduce trailing separation w.r.t. baseline when \stripsep = 0
}
\preCutedStrip={\@TopLine}
\postCutedStrip={\@BottomLine}
\DeclareDocumentEnvironment{widetext}{O{\@DSS}o}{% 
	\@SetTopLeader
	\@SetBottomLeader
	\notblank{#1}{%
		\setlength{\stripsep}{#1pt plus 5pt minus 5pt}
	}{
		\setlength{\stripsep}{\@DSS pt plus 5pt minus 5pt}
	}
	\ifstrequal{#2}{t}{\setbox\@BottomLeader\vbox{}}{%
		\ifstrequal{#2}{b}{\setbox\@TopLeader\vbox{\vskip \@TopCorr}}{%cuted inserts some additional space, we remove here
			\ifstrequal{#2}{n}{\setbox\@TopLeader\vbox{\vskip \@TopCorr}\setbox\@BottomLeader\vbox{}}{\relax}
		}
	}
	\begin{strip}
	\setlength\parindent{\@asmeindent}% strip makes parindent zero; enlarge for ASME
	\setlength\parskip{\savparskip}% strip makes \parskip zero w/o glue; set to match main text
	}{%	
	\end{strip}\ignorespaces
}
%%
\endinput
%%
%% End of file `asmewide.sty'.