![将 \lstinline 放入 \item[] 描述中并自动将 \item[] 内容添加到词汇表中](https://linux22.com/image/441370/%E5%B0%86%20%5Clstinline%20%E6%94%BE%E5%85%A5%20%5Citem%5B%5D%20%E6%8F%8F%E8%BF%B0%E4%B8%AD%E5%B9%B6%E8%87%AA%E5%8A%A8%E5%B0%86%20%5Citem%5B%5D%20%E5%86%85%E5%AE%B9%E6%B7%BB%E5%8A%A0%E5%88%B0%E8%AF%8D%E6%B1%87%E8%A1%A8%E4%B8%AD.png)
我已经实施这解决方案允许将\lstinline
代码放在描述\item
命令内。我还想通过将整个\item
内容放入命令字段来自动添加整个内容作为词汇表条目name
。\newglossaryentry
内容由文本和代码\item
组成。\lstinline
由于\item
内容存储在框寄存器中,当我尝试类似操作时,name={\usebox0}
条目名称不会出现在文档词汇表中。我认为这是因为\usebox0
在文件中没有正确展开.glsdefs
(所有条目名称都按字面意思存储为\usebox 0
)。
梅威瑟:
\documentclass[letterpaper, 12pt, oneside]{memoir}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{enumitem}
\usepackage{etoolbox}
% Redefine \item command.
\makeatletter
\let\orig@item\item
\def\item{%
\@ifnextchar{[}%
{\lstinline@item}% %@
{\orig@item}%
}
\begingroup
\catcode`\]=\active
\gdef\lstinline@item[{%
\setbox0\hbox\bgroup
\catcode`\]=\active
\let]\lstinline@item@end
}
\endgroup
\def\lstinline@item@end{%
\egroup
\orig@item[\usebox0]%
% Extra lines for adding entries to glossary.
\stepcounter{mycount}%
\newglossaryentry{\themycount}{name={\usebox0}, description={}}%
\glsadd{\themycount}%
}
\makeatother
% Glossaries.
\usepackage[automake]{glossaries}
\glsnoexpandfields
\glssetexpandfield{name}
\makeglossaries
% Counter for glossary labels.
\newcounter{mycount}
\setcounter{mycount}{0}
\begin{document}
\printglossary[style=index]
\chapter{Some chapter}
Some text.
\begin{description}
\item[First] Description.
\item[Second] Description.
\end{description}
\end{document}
我已经知道如何将\lstinline
代码放入name
字段而不会导致任何错误。所以我正在寻找某种机制来将内容存储\item
在可在字段中扩展的宏中name
,并将其存储在框寄存器中(已解决),以避免\lstinline
内部\item
问题。
我认为可能是类似\def\storedContent{...}
但以同样的方式\setbox0\hbox\bgroup...\egroup
工作。我不知道,我尝试了很多方法都没有成功,所以任何解决方案都会受到欢迎。