
다음 예를 고려하십시오. 그렇게 하면 \seqsplit{ReferencedIDs}
문자열이 분할되지 않습니다. 반면에 문자열을 인수로 직접 삽입하면 그렇게 됩니다. 늘 그렇듯이 이것이 왜 작동하지 않는지 모르겠습니다. 누구든지 나에게 깨달을 수 있습니까?
\documentclass[12pt]{article}
\usepackage{seqsplit}
\begin{document}
\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}
\seqsplit{\ReferencedIDs}
\seqsplit{,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}
\end{document}
답변1
인수는 \seqsplit
완전히 확장되었다고 가정하여 토큰별로 처리됩니다. 매크로(단일 토큰)를 인수로 전달하는 경우에는 그렇지 않습니다. 다음 설정은 \seqsplit
인수를 처리하기 전에 인수를 확장하도록 재정의합니다.
\documentclass{article}
\usepackage{seqsplit}
\let\oldseqsplit\seqsplit% Copy \seqsplit
\renewcommand{\seqsplit}{% Redefine \seqsplit to...
\expandafter\oldseqsplit\expandafter}% ...expand its argument before processing it
\begin{document}
\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}
\seqsplit{\ReferencedIDs}
\seqsplit{,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}
\end{document}
답변2
사용해도 괜찮다면 다음을 사용하세요 expl3
.
\usepackage{xparse}
\ExplSyntaxOn
\cs_set_eq:NN \faheem_seqsplit:n \seqsplit
\cs_generate_variant:Nn \faheem_seqsplit:n { o }
\NewDocumentCommand{\printIDs}{m}
{
\faheem_seqsplit:o { #1 }
}
\ExplSyntaxOff
그런 다음 \printIDs{\ReferencedIDs}
그렇게 할 것입니다.
이는 Werner의 코드와 크게 다르지 않지만 사용자에게 기술적인 세부 사항을 숨깁니다. 한 줄씩 살펴보자.
`\seqsplit에서 "내부" 함수를 얻습니다.
\cs_set:eq:NN \faheem_seqsplit:n \seqsplit
이런 방식으로 우리는 변형을 정의할 수 있습니다:
\cs_generate_variant:Nn \faheem_seqsplit:n { o }
이 변형은 처럼 작동 \faheem_seqsplit:n
하지만 실행하기 전에 전달된 인수가 한 번 확장됩니다. 마지막으로
\NewDocumentCommand{\printIDs}{m}{\faheem_seqsplit:o{#1}}
변형을 사용하는 사용자 수준 명령을 정의합니다.
내가 말했듯이 이것은 대부분 다음을 수행하는 것과 동일합니다.
\newcommand{\printIDs}[1]{\expandafter\seqsplit\expandafter{#1}}
하지만 이는 "더 추상적"이며 올바른 확장 체인을 추측할 필요가 없습니다.