
Eu defino duas novas macros e comandos para alterar seu conteúdo com os seguintes comandos em um .cls
arquivo.
\newcommand{\@mymacroa}{}
\newcommand{\mymacroa}[1]{\renewcommand{\@mymacroa}{#1}}
\newcommand{\@mymacrob}{}
\newcommand{\mymacrob}[1]{\renewcommand{\@mymacrob}{#1}}
Agora quero testar se um (ou ambos) deles não está vazio (ou seja, foi modificado do valor padrão) e se um deles tiver conteúdo, imprima seus valores. Minhas tentativas anteriores usando \ifthenelse
, \@ifnotmtarg
e TeX simples \if
não tiveram sucesso.
Em pseudocódigo, o que desejo alcançar é:
\@ifnotmtarg{\@mymacroa}\or\@ifnotmtarg{\@mymacrob}
do {print some text and the macros which are non-empty}
Responder1
É difícil dizer a melhor forma de fazer isso sem saber de que outras formas esses dados serão utilizados no pacote, principalmente porque não estou familiarizado com oárvore genealógicapacote.
Com esta ressalva, uma maneira de fazer isso é definir comandos, digamos \DateOfBirth
e \PlaceOfBirth
, para definir a data e o local de nascimento respectivamente, que podem ser salvos em macros como \@dateofbirth
e \@placeofbirth
. Ao definir os valores padrão de ambas as macros, \relax
agora você pode testar para ver se alguma delas foi redefinida definindo um novo booleano, digamos \ifHaveDateOrPlace
, e usando algo como:
% include the date and/or place of birth if available
\HaveDateOrPlacefalse% reset date and place boolean
\if\@dateofbirth\relax\else\HaveDateOrPlacetrue\fi
\if\@placeofbirth\relax\else\HaveDateOrPlacetrue\fi
\ifHaveDateOrPlace\gtrsymBorn \@placeofbirth \@dateofbirth \fi
Claro, você também precisaria de macros para obter o nome do arquivo de imagem e provavelmente o nome da pessoa, mas talvez elas já tenham sido fornecidas porárvore genealógica. Com isso implementado, você poderia definir uma macro \MugShot
para que o código
\MugShot
\PlaceOfBirth{Mars}
\MugShot
\DateOfBirth{Tuesday}
\MugShot
\PlaceOfBirth{Venus}
\DateOfBirth{Wednesday}
\MugShot
produziria:
(Minha imagem padrão é um ponto de interrogação.)
O código completo para este MWE consiste no arquivo latex:
\documentclass{myclass}
\begin{document}
\MugShot
\PlaceOfBirth{Mars}
\MugShot
\DateOfBirth{Tuesday}
\MugShot
\PlaceOfBirth{Venus}
\DateOfBirth{Wednesday}
\MugShot
\end{document}
junto com o arquivo de classe myclass.cls
, que contém todo o conteúdo:
\LoadClass[12pt]{amsart}
\RequirePackage{genealogytree}
\RequirePackage{graphicx}
% boolean to keep track of place and date of birth
\newif\ifHaveDateOrPlace
% place of birth
\providecommand\@placeofbirth{\relax}
\newcommand\PlaceOfBirth[1]{\renewcommand\@placeofbirth{\space#1}}
% date of birth
\providecommand\@dateofbirth{\relax}
\newcommand\DateOfBirth[1]{\renewcommand\@dateofbirth{\space#1}}
\providecommand\@personpicture{{\Huge?}}
\newcommand\Picture[2][]{\edef\@personpicture{\noexpand\includegraphics[width=30mm,#1]{#2}}}
% reset the people data
\newcommand\ResetData{%
\renewcommand\@placeofbirth{\relax}%
\renewcommand\@dateofbirth{\relax}%
}
\newcommand\MugShot{%
\begin{tabular}{c}
\@personpicture\\
% include the date and/or place of birth if available
\HaveDateOrPlacefalse% reset date and place boolean
\if\@dateofbirth\relax\else\HaveDateOrPlacetrue\fi
\if\@placeofbirth\relax\else\HaveDateOrPlacetrue\fi
\ifHaveDateOrPlace\gtrsymBorn \@placeofbirth \@dateofbirth \fi
\end{tabular}%
\ResetData
}
\endinput
Se esses dados forem usados apenas uma vez, então uma abordagem melhor seria provavelmente definir uma única macro para imprimir a foto, juntamente com os dados associados, ou usar algo comoteclas pgfpara que você possa usar uma sintaxe de valor-chave para especificar tudo.