
Estou escrevendo um modelo LaTeX e estou quase terminando (!!!), mas estou tendo muita dificuldade em entender o comportamento xkeyval
de \presetkeys
. Consegui definir alguns padrões, mas quando se trata de configurá-los \theauthor
e \thetitle
as chaves são definidas como strings vazias, mesmo que sejam definidas após os comandos \author{}
e .\title{}
Aqui está um mwe:
meu_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}
O que espero é que a chamada básica MWECommand
faça o mesmo que a argumentada, mas em vez disso as \theauthor
strings \thetitle
e sejam impressas apenas na segunda. O que estou fazendo de errado?
Responder1
Você está definindo explicitamente o valor padrão, que será usado se você passar as chaves author
ou title
sem um valor, para ficar vazio com
\define@key{my_mwe}{author}[]{\def\my_mwe@author{#1}}
O valor especificado entre colchetes seria o padrão (que neste caso está vazio). A \presetkeys
macro define um valor inicial, que é um valor que será usado se a chave não for definida explicitamente.
Agora na sua macro você coloca author, title, #1
o seu \setkeys
, então o padrão e não os valores iniciais serão usados. E os padrões estão vazios.
Então a maneira mais fácil seria remover author, title
da sua definição (também removi a linha vazia na definição, pois duvido que você queira ter um \par
aí, qual seria o resultado):
\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
}