
이는 후속 조치입니다. 약간 다른 두 버전 간의 컴파일 시간 차이.
그 질문을 할 때 명백해졌듯이, 컴파일 속도는 쉼표로 구분된 목록의 길이에 따라 심각한 영향을 받습니다 \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}
올바르게 래핑되지 않습니다. 이유를 모르겠습니다.