쉼표로 구분된 두 목록 비교

쉼표로 구분된 두 목록 비교

안녕하세요. 쉼표로 구분된 두 목록을 비교하고 싶습니다.

\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}

관련 정보