Vorgabe von xkeyval-Schlüsseln auf \thetitle oder \theauthor

Vorgabe von xkeyval-Schlüsseln auf \thetitle oder \theauthor

Ich schreibe eine LaTeX-Vorlage und bin fast fertig (!!!), aber es fällt mir sehr schwer, xkeyvaldas Verhalten von zu verstehen. Ich habe es geschafft, einige Standardwerte festzulegen, aber wenn ich sie auf und \presetkeyssetze, werden die Schlüssel auf leere Zeichenfolgen gesetzt, obwohl sie nach den Befehlen und gesetzt werden .\theauthor\thetitle\author{}\title{}

Hier ist ein MWE:

my_mwe.cls

\RequirePackage{expl3}

\ProvidesExplClass{my_mwe}
                  {2020/09/08}
                  {1.0}
                  {Minimal working example}

\LoadClass{report}

\RequirePackage{xkeyval}
\RequirePackage{xparse}

\AtBeginDocument{%
    \define@key{my_mwe} {author} [] {\def\my_mwe@author{#1}}
    \define@key{my_mwe} {title}  [] {\def\my_mwe@title{#1}}
    \presetkeys{my_mwe} {author}    {author={\theauthor}}
    \presetkeys{my_mwe} {title}     {title=\thetitle}
}

\NewDocumentCommand{\MWECommand}{O{}}{%
    \setkeys{my_mwe}{author, title, #1}%

    Here's~the~output:\\
    \my_mwe@title \\
    \my_mwe@author
}

mwe.tex

\documentclass[10pt, a4paper]{my_mwe}

\usepackage{titling}
    \author{The poor crying author}
    \title{A sad mwe}

\begin{document}

\MWECommand%

\MWECommand[title=\thetitle, author=\theauthor]

\end{document}

Ich erwarte, dass der grundlegende Aufruf MWECommanddasselbe bewirkt wie der argumentierte Aufruf, aber stattdessen werden die \theauthorund \thetitle-Zeichenfolgen nur im zweiten Aufruf gedruckt. Was mache ich falsch?

Antwort1

Sie legen den Standardwert, der verwendet wird, wenn Sie die Schlüssel authoroder titleohne Wert übergeben, explizit auf leer fest mit

\define@key{my_mwe}{author}[]{\def\my_mwe@author{#1}}

Der in Klammern angegebene Wert wäre der Standardwert (der in diesem Fall leer ist). Das \presetkeysMakro legt einen Anfangswert fest, d. h. einen Wert, der verwendet wird, wenn der Schlüssel überhaupt nicht explizit festgelegt wird.

Jetzt geben Sie in Ihrem Makro author, title, #1Ihr ein \setkeys, sodass die Standardwerte und nicht die Anfangswerte verwendet werden. Und die Standardwerte sind leer.

Der einfachste Weg wäre also, author, titleaus Ihrer Definition zu entfernen (ich habe auch die leere Zeile in der Definition entfernt, da ich bezweifle, dass Sie dort ein haben möchten \par, was das Ergebnis wäre):

\RequirePackage{expl3}

\ProvidesExplClass{my_mwe}
                  {2020/09/08}
                  {1.0}
                  {Minimal working example}

\LoadClass{report}

\RequirePackage{xkeyval}
\RequirePackage{xparse}

\AtBeginDocument{%
    \define@key{my_mwe} {author} [] {\def\my_mwe@author{#1}}
    \define@key{my_mwe} {title}  [] {\def\my_mwe@title{#1}}
    \presetkeys{my_mwe} {author}    {author={\theauthor}}
    \presetkeys{my_mwe} {title}     {title=\thetitle}
}

\NewDocumentCommand{\MWECommand}{O{}}{%
    \setkeys{my_mwe}{#1}%
    Here's~the~output:\\
    \my_mwe@title \\
    \my_mwe@author
}

verwandte Informationen