.png)
옵션과 함께 사용할 수 있는 작은 문서 클래스를 작성하고 싶습니다. 예:
\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에서도 작동합니다.