% $Id: test-def.tex 63198 2022-05-01 15:18:17Z karl $ % This file is public domain. \documentclass{report} \newcommand{\defaultleftmargin}{0.25in} %\setlength{\oddsidemargin}{\defaultleftmargin} %\providecommand{\defaultmargin}{0.25in}\def\defx{\defy} % based on report: % Date: Mon, 25 Apr 2022 15:37:27 -0600 % From: Michael Clark % \def\ibx{\textit{#1}} % \def with nested braces in rhs \newcommand\ibx{\textit{#1}} % \newcommand\foo \newcommand{\ibx}{\textit{#1}} % \newcommand{\foo} \newcommand{\ibx}{\textbf{\textit{#1}}} % more nesting % *-form \newcommand*{\ibxstar}{\textit{#1}} % arg count \newcommand{\ibx}[1]{\textit{#1}} % optarg default \newcommand{\ibx}[1][dflt]{\textit{#1}} \begin{document} \end{document} % See Makefile.am for rebuild + test recipe. % emacs-page % [https://tug.org/pipermail/tex-live/2019-January/043083.html] % % Date: Thu, 24 Jan 2019 19:11:18 -0800 % From: Zayd Hammoudeh % To: % Subject: [tex-live] Possible lacheck Bug Report % % [...] % % In the simple LaTeX file: % \documentclass{report} % % \newcommand{\defaultleftmargin}{0.25in} % % \begin{document} % \end{document} % % I get the following errors with lacheck: % "hw01.tex", line 5: <- unmatched "end of file hw01.tex" % "hw01.tex", line 2: -> unmatched "{" % % This is reported by Vim's syntastic running lacheck ver. $Id: % lacheck.lex,v 1.26 1998/03/07 07:46:45 abraham Exp $ on MacOS High % Sierra. The issue only seems to arise when \newcommand is followed by % {\def*} (where * is zero or more other characters). Removal of the curly % brackets around \def* or any term other than def causes the issue to go away. % % [...] % % Edit: The issue appears to not be limited to newcommand. I get the same % error for the line: % \setlength{\oddsidemargin}{\defaultleftmargin} % emacs-page % https://tug.org/pipermail/tex-live/2022-April/048096.html % Date: Mon, 25 Apr 2022 15:37:27 -0600 % From: Michael Clark % To: % Subject: lacheck is confused when curly brackets are inside a \newcommand % % Example latex file (foo.tex): % % \newcommand{\boldx}[1]{{\bf #1}} % \newcommand{\ibx}[1]{\textbf{\textit{#1}}} % % lacheck output: % % "foo.tex", line 1: <- unmatched "}" % "foo.tex", line 1: -> unmatched "beginning of file foo.tex" % "foo.tex", line 2: <- unmatched "}" % "foo.tex", line 1: -> unmatched "beginning of file foo.tex" % % I pulled the example commands from % https://www.physicsread.com/latex-bold/ showing two useful cases. One, % using a command inside of a newcommand, and the other creates a group % to isolate the scope of the command to the included text. % % Replacing \newcommand with \newcommand* reports no error as expected. % If an error is expected behavior for \newcommand, it would be nice if % the error message were more clear, as the brackets are correctly % matched. % % Thank you for maintaining this tool. I'd need to devote longer than I % have to figure out where to go from line 391 of lacheck.l % (https://tug.org/svn/texlive/trunk/Build/source/utils/lacheck/lacheck.l?view=markup#l391)