
Este é um acompanhamento Diferença no tempo de compilação entre duas versões ligeiramente diferentes.
Como ficou óbvio ao fazer essa pergunta, a velocidade dessa compilação é seriamente afetada pelo comprimento da lista separada por vírgulas \ReferencedID
. Esta é a lista dos rótulos coletados do texto. Mas esta lista pode conter duplicatas e, de fato, no exemplo da minha pergunta, contém. Então, como excluir duplicatas de uma lista separada por vírgulas?
Para ser mais concreto, a lista é meu exemplo:
\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}
Responder1
Supondo que \ReferencedIDs
já tenha sido formada uma lista separada por vírgulas, você pode combinar as macros que já mostrei emseqsplit não funciona a menos que a string seja fornecida diretamente como argumento
\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}
Responder2
Obrigado a Joseph Wright por me mostrar como fazer isso usando expl3
. O código a seguir é amplamente autoexplicativo. A linha que remove as duplicatas é
\clist_remove_duplicates:N \l_ReferencedIDs
Para documentação, veja o interface3.pdf
arquivo, encontrado no TeX Live, pelo menos, com extensão 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}
NOTA: O \seqsplit{\DeduplicatedReferencedIDs}
não é enrolado corretamente; Eu não sei por quê.