문자열이 직접 인수로 제공되지 않으면 seqsplit이 작동하지 않습니다.

문자열이 직접 인수로 제공되지 않으면 seqsplit이 작동하지 않습니다.

다음 예를 고려하십시오. 그렇게 하면 \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}}

하지만 이는 "더 추상적"이며 올바른 확장 체인을 추측할 필요가 없습니다.

관련 정보