ajuda: procurando uma sintaxe de mapa de array (variável) genérica (e elegante) para manter as coisas

ajuda: procurando uma sintaxe de mapa de array (variável) genérica (e elegante) para manter as coisas

Peço desculpas se isso foi discutido em outro lugar, mas se foi, não consegui encontrar.

Sou o autor de um modelo de tese acadêmica para minha universidade, mas definitivamente não sou um especialista em TeX. Neste modelo, faço uso extensivo de arquivos de configuração que usam um mapa de array ad-hoc (auto) definido. Por exemplo:

\arraymay{cover}
\cover{phd}={phd_cover_file.pdf}
\cover{msg}={msc_cover_file.pdf}
\arraymap{margin}
\margin{cover,left}={5cm}
\margin{cover,right}={5cm}
\margin{cover,top}={4cm}
\margin{cover,bottom}={4cm}
\margin{main,left}={3cm}
\margin{main,right}={3cm}
\margin{main,top}={2cm}
\margin{main,bottom}={2cm}

As vírgulas nas teclas são usadas para efeito visual e consideradas como um caractere normal, ou seja, em “ \margin{cover,bottom}={2cm}” a chave é “ cover,bottom”.

Posteriormente, posso acessar os valores como em:

\def\manuscripttype{phd}
The cover file is ``\thecover[\manuscripttype]'' and the margins for the cover are ``\themargin[cover,left], \themargin[cover,right], \themargin[cover,top], and \themargin[cover,bottom].''

vai produzir

The cover file is “phd_cover_file.pdf” and the margins for the cover are “3cm, 3cm, 2cm, and 2cm.”

Existe algum outro pacote (sólido) implementando esta funcionalidade? Caso contrário, existe alguma maneira sólida de implementá-lo (talvez baseado em um dos pacotes KV)? Obrigado.

Responder1

Você pode fazer isso com pgfkeys:

\documentclass{article}
\usepackage[T1]{fontenc}

\usepackage{pgfkeys}

\pgfkeys{
  lourenco/.cd,
  cover/phd/.initial={},
  cover/msc/.initial={},
  margin/cover/left/.initial=0pt,
  margin/cover/right/.initial=0pt,
  margin/cover/top/.initial=0pt,
  margin/cover/bottom/.initial=0pt,
  margin/main/left/.initial=0pt,
  margin/main/right/.initial=0pt,
  margin/main/top/.initial=0pt,
  margin/main/bottom/.initial=0pt,
}

\newcommand{\setlourenco}[1]{\pgfkeys{lourenco/.cd,#1}}
\newcommand{\thecover}[1]{%
  \pgfkeysvalueof{/lourenco/cover/#1}%
}
\newcommand{\themargin}[1]{%
  \pgfkeysvalueof{/lourenco/margin/#1}%
}

%% settings
\setlourenco{
  cover/phd=phd-cover-file.pdf,
  cover/msc=msc-cover-file.pdf,
  margin/cover/left=5cm,
  margin/cover/right=5cm,
  margin/cover/top=4cm,
  margin/cover/bottom=4cm,
  margin/main/left=3cm,
  margin/main/right=3cm,
  margin/main/top=2cm,
  margin/main/bottom=2cm,
}

\def\manuscripttype{phd}

\begin{document}

The cover file is ``\thecover{\manuscripttype}'' and the margins 
for the cover are ``\themargin{cover/left}, \themargin{cover/right},
\themargin{cover/top}, and \themargin{cover/bottom}.''

\end{document}

insira a descrição da imagem aqui

informação relacionada