如何将 \item[] 后面的内容括在括号中?

如何将 \item[] 后面的内容括在括号中?

我想重新定义\item[]以使其工作如下:

\documentclass[fontsize=22pt]{scrreprt}

\UsePackage[inline]{enumitem}
\newlist{notes}{description}{1}
\setlist[notes]{
  leftmargin=0.3\linewidth,labelsep=2em,
  itemsep=1.5ex,style=multiline,font=\normalfont
}

\def\removespecial{
  \catcode`\_=12
  \catcode`\^=12
  \catcode`\$=12
  \catcode`\%=12
  \catcode`\#=12
  \catcode`\&=12
  \catcode`\~=12
}

\begin{document}
\begin{notes}

\item[something]
{\removespecial\obeylines\obeyspaces
  ...some content...
}

\end{notes}
\end{document}

也就是说,将后面的内容括\item[]在括号中,以便我可以\obeylines在里面使用等。如果没有括号,像这样的宏\obeylines会影响文档的其余部分并破坏其他一些命令。但是,虽然手动添加括号是可行的,但我不知道如何在宏中做到这一点(通过重新定义\item[]或其他方式)。有人能告诉我怎么做吗?

答案1

我没有对此进行广泛的测试,因为我不确定您的用例,并且您的 MWE 没有提供太多线索。不过,我相当有信心它可以按您的要求工作,因为下面的 MWE 会产生:

在此处输入图片描述

特别要注意间距、换行符和特殊字符是否符合您的要求。此外,根据上述评论,我检查了您的注释\remove@special在注释环境关闭后不再有效,这很好。

\item这个想法是在环境中重新定义notes,以便将您的特殊 cat 代码和 插入到块\obey*\bgroup...\egroup。第一个\item启动该组,下一个关闭最后一个组(使用\endLastItem),然后启动下一个\item-group。唯一的问题是,在环境结束时,notes我们仍然需要关闭最后一个 的“特殊组” \item。这是通过将notes环境嵌入另一个环境来完成的,该环境在 结束时负责处理这个问题。所以下面的例子实际上出现在环境内部Notes

代码如下:

\documentclass[fontsize=22pt]{scrreprt}

\usepackage[inline]{enumitem}
\newlist{notes}{description}{1}
\setlist[notes]{
  leftmargin=0.3\linewidth,labelsep=2em,
  itemsep=1.5ex,style=multiline,font=\normalfont
}
\makeatletter
\def\remove@special{
  \catcode`\_=12
  \catcode`\^=12
  \catcode`\$=12
  \catcode`\%=12
  \catcode`\#=12
  \catcode`\&=12
  \catcode`\~=12
}
\let\realItem=\item
\let\endLastItem=\relax
\newcommand\specialItem[1][\relax]{\endLastItem%
   \ifx\relax#1\relax\realItem\else\realItem[#1]\fi%i
   \bgroup\remove@special\obeylines\obeyspaces
   \let\endLastItem\egroup}
\newenvironment{Notes}{\notes\let\item\specialItem}{\endLastItem\endnotes}
\makeatother

\begin{document}
  \begin{Notes}
    \item[something]
    \item Another     item with    some

    special commands # _ $ % & ~
  \end{Notes}
\end{document}

相关内容