
これは わずかに異なる2つのバージョン間のコンパイル時間の違い。
この質問をしたときに明らかになったように、コンパイルの速度は、コンマ区切りリストの長さに大きく影響されます\ReferencedID
。これは、テキストから収集されたラベルのリストです。ただし、このリストには重複が含まれている可能性があり、実際、私の質問の例では重複が含まれています。では、コンマ区切りリストから重複を削除するにはどうすればよいでしょうか。
具体的には、私の例のリストは次のとおりです。
\gdef \ReferencedIDs{,2014.11.14,2014.11.14,2014.11.17,2014.11.14,2014.07.18.tm,2014.11.12.tm,2013.10.05.kanjur,2013.10.05.powai,2013.10.06,2013.10.28.zhm,2013.10.17,2013.10.22,2013.10.14.ks,2013.10.06,2013.10.17,2013.10.22,2013.10.24,2013.10.28,2013.10.30,2013.11.11,2014.09.05.tm,2014.07.18.tm,2014.11.12.tm,2014.11.17,2015.01.06,2015.01.06}
答え1
がすでにカンマ区切りのリストとして形成されていると仮定すると\ReferencedIDs
、私がすでに示したマクロを組み合わせることができます。seqsplitは文字列が直接引数として与えられない限り機能しません
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{seqsplit}
\usepackage{xparse}
\ExplSyntaxOn
\cs_set_eq:NN \faheem_seqsplit:n \seqsplit
\cs_generate_variant:Nn \faheem_seqsplit:n { V }
\clist_new:N \l_faheem_referenced_ids_clist
\NewDocumentCommand{\printIDs}{s}
{
\clist_set:NV \l_faheem_referenced_ids_clist \ReferencedIDs
\IfBooleanF{#1}
{ \clist_remove_duplicates:N \l_faheem_referenced_ids_clist }
\faheem_seqsplit:V \l_faheem_referenced_ids_clist
}
\ExplSyntaxOff
\def\ReferencedIDs{,2014.11.14,2014.11.14,2014.11.17,2014.11.14,2014.07.18.tm,%
2014.11.12.tm,2013.10.05.kanjur,2013.10.05.powai,2013.10.06,2013.10.28.zhm,%
2013.10.17,2013.10.22,2013.10.14.ks,2013.10.06,2013.10.17,2013.10.22,2013.10.24,%
2013.10.28,2013.10.30,2013.11.11,2014.09.05.tm,2014.07.18.tm,2014.11.12.tm,%
2014.11.17,2015.01.06,2015.01.06}
\begin{document}
This is the original list with duplicates, \printIDs*
Here is the list with duplicates removed, \printIDs
\end{document}
答え2
を使ってこれを行う方法を教えてくれたJoseph Wrightに感謝しますexpl3
。次のコードは大部分が自明です。重複を削除する行は
\clist_remove_duplicates:N \l_ReferencedIDs
ドキュメントについては、interface3.pdf
少なくとも TeX Live にあるファイルを参照してくださいtexdoc interface3
。
\documentclass[12pt]{article}
\usepackage{seqsplit}
\usepackage{expl3}
\usepackage[T1]{fontenc}
\let\oldseqsplit\seqsplit% Copy \seqsplit
\renewcommand{\seqsplit}{% Redefine \seqsplit to...
\expandafter\oldseqsplit\expandafter}% ...expand its argument before processing it
\gdef \ReferencedIDs{,2014.11.14,2014.11.14,2014.11.17,2014.11.14,2014.07.18.tm,2014.11.12.tm,2013.10.05.kanjur,2013.10.05.powai,2013.10.06,2013.10.28.zhm,2013.10.17,2013.10.22,2013.10.14.ks,2013.10.06,2013.10.17,2013.10.22,2013.10.24,2013.10.28,2013.10.30,2013.11.11,2014.09.05.tm,2014.07.18.tm,2014.11.12.tm,2014.11.17,2015.01.06,2015.01.06}
\ExplSyntaxOn
\clist_set:NV \l_ReferencedIDs \ReferencedIDs % initialise list
\clist_remove_duplicates:N \l_ReferencedIDs % remove duplicates
\gdef \DeduplicatedReferencedIDs{\l_ReferencedIDs}
\ExplSyntaxOff
\begin{document}
This is the original list with duplicates, \seqsplit{\ReferencedIDs}.
Here is the list with duplicates removed, \seqsplit{\DeduplicatedReferencedIDs}.
\end{document}
注:\seqsplit{\DeduplicatedReferencedIDs}
正しくラップされません。理由はわかりません。