比较两个逗号分隔的列表

比较两个逗号分隔的列表

你好,我想比较两个以逗号分隔的列表。

\documentclass[a4paper]{article}    
\usepackage{comment}    
\usepackage{ifthen}
\usepackage{xargs}
\usepackage{xkeyval}
\usepackage{xfor}  


\begin{document}

\dosomething{\compilation} % compilation is comma separated text coming from the terminal (pdflatex "\def\compilation{cat,vat,rat,sat} \input{myfile.tex}") 


%arguments of the new command is another comma separated list I can Print this with #1
\newcommand{\chapterInput}[4][all]{%

%code to compare starts here
\newtoks\myValue
\myValue={#1}


begin{comment}
I wanted to do somthing like this
for(every elemnet in compilation)
{for(every element in myValue)
{\ifthenelse{\equal{elemnet in compilation}{every element in myValue}}
   {    
 \chapter{#3\label{#4}}
    \input{#2}
    }
   {\relax}
}}

end{comment}

%My approach is 

\makeatletter

\@for\@myarg:=\myValue\do
{

\@for\@myVar:=\compilation\do
{
   \ifthenelse
       {
         \equal{\@myarg}{\@myVar}
          {    
           \chapter{#3\label{#4}} \input{#2}
          }
          {\relax}
       }
}
}



\newcommand{\sectionInput}[4][all]{%
    \section{#3\label{#4}}
    \input{#2}
}
\newcommand{\subsectionInput}[4][all]{%

}

\chapterInput[rat,cat]{testChapter}{Test Chapter}{chap:testChapter}
\sectionInput[mat,sat]{testSection}{Test Section}{sect:testSection}
\subsectionInput[bat]{testSection}{A subsection on best}{subsect:testSubsection}
\subsectionInput[vat]{testSection}{This ia a subsection on grain}{subsect:testSubsection}


\end{document}

我的方法不起作用。我的方法有什么问题?如果有其他解决方案,我将不胜感激。

答案1

每次我读取逗号分隔列表时,我都会得到关联l3clist。下面的建议使用l3clist。我注释了代码以查看会发生什么。

基本思想是命令的定义\LevelInput,其语法如下:

\LevelInput*{level}[comma list]{file name}{level title}{label}

星号和逗号列表是可选的。如果使用星号,则使用星号版本的级别。基于这个主要功能,我定义了\sectionInput. \chapterInput,因为它不适用于article.:

\NewDocumentCommand \sectionInput { s }
 {
  \IfBooleanTF { #1 }
   {
    \LevelInput*{section}
   }
   {
    \LevelInput{section}
   }
 }

主代码中还应提供预定义的逗号列表。因此该命令\ProvideDocumentCommand是合适的。仅当命令未定义时,它才定义该命令。

经过这个简短的介绍之后,这里是 mwe。

\RequirePackage{filecontents}
\begin{filecontents}{examplefile.tex}
START EXAMPLE FILE

\lipsum[1]    

END EXAMPLE FILE
\end{filecontents}
\documentclass{article}%
\usepackage{lipsum}%filling text
\usepackage{xparse}
\ExplSyntaxOn
% compilation is comma separated text coming %
% from the terminal (pdflatex "\def\compilation{cat,vat,rat,sat}
% \input{myfile.tex}") 
% providing command is it isn't defined.
\ProvideDocumentCommand \compilation {} { cat , vat , rat , sat }
\clist_new:N \l_umar_compilation_clist
\clist_set:No \l_umar_compilation_clist { \compilation }
\bool_new:N \l_umar_listelemtequal_bool
\bool_set_false:N \l_umar_listelemtequal_bool
\NewDocumentCommand \LevelInput { s m o  m m m }
 {
  %#1 star version
  %#2 level command -- chapter/section/section/...
  %#3 optinal argument
  %#4 file name
  %#5 level title
  %#6 label command
  \IfBooleanTF { #1 }
   {%has star
    \IfNoValueTF { #3 } % no optinal Argument
     {%no optinal Argument
      \umar_starinput:nnn { #2 } { #5 } { #4 }
     }
     {%optinal Argument
      \umar_selected_starinput:nnnn { #3 } { #2 } { #5 } { #4 }
     }   
   }
   {%has no star
    \IfNoValueTF { #3 } 
     {%no ptinal Argument
      \umar_input:nnnn { #2 } { #5 } { #6 } { #4 }
     }
     {%optinal Argument
      \umar_selected_input:nnnnn { #3 } { #2 } { #5 } { #6 } { #4 }
     }   
   }
 }

%\umar_starinput:nnn { level cmd } { level title } { file name } 
\cs_new:Npn \umar_starinput:nnn #1 #2 #3
 {
  \use:c { #1  }* { #2 } 
  \input { #3 }
 } 
%\umar_input:nnnn { level cmd } { level title } { label } { file name }  
\cs_new:Npn \umar_input:nnnn #1 #2 #3 #4
 {
  \use:c { #1  } { #2 } \label { #3 } 
  \input { #4 }
 } 
%\umar_selected_starinput:nnnn { list }{ level cmd } { level title } 
%         { file name } 
\cs_new:Npn  \umar_selected_starinput:nnnn #1 #2 #3 #4
 {
  \clist_map_inline:nn { #1 }
   {
    \clist_if_in:NnT \l_umar_compilation_clist { ##1 }
     { \bool_set_true:N \l_umar_listelemtequal_bool }
   }
   \bool_if:NTF \l_umar_listelemtequal_bool 
    {
     \umar_starinput:nnn { #2 } { #3 } { #4 }
    }
    {
     \msg_log:n { no~input }
    }
  \bool_set_false:N \l_umar_listelemtequal_bool    
 }
%\umar_selected_input:nnnnn { list }{ level cmd } { level title } 
%         { label } { file name } 
\cs_new:Npn  \umar_selected_input:nnnnn #1 #2 #3 #4 #5
 {
  \clist_map_inline:nn { #1 }
   {
    \clist_if_in:NnT \l_umar_compilation_clist  { ##1 }
     { \bool_set_true:N \l_umar_listelemtequal_bool }
   }
   \bool_if:NTF \l_umar_listelemtequal_bool 
    {
     \umar_input:nnnn { #2 } { #3 } { #4 } { #5 }
    }
    {
     \msg_log:n { no~input }
    }
  \bool_set_false:N \l_umar_listelemtequal_bool    
 }

% not for article
%\NewDocumentCommand \chapterInput { s }
% {
%  \IfBooleanTF { #1 }
%   {
%    \LevelInput*{chapter}
%   }
%   {
%    \LevelInput{chapter}
%   }
% }
\NewDocumentCommand \sectionInput { s }
 {
  \IfBooleanTF { #1 }
   {
    \LevelInput*{section}
   }
   {
    \LevelInput{section}
   }
 }
\NewDocumentCommand \subsectionInput { s }
 {
  \IfBooleanTF { #1 }
   {
    \LevelInput*{subsection}
   }
   {
    \LevelInput{subsection}
   }
 }
\ExplSyntaxOff

\begin{document}
\tableofcontents

\sectionInput{examplefile}{first section}{sec:one}

\sectionInput[cat]{examplefile}{first section with opt}{sec:two}


\subsectionInput[fish,rat]{examplefile}{first subsection with opt}{subsec:one}


\subsectionInput*{examplefile}{first subsection with star}{}

\end{document}

相关内容