% Title: lua-tikz3dtools.sty % Author: Jasper Nice % Date: April 12, 2026 \NeedsTeXFormat{LaTeX2e}[1994/06/01] \ProvidesExplPackage{lua-tikz3dtools}{2026/04/12}{v3.0.0}{ LuaLaTeX package for 3D illustrations in TikZ. } \RequirePackage{tikz} \RequirePackage{xcolor} \NewDocumentCommand{\luatikztdtoolsset}{o}{\tikzset{/lua-tikz3dtools/.cd, #1}} \tikzset{ /lua-tikz3dtools/.is~family % abbreviated "td" ,/lua-tikz3dtools/.cd ,/lua-tikz3dtools/parametric/.cd % appreviated "p" ,/lua-tikz3dtools/parametric/object/.cd % abbreviated "m" ,object/.code = {\protected@edef\luatikztdtools@p@m@object{#1}} ,name/.code = {\protected@edef\luatikztdtools@p@m@name{#1}} ,/lua-tikz3dtools/parametric/light/.cd % abbreviated "la" ,v/.code = {\protected@edef\luatikztdtools@p@la@v{#1}} ,/lua-tikz3dtools/parametric/point/.cd % abbreviated "p" ,v/.code = {\protected@edef\luatikztdtools@p@p@v{#1}} ,fill~options/.estore~in = \luatikztdtools@p@p@filloptions ,fill~options/.initial = {} ,transformation/.code = {\protected@edef\luatikztdtools@p@p@transformation{#1}} ,transformation/.initial = Matrix:identity3() ,filter/.code = {\protected@edef\luatikztdtools@p@p@filter{#1}} ,filter/.initial = return~true ,/lua-tikz3dtools/parametric/label/.cd % abbreviated "l" ,v/.code = {\protected@edef\luatikztdtools@p@l@v{#1}} ,text/.code = {\def\luatikztdtools@p@l@text{#1}} ,transformation/.code = {\protected@edef\luatikztdtools@p@l@transformation{#1}} ,transformation/.initial = Matrix:identity3() ,filter/.code = {\protected@edef\luatikztdtools@p@l@filter{#1}} ,filter/.initial = return~true ,/lua-tikz3dtools/parametric/curve/.cd % abbreviated "c" ,ustart/.estore~in = \luatikztdtools@p@c@ustart ,ustart/.initial = 0 ,ustop/.estore~in = \luatikztdtools@p@c@ustop ,ustop/.initial = 1 ,usamples/.estore~in = \luatikztdtools@p@c@usamples ,usamples/.initial = 10 ,v/.code = {\protected@edef\luatikztdtools@p@c@v{#1}} ,transformation/.code = {\protected@edef\luatikztdtools@p@c@transformation{#1}} ,transformation/.initial = Matrix:identity3() ,draw~options/.estore~in = \luatikztdtools@p@c@drawoptions ,draw~options/.initial = {} ,arrow~tip/.code = {\protected@edef\luatikztdtools@p@c@arrowtip{#1}} ,arrow~tail/.code = {\protected@edef\luatikztdtools@p@c@arrowtail{#1}} ,filter/.code = {\protected@edef\luatikztdtools@p@c@filter{#1}} ,filter/.initial = return~true ,/lua-tikz3dtools/parametric/surface/.cd % abbreviated "s" ,ustart/.estore~in = \luatikztdtools@p@s@ustart ,ustart/.initial = 0 ,ustop/.estore~in = \luatikztdtools@p@s@ustop ,ustop/.initial = 1 ,usamples/.estore~in = \luatikztdtools@p@s@usamples ,usamples/.initial = 10 ,vstart/.estore~in = \luatikztdtools@p@s@vstart ,vstart/.initial = 0 ,vstop/.estore~in = \luatikztdtools@p@s@vstop ,vstop/.initial = 1 ,vsamples/.estore~in = \luatikztdtools@p@s@vsamples ,vsamples/.initial = 10 ,v/.code = {\protected@edef\luatikztdtools@p@s@v{#1}} ,transformation/.code = {\protected@edef\luatikztdtools@p@s@transformation{#1}} ,transformation/.initial = Matrix:identity3() ,fill~options/.code = {\protected@edef\luatikztdtools@p@s@filloptions{#1}} ,fill~options/.initial = {} ,filter/.code = {\protected@edef\luatikztdtools@p@s@filter{#1}} ,filter/.initial = return~true ,/lua-tikz3dtools/parametric/triangle/.cd % abbreviated "t" ,A/.code = {\protected@edef\luatikztdtools@p@t@A{#1}} ,B/.code = {\protected@edef\luatikztdtools@p@t@B{#1}} ,C/.code = {\protected@edef\luatikztdtools@p@t@C{#1}} ,transformation/.code = {\protected@edef\luatikztdtools@p@t@transformation{#1}} ,transformation/.initial = Matrix:identity3() ,fill~options/.code = {\protected@edef\luatikztdtools@p@t@filloptions{#1}} ,fill~options/.initial = {} ,filter/.code = {\protected@edef\luatikztdtools@p@t@filter{#1}} ,filter/.initial = return~true ,/lua-tikz3dtools/parametric/solid/.cd % abbreviated "solid" ,ustart/.estore~in = \luatikztdtools@p@solid@ustart ,ustart/.initial = 0 ,ustop/.estore~in = \luatikztdtools@p@solid@ustop ,ustop/.initial = 1 ,usamples/.estore~in = \luatikztdtools@p@solid@usamples ,usamples/.initial = 10 ,vstart/.estore~in = \luatikztdtools@p@solid@vstart ,vstart/.initial = 0 ,vstop/.estore~in = \luatikztdtools@p@solid@vstop ,vstop/.initial = 1 ,vsamples/.estore~in = \luatikztdtools@p@solid@vsamples ,vsamples/.initial = 10 ,wstart/.estore~in = \luatikztdtools@p@solid@wstart ,wstart/.initial = 0 ,wstop/.estore~in = \luatikztdtools@p@solid@wstop ,wstop/.initial = 1 ,wsamples/.estore~in = \luatikztdtools@p@solid@wsamples ,wsamples/.initial = 10 ,v/.code = {\protected@edef\luatikztdtools@p@solid@v{#1}} ,transformation/.code = {\protected@edef\luatikztdtools@p@solid@transformation{#1}} ,transformation/.initial = Matrix:identity3() ,fill~options/.estore~in = \luatikztdtools@p@solid@filloptions ,fill~options/.initial = {} ,filter/.code = {\protected@edef\luatikztdtools@p@solid@filter{#1}} ,filter/.initial = return~true }% end tikzset \lua_load_module:n { lua-tikz3dtools-implementation } \NewDocumentCommand { \appendpoint } {o} { \group_begin: \tikzset{ /lua-tikz3dtools/parametric/point/.search~also = {/tikz} ,/lua-tikz3dtools/parametric/point/.cd ,#1 } \__lua_tikztdtools_appendpoint: \group_end: } \NewDocumentCommand { \appendlabel } {o} { \group_begin: \tikzset{ /lua-tikz3dtools/parametric/label/.search~also = {/tikz} ,/lua-tikz3dtools/parametric/label/.cd ,#1 } \__lua_tikztdtools_appendlabel: \group_end: } \NewDocumentCommand { \appendlight } {o} { \group_begin: \tikzset{ /lua-tikz3dtools/parametric/light/.search~also = {/tikz} ,/lua-tikz3dtools/parametric/light/.cd ,#1 } \__lua_tikztdtools_appendlight: \group_end: } \NewDocumentCommand { \appendcurve } {o} { \group_begin: \tikzset{ /lua-tikz3dtools/parametric/curve/.search~also = {/tikz} ,/lua-tikz3dtools/parametric/curve/.cd ,#1 } \__lua_tikztdtools_appendcurve: \group_end: } \NewDocumentCommand { \appendsurface } {o} { \group_begin: \tikzset{ /lua-tikz3dtools/parametric/surface/.search~also = {/tikz} ,/lua-tikz3dtools/parametric/surface/.cd ,#1 } \__lua_tikztdtools_appendsurface: \group_end: } \NewDocumentCommand { \appendtriangle } {o} { \group_begin: \tikzset{ /lua-tikz3dtools/parametric/triangle/.search~also = {/tikz} ,/lua-tikz3dtools/parametric/triangle/.cd ,#1 } \__lua_tikztdtools_appendtriangle: \group_end: } \NewDocumentCommand { \appendsolid } {o} { \group_begin: \tikzset{ /lua-tikz3dtools/parametric/solid/.search~also = {/tikz} ,/lua-tikz3dtools/parametric/solid/.cd ,#1 } \__lua_tikztdtools_appendsolid: \group_end: } \NewDocumentCommand { \displaysimplices } {} { \group_begin: \__lua_tikztdtools_displaysimplices: \group_end: } \NewDocumentCommand { \setobject } {o} { \group_begin: \tikzset{ /lua-tikz3dtools/parametric/object/.search~also = {/tikz} ,/lua-tikz3dtools/parametric/object/.cd ,#1 } \__lua_tikztdtools_setobject: \group_end: }