StringOptions의 공백 및 쉼표(하이퍼참조에서 가능한 경우)

StringOptions의 공백 및 쉼표(하이퍼참조에서 가능한 경우)

옵션과 함께 사용할 수 있는 작은 문서 클래스를 작성하고 싶습니다. 예:

\documentclass[title=a]{xyz}

그러기 위해 나는 다음과 같이 글을 썼다.xyz.cls

\RequirePackage{kvoptions}
\SetupKeyvalOptions{
  family=abc,
  prefix=abc@
}
\DeclareStringOption{title}
\ProcessKeyvalOptions*

그러나 다음과 같은 것을 쓰는 것은 불가능합니다.

\documentclass[title={Riemann surfaces, projective curves and function fields}]{xyz}

이 상황에서 매크로는 \abc@title값을 갖습니다 Riemannsurfaces(즉, 공백이 없고 첫 번째 쉼표 앞 부분만 있음). 나는 이미 -package patch에 대해 -옵션을 시도했습니다 kvoptions.

hyperref이를 올바르게 구현하는 방법이 있습니까( 예: -package 에서 가능함 \usepackage[pdftitle={Riemann surfaces, ...}]{hyperref})?

답변1

클래스 옵션에 공백을 사용하는 것은 기본적으로 latex2e 엔진에서 지원되지 않습니다.깃허브 문제). 해당 문제에 대한 몇 가지 해결 방법이 있지만 모든 클래스에 적용되는 것은 아닙니다. 따라서 일반적으로 다른 클래스를 기반으로 클래스를 작성하므로 자신의 클래스에는 적용되지 않습니다. 일반적으로 말하면 클래스 옵션에 공백을 피해야 합니다(적어도 latex2e의 경우 Latex3에 더 나은 솔루션이 있을 수 있습니다). 그러나 당신이 그것을 주장한다면, 다음에는 최소한 일부 클래스에서 작동하는 세 가지 솔루션이 제공됩니다.

해결 방법 1: 사용pgfopts

.tex 파일:

\documentclass[title={with space and, comma}]{xyz}
\begin{document}
    the Title is \title
\end{document}

xyz.cls 파일:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{xyz}[2020/07/14]
\RequirePackage{pgfopts}

\LoadClass{article}

\pgfkeys{
    /xyz/.cd,
    title/.store in=\xyz@title
}

\ProcessPgfOptions{/xyz}

\renewcommand{\title}{\xyz@title}

이것은 작동하지 않습니다KOMA스크립트(링크된 스레드에 이에 대한 해결 방법이 표시되어 있지만 시도하지는 않았습니다).

해결 방법 2: 사용xkeyval

보다이 스레드최소한의 작업 예를 들어 보겠습니다. 연결된 스레드에 표시된 것처럼 패키지 반대쪽에 hyperref값 앞뒤에 하나의 중괄호 대신 두 개가 필요합니다. 이는 KOMAScript에서도 작동하지 않습니다(솔루션 1과 같은 이유로).

해결 방법 3: kvoptions-patch.tex 파일의 \documentclass 앞에 로드

kvoptions-patch파일 에서 작업을 수행하는 방법을 모르지만 어떤 이유로 파일 내부의 명령 .cls전에 로드될 때 문제가 없이 작동합니다 .\documentclass.tex

.tex 파일:

\RequirePackage{kvoptions-patch}
\documentclass[title=with space]{xyz}
\begin{document}
    the Title is: \printTitle
\end{document}

xyz.cls 파일:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{xyz}[2020/07/14]
\RequirePackage{kvoptions}
\LoadClass{article}

\DeclareStringOption[]{title}
\ProcessKeyvalOptions* 

\newcommand{\printTitle}{\xyz@title}

kvoptions이 방법의 또 다른 단점은 \documentclass값 안에 쉼표를 사용할 수 없다는 것입니다(예: 위 예의 제목). 그러나 이 솔루션은 KOMAScript에서도 작동합니다.

관련 정보