CTAN Comprehensive TeX Archive Network

Directory graphics/pgf/contrib/tikz-sections

README.md

TikZ-Sections

A TikZ- package for drawing structural cross-sections.

Package information

Aim

Preparing high-quality structural engineering figures for papers and reports is time-consuming. TikZ-Sections aims to make this easier for engineers and academics working with steel and reinforced-concrete sections.

Tools

This package is built on top of TikZ, so normal TikZ features can be used around and alongside TikZ-Sections drawings. A distribution with TikZ/PGF is required.

Installation

Clone this repository or download a release archive.

git clone https://github.com/someparsa/TikZ-Sections.git

Put the .sty file in the directory where you save your file. Then import the package like any other standard packages in system.

\usepackage{tikz-sections}

Quick example

\documentclass[margin=2mm]{standalone}
\usepackage{tikz-sections}

\begin{document}
\begin{tikzpicture}
  \TikZSectionsChannel[
    depth=245,
    flange=75,
    lip=20,
    thickness=2.5,
    radius=5
  ]
\end{tikzpicture}
\end{document}

The command above draws a lipped cold-formed channel using:

\TikZSectionsChannel[depth=..., flange=..., lip=..., thickness=..., radius=...]

Use flange and lip for equal top/bottom values, or override them with top flange, bottom flange, top lip, and bottom lip when the section is asymmetric. Asymmetric channel and zee dimensions are part of the detailed input mode, so use detailed=true with those independent keys.

Set lip=0 or set both top lip=0 and bottom lip=0 to draw the unlipped form through the same channel/zee geometry path.

Current status

The package is being refactored gradually toward a documented CTAN-ready release. Version 0.2.0 is the staged baseline for the first CTAN submission candidate and includes:

  • Package metadata and package-safe TikZ dependency loading.
  • Configurable TikZ styles for straight segments, curved segments, labels, dimensions, hidden lines, and fills.
  • Legacy drawing commands such as \csChannel, \csBox, \csZee, \csL, \csTube, \csUBC, and related HRS commands.
  • New explicit cold-formed steel commands with \csCFS... names.
  • New explicit hot-rolled steel commands with \csHRS... names.
  • Initial reinforced-concrete cross-section commands with \TikZRC... names.
  • Key-value public commands with \TikZSections... names.
  • Built-up section sketches are intentionally left to normal TikZ composition instead of package-specific commands.

Recent improvements

Recent development work has focused on making the package CTAN-facing as tikz-sections and making the TikZ integration more predictable:

  • Renamed the public package surface to tikz-sections.
  • Removed unreleased predecessor package markers and compatibility shims.
  • Removed package-owned built-up section commands; built-up assemblies are now composed with ordinary TikZ scopes and transforms.
  • Added TikZ-like placement keys at={(x,y)} and shift={(x,y)}.
  • Added local xscale and yscale keys alongside scale and rotate.
  • Standardized CFS channel and zee inputs so flange and lip are common defaults, with top flange, bottom flange, top lip, and bottom lip available as independent overrides.
  • Defined simplified CFS input as the nominal symmetric mode and detailed CFS input as the mode that honors independent top/bottom flange and lip values.
  • Consolidated lipped and unlipped public channel/zee variants into \TikZSectionsChannel and \TikZSectionsZee.
  • Changed channel and zee dimensions=true from generic dimension guide lines to a compact dimension legend for web depth, flange, lip, thickness, and radius.
  • Documented and tested lip=0 as the unlipped channel/zee form.
  • Added general lower-level CFS handlers for asymmetric channel and zee geometry.
  • Normalized public circular section wrappers so their local drawing extent starts from a south-west origin.
  • Added a smoke test covering ordinary TikZ composition with scopes, shifts, rotation, mirroring, nodes, fills, and drawing commands.
  • Updated the manual and examples to use the tikz-sections package name and \TikZSections... public command prefix.

Key-value API

The recommended public API is the newer key-value interface. These commands use readable option names and provide defaults for omitted values:

\TikZSectionsChannel[
  depth=245,
  flange=75,
  thickness=2.5,
  radius=5,
  centerline=true,
  dimensions=true,
  label=C245,
  at={(0,0)},
  scale=0.2,
  xscale=1,
  yscale=1,
  rotate=0,
  x=0,
  y=0
]

Common keys include:

  • depth
  • width
  • diameter
  • flange
  • top flange
  • bottom flange
  • left flange
  • right flange
  • lip
  • top lip
  • bottom lip
  • thickness
  • radius
  • inside radius
  • bend radius
  • root radius
  • position
  • stiffener position
  • leg
  • vertical leg
  • horizontal leg
  • web depth
  • web thickness
  • flange thickness
  • top flange width
  • top flange thickness
  • bottom flange width
  • bottom flange thickness
  • reference line width
  • line width
  • cover
  • bar diameter
  • top bars
  • bottom bars
  • left bars
  • right bars
  • top layers
  • bottom layers
  • side layers
  • layer spacing
  • perimeter bars
  • label
  • label x
  • label y
  • mode
  • simplified
  • detailed
  • filled
  • centerline
  • dimensions
  • monochrome
  • tie
  • at
  • shift
  • scale
  • xscale
  • yscale
  • rotate
  • x
  • y

Current dimension overlay

The dimensions=true key currently enables basic visual dimension assistance. For \TikZSectionsChannel and \TikZSectionsZee, it draws a compact boxed legend near the section using labels such as b_w=180 mm, b_f=55 mm, b_l=18 mm, t=2 mm, and r=4 mm. Other section families still use the older generic horizontal and vertical dimension guide overlay until they receive section-specific dimension displays.

This is not yet a full engineering dimensioning system. It does not currently draw traditional engineering dimension lines, extension lines, standard offsets, unit formatting controls, or standard-specific notation. The current direction is to use robust parameter legends first, then keep traditional dimension lines as a later subsystem.

When label=... is supplied without label x and label y, the label is placed above the top-left of the section and includes the local drawing scale in brackets, for example C245 (scale 0.03).

Simplified and detailed input modes

The default public mode is simplified. For CFS channel and zee commands, simplified mode uses the nominal symmetric inputs:

\TikZSectionsChannel[depth=180, flange=55, lip=18]

In simplified mode, flange is applied to both top and bottom flanges, and lip is applied to both lips. Independent top/bottom values are intentionally ignored in this mode.

Use detailed=true or mode=detailed when the section geometry is asymmetric:

\TikZSectionsChannel[
  detailed=true,
  depth=180,
  top flange=55,
  bottom flange=60,
  top lip=18,
  bottom lip=20
]

Current key-value commands:

  • \TikZSectionsChannel
  • \TikZSectionsStiffenedChannel
  • \TikZSectionsZee
  • \TikZSectionsSigma
  • \TikZSectionsHat
  • \TikZSectionsAngle
  • \TikZSectionsLippedAngle
  • \TikZSectionsRHS
  • \TikZSectionsSHS
  • \TikZSectionsCHS
  • \TikZSectionsUniversalBeam
  • \TikZSectionsUniversalColumn
  • \TikZSectionsWeldedI
  • \TikZSectionsTee
  • \TikZSectionsHRSChannel
  • \TikZSectionsEqualAngle
  • \TikZSectionsUnequalAngle
  • \TikZSectionsPlate
  • \TikZSectionsFlatBar
  • \TikZSectionsRoundBar
  • \TikZSectionsHRSCHS
  • \TikZSectionsHRSRHS
  • \TikZSectionsHRSSHS
  • \TikZRCRectangular
  • \TikZRCCircular

Positional helper commands remain available for lower-level drawing control.

TikZ integration

Public section commands draw into the current tikzpicture; they do not create a tikzpicture internally. They can be placed inside normal TikZ scopes and combined with ordinary TikZ commands such as \draw, \fill, \node, and \foreach.

Use at={(x,y)} or shift={(x,y)} for placement. The older x=... and y=... keys remain as equivalent scalar placement keys. The scale, xscale, yscale, and rotate keys apply a local transform to the section and also respect any surrounding TikZ transform.

Cold-formed steel commands

The current CFS API covers single-section primitives. Channel and zee families can be drawn with equal flange/lip values or with independent top and bottom values from the same public command. Equal values are the simplified default; independent top and bottom values require detailed=true. Use lip=0, or both top lip=0 and bottom lip=0, for unlipped variants through the same geometry path. Built-up CFS assemblies are composed with ordinary TikZ scopes rather than package-specific built-up commands.

Public CFS key-value commands currently available:

  • \TikZSectionsChannel
  • \TikZSectionsStiffenedChannel
  • \TikZSectionsZee
  • \TikZSectionsSigma
  • \TikZSectionsHat
  • \TikZSectionsAngle
  • \TikZSectionsLippedAngle
  • \TikZSectionsRHS
  • \TikZSectionsSHS
  • \TikZSectionsCHS

Useful CFS input patterns:

% Equal flanges and lips
\TikZSectionsChannel[depth=180, flange=55, lip=18]

% Independent top/bottom flanges and lips
\TikZSectionsChannel[
  detailed=true,
  depth=180,
  top flange=55,
  top lip=18,
  bottom flange=60,
  bottom lip=20
]

% Unlipped form through the same channel command
\TikZSectionsChannel[depth=180, flange=55, lip=0]

Single open sections:

  • \csCFSChannel{depth}{flange}{thickness}{radius}
  • \csCFSLippedChannel{depth}{flange}{lip}{thickness}{radius}
  • \csCFSChannelGeneral{depth}{top flange}{top lip}{bottom flange}{bottom lip}{thickness}{radius}
  • \csCFSEdgeStiffenedChannel{depth}{flange}{lip}{thickness}{radius}
  • \csCFSZee{depth}{flange}{thickness}{radius}
  • \csCFSLippedZee{depth}{flange}{lip}{thickness}{radius}
  • \csCFSZeeGeneral{depth}{top flange}{top lip}{bottom flange}{bottom lip}{thickness}{radius}
  • \csCFSSigma{depth}{top flange}{top lip}{bottom flange}{bottom lip}{thickness}{radius}
  • \csCFSHat{depth}{left flange}{web width}{right flange}{thickness}{radius}
  • \csCFSAngle{leg 1}{leg 2}{thickness}{radius}
  • \csCFSLippedAngle{leg 1}{leg 2}{thickness}{radius}{lip}

Stiffened channels:

  • \csCFSChannelWithOneStiffener{depth}{top flange}{top lip}{bottom flange}{bottom lip}{thickness}{radius}{stiffener position}
  • \csCFSChannelWithTwoStiffeners{depth}{top flange}{top lip}{bottom flange}{bottom lip}{thickness}{radius}
  • \csCFSChannelWithThreeStiffeners{depth}{top flange}{top lip}{bottom flange}{bottom lip}{thickness}{radius}{middle stiffener position}

Hollow and closed sections:

  • \csCFSBox{depth}{width}{thickness}{radius}
  • \csCFSRHS{depth}{width}{thickness}{radius}
  • \csCFSSHS{width}{thickness}{radius}
  • \csCFSCHS{radius}{thickness}

Generic folded sections:

  • \csCFSFoldedPlate{(x1,y1),(x2,y2),...}{thickness}

Hot-rolled steel commands

I, tee, and channel sections:

  • \csHRSUniversalBeam{depth}{width}{flange thickness}{web thickness}{root radius}
  • \csHRSUniversalColumn{depth}{width}{flange thickness}{web thickness}{root radius}
  • \csHRSISection{depth}{width}{flange thickness}{web thickness}{root radius}
  • \csHRSWeldedI{web depth}{web thickness}{bottom flange width}{bottom flange thickness}{top flange width}{top flange thickness}
  • \csHRSTee{depth}{width}{flange thickness}{web thickness}{root radius}
  • \csHRSChannel{depth}{width}{flange thickness}{web thickness}{root radius}

Angles:

  • \csHRSEqualAngle{leg}{thickness}{root radius}
  • \csHRSUnequalAngle{vertical leg}{horizontal leg}{thickness}{root radius}

Bars, plates, and hollow sections:

  • \csHRSPlate{width}{thickness}{reference line width}
  • \csHRSFlatBar{width}{thickness}{reference line width}
  • \csHRSRoundBar{radius}{line width}
  • \csHRSCHS{radius}{thickness}
  • \csHRSRHS{depth}{width}{thickness}{radius}
  • \csHRSSHS{width}{thickness}{radius}

Composing sections with TikZ

The package focuses on reliable single-section primitives. Built-up assemblies should be composed with ordinary TikZ scopes and transforms:

\begin{tikzpicture}
  \TikZSectionsChannel[
    depth=180,
    flange=55,
    lip=18,
    thickness=2,
    radius=4,
    scale=0.025
  ]
  \begin{scope}[shift={(4,0)}, xscale=-1]
    \TikZSectionsChannel[
      depth=180,
      flange=55,
      lip=18,
      thickness=2,
      radius=4,
      scale=0.025
    ]
  \end{scope}
\end{tikzpicture}

Reinforced concrete commands

The initial reinforced-concrete API focuses on simple cross-section sketches. Longitudinal bars are drawn as blue filled circles, stirrups/ties are drawn in red, and the concrete outline uses a heavier line weight. cover is interpreted as the distance from the concrete face to the longitudinal bar centerline; the stirrup/tie is placed around the outside edge of the longitudinal bar envelope so it confines the bars.

\TikZRCRectangular[
  width=300,
  depth=500,
  cover=40,
  bar diameter=18,
  top bars=2,
  bottom bars=3,
  bottom layers=2,
  layer spacing=28
]
\TikZRCCircular[
  diameter=450,
  cover=45,
  bar diameter=20,
  perimeter bars=10
]

Rectangular RC keys include:

  • width
  • depth
  • cover
  • bar diameter
  • top bars
  • bottom bars
  • left bars
  • right bars
  • top layers
  • bottom layers
  • side layers
  • layer spacing
  • tie

Circular RC keys include:

  • diameter
  • cover
  • bar diameter
  • perimeter bars
  • tie

Style customization

The default drawing uses red straight segments and blue curved segments, but these can now be overridden with TikZ styles:

\TikZSectionsSetup{
  tikzSections/straight/.style={tikzSections/default, black},
  tikzSections/round/.style={tikzSections/default, gray}
}

Available style hooks include:

  • tikzSections/straight
  • tikzSections/round
  • tikzSections/centerline
  • tikzSections/hidden
  • tikzSections/dimension
  • tikzSections/label
  • tikzSections/fill
  • tikzSections/concrete
  • tikzSections/concrete edge
  • tikzSections/rebar
  • tikzSections/tie

The default RC styles are deliberately distinct from the steel styles: concrete uses a light fill plus a heavier black edge, longitudinal bars are blue, and stirrups/ties are red. They can be overridden with the same \TikZSectionsSetup mechanism.

Testing

Version 0.2.0 has been checked with Mac using:

/Library/TeX/texbin/pdflatex -interaction=nonstopmode -halt-on-error tikz-sections.tex

The repository now includes permanent source files for documentation, examples, and smoke tests:

docs/tikz-sections-doc.tex
examples/cfs-gallery.tex
examples/hrs-gallery.tex
examples/rc-gallery.tex
examples/style-customization.tex
tests/smoke-cfs.tex
tests/smoke-hrs.tex
tests/smoke-keyval.tex
tests/smoke-rc.tex
tests/smoke-tikz-integration.tex

To compile any of these files while keeping generated outputs outside the repo:

mkdir -p /private/tmp/tikz-sections-build
TEXINPUTS="$(pwd)//:" /Library/TeX/texbin/pdflatex \
  -interaction=nonstopmode \
  -halt-on-error \
  -output-directory=/private/tmp/tikz-sections-build \
  docs/tikz-sections-doc.tex

During development, the documentation, examples, and smoke tests were compiled successfully with Mac.

License

TikZ-Sections is distributed under the Project Public License, version 1.3c or later. See LICENSE for the full license text.

Version history and milestones

Active work is tracked in ROADMAP.md. Detailed release-level changes are tracked in CHANGELOG.md.

v0.2.0

  • Staged the current public API and documentation as the baseline for the first CTAN submission candidate.
  • Standardized the public package surface around tikz-sections, \TikZSections..., and tikzSections/... names.
  • Improved CFS channel/zee simplified and detailed input behavior, dimension legends, labels, and built-up composition examples.
  • Updated RC cross-section styling and stirrup/tie placement.
  • Continued internal helper refactoring for repeated drawing geometry.

v0.1.2

  • Added CTAN-facing package metadata to the README.
  • Removed tracked macOS metadata and ignored future .DS_Store files.
  • Set the manual author to the current maintainer.
  • Rebuilt and verified a clean CTAN upload archive.

v0.1.1

  • Changed the package license to the Project Public License, version 1.3c or later.
  • Added the LPPL package notice to tikz-sections.sty.

v0.1.0

  • Added package metadata and package-safe TikZ dependency loading.
  • Added configurable TikZ styles for steel segments, dimensions, labels, fills, concrete, rebar, and ties.
  • Added CFS, HRS, and RC command groups.
  • Added the public key-value API with \TikZSections... and \TikZRC... commands.
  • Added manual source, examples, smoke tests, and build targets.

Current remaining work is tracked in ROADMAP.md.

Download the contents of this package in one zip archive (248.1k).

tikz-sections – Draw structural cross-sections

Preparing high-quality structural engineering figures for papers and reports is time-consuming. TikZ-Sections aims to make this easier for engineers and academics working with steel and reinforced-concrete sections.

Packagetikz-sections
Home pagehttps://github.com/someparsa/TikZ-Sections
Bug trackerhttps://github.com/someparsa/TikZ-Sections/issues
Version0.2.0 2026-05-25
LicensesThe Project Public License 1.3c
Copyright2026 Parsa Yazdi
MaintainerParsa Yazdi
Contained inTeX Live as tikz-sections
TopicsPGF TikZ
Engineering
See alsostructmech
...
Guest Book Sitemap Contact Contact Author