.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
(つまり、スペースなし、最初のコンマの前の部分のみ) が含まれます。 -packagepatch
の -option はすでに試しましたkvoptions
。
hyperref
これを適切に実装する方法はありますか (例: パッケージでは可能です\usepackage[pdftitle={Riemann surfaces, ...}]{hyperref}
)?
答え1
クラスオプションでスペースを使用することは、基本的にlatex2eエンジンではサポートされていません(githubの問題)。この問題には回避策がいくつかありますが、すべてのクラスで機能するわけではありません (したがって、通常は別のクラスに基づいてクラスを作成するため、独自のクラスでは機能しません)。一般的に言えば、クラス オプションでスペースを避ける必要があります (少なくとも latex2e では、Latex3 にはもっと良い解決策があるかもしれません)。ただし、どうしても必要な場合は、少なくとも一部のクラスで機能する 3 つの解決策を次に示します。
解決策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
パッケージとは逆に、値の前後に中括弧を 1 つではなく 2 つ付ける必要があります。これは、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
この方法のもう 1 つの欠点は、クラス ユーザーにとって、パッケージをロードする前にそれをロードする必要があるため混乱を招くという明らかな欠点に加えて、\documentclass
値内でコンマを使用できないことです (上記の例のタイトル内など)。ただし、このソリューションは KOMAScript でも機能します。