Expl3와 xkeyval를 섞어쓰는 경우에만 문제가 생깁니다. xkeyval을 사용하는 모든 매크로와 호환되지 않는다는 게 아니라, 옵션 정의 또는 글로벌 설정 따위를 하는 경우에만 오류가 발생합니다. 그러니까 \ExplSyntaxOn ... \ExplSyntaxOff 사이에 \define@key를 사용한다거나 polyglossia의 \setmainlanguage 같은 것을 쓰면 안됩니다. 얼핏 생각하면 심각한 문제일 것 같지만, 전혀 그렇지 않습니다.
내가 만든 클래스나 스타일에서 xkeyval을 쓰지 않으면 되고, \setmainlanguage 같은 게 필요하면 \ExplSyntax 밖에서 쓰면 됩니다. xkeyval을 써야 할 이유도 없습니다. expl3을 대체할 수 있는 모든 것들이 있으니 xkeyval을 비롯한 다른 온갖 유틸리티 패키지들이 필요없게 됩니다.
kvoption 쓰지 마시고요. 대신 l3keys2e를 쓰세요.
\keys_define:nn { multilang }
{
lang ...
}
\keys_set:nn {multilang}
{ % 여기에 디폴트 값 넣으세요. }
\ProcessKeysOptions {multilang}
제가 만든 클래스가 도움이 될지 모르겠습니다.
https://github.com/YiHoze/HzGuide/blob/master/hzguide.cls
Expl3와 xkeyval를 섞어쓰는 경우에만 문제가 생깁니다. xkeyval을 사용하는 모든 매크로와 호환되지 않는다는 게 아니라, 옵션 정의 또는 글로벌 설정 따위를 하는 경우에만 오류가 발생합니다. 그러니까 \ExplSyntaxOn ... \ExplSyntaxOff 사이에 \define@key를 사용한다거나 polyglossia의 \setmainlanguage 같은 것을 쓰면 안됩니다. 얼핏 생각하면 심각한 문제일 것 같지만, 전혀 그렇지 않습니다.
내가 만든 클래스나 스타일에서 xkeyval을 쓰지 않으면 되고, \setmainlanguage 같은 게 필요하면 \ExplSyntax 밖에서 쓰면 됩니다. xkeyval을 써야 할 이유도 없습니다. expl3을 대체할 수 있는 모든 것들이 있으니 xkeyval을 비롯한 다른 온갖 유틸리티 패키지들이 필요없게 됩니다.