操作列表然后将其作为可选参数传递

操作列表然后将其作为可选参数传递

我想删除 给出的一个键#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

开始之前的一些提示:

  1. 变量clist应该命名..._clist,而不是_tl
  2. 您尝试定义的命令不可扩展;
  3. \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}

在此处输入图片描述

相关内容