TransWikia.com

Nesting environment inside new command generating errors

TeX - LaTeX Asked by Dweeberly on February 23, 2021

Extreme TeX novice, sorry for the length of the example, I wasn’t sure what packages were important to replicate the problems. I was trying to create a simple command that I could use to injected labeled comments into an existing document. My comment would be in text color blue and be prefixed with initials (‘[XXX]’ in this example)

documentclass[12pt]{article}
usepackage{cprotect}
usepackage{amssymb, amsmath, bm, bbm}
usepackage{adjustbox}

usepackage{amsmath, amsfonts}
usepackage{bm, bbm}
usepackage{graphics, graphicx, color, epsf}
usepackage{natbib}
usepackage{xr, zref, hyperref}
usepackage{etoolbox, siunitx}
%
usepackage{xcolor}
%
usepackage{scrextend}
%
newcommandxxx[1] {newlinetextcolor{blue}{[XXX] #1}}

begin{document}
title{A title}
author{A person}
maketitle
section{A section}
Some section stuff
xxx{a comment}
begin{verbatim}
This is 
text that 
presented 'as-is'
end{verbatim}
Some more text
xxx{
abc
begin{verbatim}
verbatim
end{verbatim}
}
end{document}

Generates:

line 37: Argument of @xverbatim has an extra }. } 
line 37: Paragraph ended before @xverbatim was complete. } 
line 37: Extra }, or forgotten endgroup. } 
: Emergency stop. 
: Command @footnotemark has changed.

I tried to define a newenvironment (not shown) used by the command, thinking that perhaps the ‘command’ couldn’t handle nested content, but it didn’t help.

  1. I’d like to understand what I have done wrong and how I might figure out such issues in the future.

  2. Find a concise summary of the TeX syntax (not LaTeX, just basic basic TeX).

  3. Understand how to get rid of that footnotemark warning. Is some package redefining that command?

One Answer

You can probably use xparse's +v-type-argument for having LaTeX read and tokenize everything in verbatim-category-code-régime and then passing things to scantokens for re-tokenization, but if you do this, then xxx cannot be used within macro-arguments/macro-definitions/etc:

documentclass[12pt]{article}
usepackage{xparse}
%
usepackage{xcolor}
%
begingroup
newcommandxxx[1]{%
  endgroup
  newcommandxxx{%
    begingroup
    catcode`^^I=12 %
    innerxxx
  }%
  NewDocumentCommand{innerxxx}{+v}{%
    endgroup
    textcolor{blue}{[XXX] %
    begingroup
    newlinechar=endlinechar
    scantokens{endgroup##1#1}}%
  }%
}%
catcode`%=12relax
xxx{%}%

begin{document}

title{A title}
author{A person}

maketitle

section{A section}

Some section stuff

xxx{a comment}bla

begin{verbatim}
This is 
text that 
presented 'as-is'
end{verbatim}

Some more text

xxx{%
abc
begin{verbatim*}
verbatim
end{verbatim*}
}%

Indenting is funny when nesting verbatim-environment in verbatim-argument:

xxx{%
  abc
  begin{verbatim*}
  verbatim
  end{verbatim*}
}%

Indenting is funny when nesting verbatim-environment in verbatim-argument:

xxx{%
  abc
  begin{verbatim*}
  verbatim
    verbatim
end{verbatim*}
}%

end{document}

enter image description here

Correct answer by Ulrich Diez on February 23, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP