% Kale Ewasiuk (kalekje@gmail.com) % 2022-01-30 % Copyright (C) 2021-2022 Kale Ewasiuk % % Permission is hereby granted, free of charge, to any person obtaining a copy % of this software and associated documentation files (the "Software"), to deal % in the Software without restriction, including without limitation the rights % to use, copy, modify, merge, publish, distribute, sublicense, and/or sell % copies of the Software, and to permit persons to whom the Software is % furnished to do so, subject to the following conditions: % % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF % ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED % TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A % PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT % SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR % ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN % ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE % OR OTHER DEALINGS IN THE SOFTWARE. \ProvidesPackage{autopuncitems}[2022-01-30] \RequirePackage{luacode} \RequirePackage{etoolbox} \newtoggle{noenumitem} \DeclareOption{noenumitem}{\toggletrue{noenumitem}} \ProcessOptions*\relax \luadirect{autopuncitems = require'autopuncitems'} \newcommand{\APomit}{} % blank flag used in '\item' to hide it from counting and auto \newcommand{\APpass}{} % blank flag used in '\item', autopunc is skipped, but count is still \newcommand{\disableAPautopassnest}{\luadirect{autopuncitems.autopassnested = false}} \newcommand{\enableAPautopassnest}{\luadirect{autopuncitems.autopassnested = true}} \newcommand{\disableAPprotectnest}{\luadirect{autopuncitems.skipnextprot = true}} \newcommand{\enableAPprotectnest}{\luadirect{autopuncitems.skipnextprot = false}} \NewDocumentCommand{\setAPeach}{m m m}{\setAPdef{#1}\setAPseclast{#2}\setAPlast{#3}} % set each one, default, second last, last \NewDocumentCommand{\setAPall}{m}{\setAPdef{#1}\setAPseclast{#1}\setAPlast{#1}} % set all the same \NewDocumentCommand{\setAPdef}{m}{\luadirect{autopuncitems.punc[0] = \luastring{#1}}} % default punc value \NewDocumentCommand{\setAPlast}{m}{\luadirect{autopuncitems.punc[1] = \luastring{#1}}} % second last punc value \NewDocumentCommand{\setAPseclast}{m}{\luadirect{autopuncitems.punc[2] = \luastring{#1}}} % final punc value \NewDocumentEnvironment{AutoPuncItems}{ +b }{\luadirect{tex.print(autopuncitems.go(\luastringN{#1}))}}{} % does not expand \NewDocumentEnvironment{AutoPuncItemsO}{ +b }{\luadirect{tex.print(autopuncitems.go(\luastringO{#1}))}}{} % expands once \NewDocumentEnvironment{AutoPuncItemsE}{ +b }{\luadirect{tex.print(autopuncitems.go(\luastring{#1}))}}{} % full expansion IN-PROGRESS \iftoggle{noenumitem}{}{% do nothing to enumitem if noenumitem is passed. Useful for beamer \RequirePackage{enumitem} \global\SetEnumitemKey{autopunc}{ first*=\expandafter\AutoPuncItems, after=\endAutoPuncItems, } \global\SetEnumitemKey{autopuncO}{ first*=\expandafter\AutoPuncItemsO, after=\endAutoPuncItemsO, } \global\SetEnumitemKey{autopuncE}{ first*=\expandafter\AutoPuncItemsE, after=\endAutoPuncItemsE, } }