# unified-latex-util-arguments ## What is this? Functions to help modify and attach arguments to macros in a `unified-latex` Abstract Syntax Tree (AST). By default, TeX doesn't actually have a concept of macro "arguments". Instead, TeX searches the tokens after a macro and processes them according to the macro's rules. However, LaTeX attempts to make macros look like functions that accept arguments. To attach the "arguments" to a macro node, the `unified-latex` AST needs to be reparsed and manipulated. ## When should I use this? If you have custom macros that you want arguments attached to. If you know ahead of time which macros need arguments attached to them, use `unified-latex-util-parse` and pass in the appropriate macro info instead. ## Install ```bash npm install @unified-latex/unified-latex-util-arguments ``` This package contains both esm and commonjs exports. To explicitly access the esm export, import the `.js` file. To explicitly access the commonjs export, import the `.cjs` file. # Plugins ## `unifiedLatexAttachMacroArguments` Unified plugin to attach macro arguments to the macros specified via the `macros` option. ### Usage `unified().use(unifiedLatexAttachMacroArguments[, options])` #### options ```typescript { macros: MacroInfoRecord; } ``` ### Type `Plugin<{ macros: MacroInfoRecord; }[], Ast.Root, Ast.Root>` ```typescript function unifiedLatexAttachMacroArguments(options: { macros: MacroInfoRecord; }): (tree: Ast.Root) => void; ``` # Functions ## `getArgsContent(node)` Returns the content of `args` for a macro or environment as an array. If an argument was omitted (e.g., because it was an optional arg that wasn't included), then `null` is returned. ```typescript function getArgsContent(node: Ast.Macro | Ast.Environment): Ast.Node[][]; ``` **Parameters** | Param | Type | | :---- | :----------------------------- | | node | `Ast.Macro \| Ast.Environment` | ## `getNamedArgsContent(node, namedArgumentsFallback)` Returns the content of `args` for a macro or environment as an object whose keys are the "names" of each argument. These names of the arguments must be specified in the `_renderInfo` prop. If `_renderInfo` does not contain a `namedArguments` array, then an empty object will be returned. ```typescript function getNamedArgsContent( node: Ast.Macro | Ast.Environment, namedArgumentsFallback: readonly string[] ): Record; ``` **Parameters** | Param | Type | | :--------------------- | :----------------------------- | | node | `Ast.Macro \| Ast.Environment` | | namedArgumentsFallback | `readonly string[]` | ## `gobbleSingleArgument(nodes, argSpec, startPos)` Gobbles an argument of whose type is specified by `argSpec` starting at the position `startPos`. If an argument couldn't be found, `argument` will be `null`. ```typescript function gobbleSingleArgument( nodes: Ast.Node[], argSpec: ArgSpec.Node, startPos: Number ): { argument: Ast.Argument | null; nodesRemoved: number }; ``` **Parameters** | Param | Type | | :------- | :------------- | | nodes | `Ast.Node[]` | | argSpec | `ArgSpec.Node` | | startPos | `Number` |