Hola, me gustaría comparar dos listas separadas por comas.
\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}
Mi enfoque no funciona. ¿Qué hay de malo en mi enfoque? También se agradecería cualquier otra solución.
Respuesta1
Cada vez que leo una lista separada por comas aparece la asociación l3clist
. La siguiente sugerencia utiliza l3clist
. Comenté el código para ver qué pasa.
La idea básica es la definición del comando \LevelInput
que tiene la siguiente sintaxis:
\LevelInput*{level}[comma list]{file name}{level title}{label}
La lista de estrellas y comas son opcionales. Si usas la estrella, se usa la versión estrella del nivel. Basado en esta función principal que definí \sectionInput
. \chapterInput
está comentado porque no está disponible para article
.:
\NewDocumentCommand \sectionInput { s }
{
\IfBooleanTF { #1 }
{
\LevelInput*{section}
}
{
\LevelInput{section}
}
}
Su lista de comas predefinida también debe proporcionarse en el código principal. Por eso el comando \ProvideDocumentCommand
es adecuado. Define el comando solo si no está definido.
Después de esta pequeña introducción aquí el 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}