Showybox is a Typst package for creating colorful and customizable boxes.
Please note that this repository contains the latest (development) version of this package and may not yet be published at Typst's official package repository. If you want to use this package, see https://github.com/typst/packages/tree/main/packages/preview for the latest stable version
To use this library through the Typst package manager (for Typst 0.6.0 or greater), write #import "@preview/showybox:2.0.1": showybox
at the beginning of your Typst file.
Once imported, you can create an empty showybox by using the function showybox()
and giving a default body content inside the parenthesis or outside them using squared brackets []
.
By default a showybox
with these properties will be created:
- No title
- No shadow
- Not breakable
- Black borders
- White background
5pt
of border radius1pt
of border thickness
#import "@preview/showybox:2.0.1": showybox
#showybox(
[Hello world!]
)
Looks quite simple, but the "magic" starts when adding a title, color and shadows. The following code creates two "unique" boxes with defined colors and custom borders:
// First showybox
#showybox(
frame: (
border-color: red.darken(50%),
title-color: red.lighten(60%),
body-color: red.lighten(80%)
),
title-style: (
color: black,
weight: "regular",
align: center
),
shadow: (
offset: 3pt,
),
title: "Red-ish showybox with separated sections!",
lorem(20),
lorem(12)
)
// Second showybox
#showybox(
frame: (
dash: "dashed",
border-color: red.darken(40%)
),
body-style: (
align: center
),
sep: (
dash: "dashed"
),
shadow: (
offset: (x: 2pt, y: 3pt),
color: yellow.lighten(70%)
),
[This is an important message!],
[Be careful outside. There are dangerous bananas!]
)
The showybox()
function can receive the following parameters:
title
: A string used as the title of the showyboxfooter
: A string used as the footer of the showyboxframe
: A dictionary containing the frame's propertiestitle-style
: A dictionary containing the title's stylesbody-style
: A dictionary containing the body's stylesfooter-style
: A dictionary containing the footer's stylessep
: A dictionary containing the separator's propertiesshadow
: A dictionary containing the shadow's propertieswidth
: A relative length indicating the showybox's widthalign
: An unidimensional alignement for the showybox in the pagebreakable
: A boolean indicating whether a showybox can break if it reached an end of pagespacing
: Space above and below the showyboxabove
: Space above the showyboxbelow
: Space below the showyboxbody
: The content of the showybox
title-color
: Color used as background color where the title goes (default isblack
)body-color
: Color used as background color where the body goes (default iswhite
)footer-color
: Color used as background color where the footer goes (default isluma(85)
)border-color
: Color used for the showybox's border (default isblack
)inset
: Inset used for title, body and footer elements (default is(x: 1em, y: 0.65em)
) if none of the followings are given:title-inset
: Inset used for the titlebody-inset
: Inset used for the bodyfooter-inset
: Inset used for the body
radius
: Showybox's radius (default is5pt
)thickness
: Border thickness of the showybox (default is1pt
)dash
: Showybox's border style (default issolid
)
color
: Text color (default iswhite
)weight
: Text weight (default isbold
)align
: Text align (default isleft
)sep-thickness
: Thickness of the separator between title and body (default is1pt
)boxed-style
: If it's a dictionary of properties, indicates that the title must appear like a "floating box" above the showybox. If it'snone
, the title appears normally (default isnone
)
anchor
: Anchor of the boxed titley
: Vertical anchor (top
,horizon
orbottom
-- default ishorizon
)x
: Horizontal anchor (left
,start
,center
,right
,end
-- default isleft
)
offset
: How much to offset the boxed title in x and y direction as a dictionary with keysx
andy
(default is0pt
)radius
: Boxed title radius as a dictionary or relative length (default is5pt
)
color
: Text color (default isblack
)align
: Text align (default isleft
)
color
: Text color (default isluma(85)
)weight
: Text weight (default isregular
)align
: Text align (default isleft
)sep-thickness
: Thickness of the separator between body and footer (default is1pt
)
thickness
: Separator's thickness (default is1pt
)dash
: Separator's style (as aline
dash style, default is"solid"
)gutter
: Separator's space above and below (defalut is0.65em
)
color
: Shadow color (default isblack
)offset
: How much to offset the shadow in x and y direction either as a length or a dictionary with keysx
andy
(default is4pt
)
- Initial release
- Changed package name from colorbox to showybox
- Fixed a spacing bug in encapsulated showyboxes
- Details: When a showybox was encapsulated inside another, the spacing after that showybox was
0pt
, probably due to some "fixes" improved to manage default spacing betweenrect
elements. The issue was solved by avoiding#set
statements and adding a#v(-1.1em)
to correct extra spacing between the titlerect
and the bodyrect
.
- Details: When a showybox was encapsulated inside another, the spacing after that showybox was
- Improved code documentation
- Enabled an auto-break functionality for non-titled showyboxes
- Created a separator functionality to separate content inside a showybox with a horizontal line
All changes listed here were performed by Jonas Neugebauer (https://github.com/jneug)
- Added the
shadow
option - Enabled auto-break (
breakable
) functionality for titled showyboxes - Removed a thin line that appears in showyboxes with no borders or dashed borders
- Fixed shadow displacement
- Details: Instead of displacing the showybox's body from the shadow, now the shadow is displaced from the body.
Changes below were performed by Jonas Neugebauer (https://github.com/jneug)
- Added
title-inset
,body-inset
,footer-inset
andinset
options- Details:
title-inset
,body-inset
andfooter-inset
will set the inset of the title, body and footer area respectively.inset
is a fallback for those areas.
- Details:
- Added a
sep.gutter
option to set the spacing around separator lines - Added option
width
to set the width of a showybox - Added option
align
to move a showybox withwidth
< 100% along the x-axis- Details: A showybox is now wrapped in another block to allow alignment. This also makes it possible to pass the spacing options
spacing
,above
andbelow
to#showybox()
.
- Details: A showybox is now wrapped in another block to allow alignment. This also makes it possible to pass the spacing options
- Added
footer
andfooter-style
options- Details: The optional footer is added at the bottom of the box.
- Added
boxed
option in title styles - Added
boxed-align
in title styles - Added
sep-thickness
for title and footer - Refactored repository's files layout
Special thanks to Andrew Voynov (https://github.com/Andrew15-5) for the feedback while creating the new behaviours for boxed-titles
- Update
type()
conditionals to Typst 0.8.0 standards - Add
boxed-style
property, withanchor
,offset
andradius
properties. - Refactor
showy-inset()
for being general-purpose. Now it's calledshowy-value-in-direction()
and has a default value for handling properties defaults - Now sharp corners can be set by giving a dictionary to frame
radius
(e.g.radius: (top: 5pt, bottom: 0pt)
). Before this only was possible for untitled showyboxes. - Refactor shadow functions to be in a separated file.
- Fix bug of bad behaviour while writing too long titles.
- Fix bug while rendering separators with custom thickness. Now the thickness is gotten properly.
- Fix bad shadow drawing in showyboxes with a boxed-title that has a "extreme"
offset
value. - Fix bad sizing while creating showyboxes with a
width
of less than100%
, and a shadow.
- Fix bad behaviours of boxed-titles
anchor
inside afigure
- Fix wrong
breakable
behaviour of showyboxes inside afigure
- Fix Manual and README's Stokes theorem example