我想删除 给出的一个键#1
,然后将修改后的列表传递给\lstinline[<modified list>]$#2$
。我可以删除元素,但不知道将其余元素传递给 的语法\lstinline
。
\documentclass{article}
\usepackage{listings}
\ExplSyntaxOn
\tl_new:N \l__aljumaily_target_tl
\clist_new:N \l__aljumaily_elements_tl
\NewExpandableDocumentCommand{\inline}{O{}m}{
\group_begin:
\tl_set:Nn \l__aljumaily_target_tl{language=java}
\clist_clear:N \l__aljumaily_elements_tl
\clist_put_right:Nn \l__aljumaily_elements_tl {#1}
Before~removal:~\l__aljumaily_elements_tl\newline\newline
\clist_remove_all:NV \l__aljumaily_elements_tl \l__aljumaily_target_tl
After~removal:~\l__aljumaily_elements_tl\newline
\lstinline[\l__aljumaily_elements_tl]$#2$ % not working!
\group_end:
}
\ExplSyntaxOff
\parindent0pt
\begin{document}
\inline[language=java, basicstyle=\ttfamily, showspaces, emph={public}]{public void x() \{ ... \}}
\end{document}
答案1
开始之前的一些提示:
- 变量
clist
应该命名..._clist
,而不是_tl
; - 您尝试定义的命令不可扩展;
\clist_set:Nn
比清除变量然后执行更容易\clist_put_right:Nn
现在的问题是:当\lstinline
读取其可选参数时,它不会扩展它。您可以在调用之前执行此操作\lstinline
。
(我不明白你想做什么。)
\documentclass{article}
\usepackage{listings}
\ExplSyntaxOn
\tl_new:N \l__aljumaily_target_tl
\clist_new:N \l__aljumaily_elements_clist
\cs_new_protected:Nn \__aljumaily_lstinline:n
{
\lstinline[#1]
}
\cs_generate_variant:Nn \__aljumaily_lstinline:n { e }
\NewDocumentCommand{\inline}{O{}m}
{
\group_begin:
\tl_set:Nn \l__aljumaily_target_tl {language=java}
\clist_put_right:Nn \l__aljumaily_elements_clist {#1}
\clist_remove_all:NV \l__aljumaily_elements_clist \l__aljumaily_target_tl
\__aljumaily_lstinline:e { \clist_use:Nn \l__aljumaily_elements_clist { , } } $#2$
\group_end:
}
\ExplSyntaxOff
\begin{document}
\lstinline[language=java, basicstyle=\ttfamily, showspaces, emph={public}]$public void x() \{ ... \}$
\inline[language=java, basicstyle=\ttfamily, showspaces, emph={public}]{public void x() \{ ... \}}
\end{document}