;
環境で区切られた引数のリストを処理するマクロの作成を手伝ってもらいましたitemize
。これを実現するために、xparse
を使用しました。
マクロで引数のリストをラップしようとしましたが、何も起こりませんでした。どうすればこれを修正できますか?
MWE:
\documentclass{article}
\usepackage{xparse}
\newcommand\insertitem[1]{\item #1}
% xparse-command I had help with
\NewDocumentCommand\myList{>{\SplitList{;}}m}
{\vspace*{-\baselineskip}
\begin{itemize}
\ProcessList{#1}{ \insertitem }
\end{itemize}
}
\newcommand\someStuff{One; two; three}
\begin{document}
\myList{One; two; three}
Now trying to expand macro content
\myList{\someStuff}
\end{document}
\myList{One; two; three}
結果は望みどおりで、itemize
リストです。後者の例は\myList{\someStuff}
機能していません。私の問題の解決策はおそらく質問のどこかにあると思いますProcessList (xparse) からマクロに複数の引数を渡します。結果は表形式で使用されます。、しかし、現時点ではどこにあるのか理解できません...
編集: マクロに引数を保存する目的は、基本的に私の生活を少し楽にすることです。私が教えている科目の進捗計画のテンプレート構造を作成しました。そこでは、たとえば、計画期間中に生徒が達成すべき主な能力を印刷する必要があります。これらの能力 (およびその他) は乱雑なlongtable
環境にラップされているため、その方法を学ぶ時間ができたらテンプレートをクラスにすることを計画しています。そのため、ドキュメントの先頭に次のようなブロックがあると非常に便利です。
\maincompetences{Competence one; competence two, etc.}
\learninggoals{Main goal one; main goal two; etc.}
答え1
TeX は引数を吸収するときに引数を展開しません。したがって、2 番目のケースでは、渡される引数には\SplitArgument
セミコロン\someStuff
が含まれていません。
引数の最初のトークンの拡張を強制することもできますが、これにより他の問題が発生する可能性があります。
より低レベルのソリューション。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\myList}{sm}
{
\begin{itemize}
\IfBooleanTF{#1}
{
\holene_mylist:o { #2 } % expand the argument (once)
}
{
\holene_mylist:n { #2 }
}
\end{itemize}
}
\seq_new:N \l_holene_mylist_input_seq
\cs_new_protected:Npn \holene_mylist:n #1
{
\seq_set_split:Nnn \l_holene_mylist_input_seq { ; } { #1 }
\seq_map_inline:Nn \l_holene_mylist_input_seq
{
\item ##1
}
}
\cs_generate_variant:Nn \holene_mylist:n { o }
\ExplSyntaxOff
\newcommand\someStuff{One; two; three}
\begin{document}
\myList{One; two; three}
Now trying to expand macro content
\myList*{\someStuff}
\end{document}
あなた*-variant を使用して、引数を展開するかどうかを決定します。