
이 코드 샘플을 다음으로 압축하고 싶습니다 \forcsvlist
(제공:etoolbox
패키지).
\newcommand\mycmd[2]{
\pagestyle{#2}
\csname tit#1\endcsname
\cleardoublepage
}
\def\DOtitlepages{
\iftoggle{togfancy}{ \mycmd{fancy}{empty} }{}
\iftoggle{togplain}{ \mycmd{plain}{empty} }{}
\iftoggle{toguser}{ \mycmd{user}{plain} }{}
}
나는 s를 '목록'의 인수 쌍 \iftoggle
으로 이동하고 정의하고 싶습니다 . \mycmd
그러나 한 번에 두 개 이상의 인수를 에 전달할 수 있는지 여부는 알 수 없습니다 forcvslist
.
@Andrew 및 @Werner의 훌륭한 답변 이후에 이 명령을 다음의 다중 인수 버전으로 작성했습니다 \forcsvlist
.
\documentclass{article}
\usepackage{etoolbox}
\newcommand\mycmd[2]{#1 \par#2 \par}
\newcommand\forcsvlistargs[2]{
\expandafter\providecommand\csname \detokenize{#1}aux\endcsname[1]{\csname \detokenize{#1}\endcsname##1\relax}
\forcsvlist{\expandafter\csname \detokenize{#1}aux\endcsname}{#2}
}
\begin{document}
\forcsvlistargs{mycmd}{{{fancy}{empty}},{{plain}{empty}},{{user}{plain}}}
\end{document}
내가 틀리지 않았다면 이전에 정의되지 않은 경우 보조 명령을 생성합니다. forcsvlistargs
먼저 de 함수를 명시적으로 선언할 필요 없이 동일한 문서에서 여러 번 사용하기 위해 그렇게 했습니다 .
\csname \detokenize{#1}\endcsname##1\relax
나는 그것이 그런 식으로 바뀔 수 있다고 생각 #1##1\relax
하지만 뭔가 빠졌습니다.
답변1
아마도 더 효율적인 방법이 있을 수 있지만 언제든지 다음과 같이 할 수 있습니다.
\documentclass{article}
\usepackage{etoolbox}
\newcommand\MyCmd[1]{\typeout{Mycmd: #1}\mycmd#1}
\def\mycmd(#1|#2){
\typeout{mycmd: 1: #1. 2: #2.}
}
\begin{document}
\forcsvlist\MyCmd{{(fancy|empty)}, {(plain|plain)}, {(user|plain)}}
\end{document}
라텍스를 사용하면 로그 파일에 다음이 포함됩니다.
Mycmd: (fancy|empty)
mycmd: 1: fancy. 2: empty.
Mycmd: (plain|plain)
mycmd: 1: plain. 2: plain.
Mycmd: (user|plain)
mycmd: 1: user. 2: plain.
이는 \MyCmd
인수 쌍을 올바르게 수신한 다음 \mycmd
예상한 방식으로 n에 전달한다는 것을 보여줍니다.
(당신이 포함하지 않은 다른 코드에 응답하는 것 같아서 토글 명령을 제거했습니다.)
답변2
CSV 목록에서 "개별" 항목을 올바르게 지정하면 해당 항목을 원하는 만큼 많은 인수로 나눌 수 있습니다.
\documentclass{article}
\usepackage{etoolbox}
\makeatletter
\newcommand{\MyCmd@aux}[2]{\iftoggle{tog#1}{#2, }{no #1, }}
\newcommand{\MyCmd}[1]{\MyCmd@aux#1}
\makeatother
\begin{document}
\newtoggle{togfancy}
\newtoggle{togplain}
\newtoggle{toguser}
\toggletrue{togplain}% togplain is TRUE
\forcsvlist{\MyCmd}{%
{{fancy}{empty}},
{{plain}{plain}},
{{user}{plain}}}
\toggletrue{togfancy}% togfancy is TRUE
\forcsvlist{\MyCmd}{%
{{fancy}{empty}},
{{plain}{plain}},
{{user}{plain}}}
\toggletrue{toguser}% toguser is TRUE
\forcsvlist{\MyCmd}{%
{{fancy}{empty}},
{{plain}{plain}},
{{user}{plain}}}
\end{document}
목록 항목을 캡처한 후 필수 인수와 함께 다른 매크로로 전달됩니다.