blob: b0c9a481f26bbcfd3d61ece3ad97495c6c7d4e73 (
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
|
%%
%% 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 w/its required packages, esp. etoolbox, xparse
%%
%% The widetext environment can only appear once per page. It clashes with floats and footnotes, requiring 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.
%%
%% NB: the strip environment from cuted is incompatible with the [lineno] option to asmeconf and asmejour!
%%
\NeedsTeXFormat{LaTeX2e}
\def\AW@versionno{1.0}
\def\AW@versiondate{2021/12/26\space}
\ProvidesPackage{asmewide}[\AW@versiondate\space v\AW@versionno\space ASME wide equation environment (JHL)]
\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'.
|