Estou utilizando o biocon
pacote para organizar plantas em um trabalho acadêmico. Criei novos táxons conforme necessário no texto, por exemplo, a família. No capítulo final do trabalho, tenho uma grande tabela (cerca de 300 entradas) listando algumas informações das plantas (que tenho em todos os novos táxons).
Essa tabela é organizada em ordem alfabética pela família. Assim, em alguns casos tenho famílias repetidas na primeira coluna. Quando isso acontecer, preciso imprimir apenas a primeira ocorrência da família, e as demais deverão ficar em branco.
Criei uma solução alternativa, mas ela não funciona junto com o biocon
. Para simplificação no seguinte MWE omiti a tabela e em vez disso utilizo a mesma estrutura em texto simples:
\documentclass{article}
\usepackage{biocon}
\usepackage{ifthen}
\begin{document}
\newtaxon{family}
\newtaxastyle{Family}{\taxon{!family!}}
\newplant{araca}{genus=Psidium, epithet=cattleianum, author=Sabine, family=Myrtaceae}
\newplant{acafrao}{genus=Curcuma, epithet=longa, author=L., family=Zingiberaceae}
\newplant{gengibre}{genus=Zingiber, epithet=officinale, author=Roscoe, family=Zingiberaceae}
Testing the new taxon: \plant[Family]{araca}.
\newcommand{\myval}{}
\newcommand{\setMyVal}[1]{\gdef\myval{#1}}
\newcommand{\printOnlyFirstOccurence}[1]{
\ifthenelse{\equal{\myval}{#1}}
{}
{\setMyVal{#1}(\myval)}%else
}
The same plant obviously would have the same family, thus:
\plant[f]{araca}\printOnlyFirstOccurence{\plant[Family]{araca}} and \plant[f]{araca}\printOnlyFirstOccurence{\plant[Family]{araca}};
However, these two have the same family, and yet they are printed duplicated:
\plant[f]{acafrao}\printOnlyFirstOccurence{\plant[Family]{acafrao}} and \plant[f]{gengibre}\printOnlyFirstOccurence{\plant[Family]{gengibre}};
\end{document}
No exemplo acima, utilizo a definição de \printOnlyFirstOccurence
para decidir se o nome científico de uma planta seria acompanhado ou não do seu sobrenome. Quero mostrar apenas a primeira ocorrência (em sequência) de uma família (é igual à tabela, mas aqui meu exemplo falha em texto simples).
A saída do segundo exemplo é:
Testando o novo táxon: Myrtaceae. A mesma planta obviamente teria a mesma família, assim:Psidium Cattleianum(Myrtaceae) ePsidium Cattleianum; Porém, esses dois têm a mesma família e, ainda assim, são impressos duplicados:Cúrcuma longa(Zingiberáceas) eZingiber oficial(Zingiberáceas);
Mas a saída desejada é:
Testando o novo táxon: Myrtaceae. A mesma planta obviamente teria a mesma família, assim:Psidium Cattleianum(Myrtaceae) ePsidium Cattleianum; Porém, esses dois têm a mesma família e, ainda assim, são impressos duplicados:Cúrcuma longa(Zingiberáceas) eZingiber oficial;
Alguma ideia?
Responder1
Também podemos simplificar a sintaxe, fornecendo um comando \plantF
que adiciona automaticamente o nome da família, desde que não seja igual à última família que foi composta.
A ideia é a mesma que a sua, mas precisamos nos aprofundar no interior; em particular, o nome da família araca
é armazenado em formato \Paraca@family
.
\documentclass{article}
\usepackage{biocon}
\usepackage{pdftexcmds}
\makeatletter
\newcommand{\opt@family}[1]{%
\ifnum\pdf@strcmp{\csname P#1@family\endcsname}{\plantfamily@last}=\z@
\else
\protected@xdef\plantfamily@last{\csname P#1@family\endcsname}%
\ (\plant[Family]{#1})%
\fi
}
\newcommand{\resetfamily}{\gdef\plantfamily@last{}} % reinitialize
\resetfamily % initialize
% user command
\newcommand{\plantF}[2][]{%
\plant[#1]{#2}\opt@family{#2}%
}
\makeatother
\begin{document}
\newtaxon{family}
\newtaxastyle{Family}{\taxon{!family!}}
\newplant{araca}{genus=Psidium, epithet=cattleianum, author=Sabine, family=Myrtaceae}
\newplant{acafrao}{genus=Curcuma, epithet=longa, author=L., family=Zingiberaceae}
\newplant{gengibre}{genus=Zingiber, epithet=officinale, author=Roscoe, family=Zingiberaceae}
Testing the new taxon: \plant[Family]{araca}.
The same plant obviously would have the same family, thus:
\plantF[f]{araca} and \plantF[f]{araca}.
However, these two have the same family:
\plantF[f]{acafrao} and \plantF[f]{gengibre}.
The same plant obviously would have the same family, thus:
\plantF[f]{araca} and \plantF[f]{araca}.
\resetfamily
The same plant obviously would have the same family, thus:
\plantF[f]{araca} and \plantF[f]{araca}.
\end{document}
Observe que no último parágrafo a família é impressa novamente por causa de \resetfamily
.
Responder2
De propósito, deixei outras respostas primeiro, para que a minha fosse listada no topo ;-)
\documentclass{article}
\usepackage{biocon}
%\usepackage{ifthen}% already loaded by biocon
\newcommand*\OnlyFirstPlantFamily [1]{%
\expandafter\ifx\csname OnlyFirst@\csname P#1@family\endcsname\endcsname
\relax
\space(\plant[Family]{#1})%
\global\expandafter
\let\csname OnlyFirst@\csname P#1@family\endcsname\endcsname \empty
\fi
}
\begin{document}
\newtaxon{family}
\newtaxastyle{Family}{\taxon{!family!}}
\newplant{araca}{genus=Psidium, epithet=cattleianum, author=Sabine, family=Myrtaceae}
\newplant{acafrao}{genus=Curcuma, epithet=longa, author=L., family=Zingiberaceae}
\newplant{gengibre}{genus=Zingiber, epithet=officinale, author=Roscoe, family=Zingiberaceae}
Testing the new taxon: \plant[Family]{araca}.
The same plant obviously would have the same family, thus:
\plant[f]{araca}\OnlyFirstPlantFamily{araca} and \plant[f]{araca}\OnlyFirstPlantFamily{araca};
However, these two have the same family, and yet they are printed duplicated:
\plant[f]{acafrao}\OnlyFirstPlantFamily{acafrao} and
\plant[f]{gengibre}\OnlyFirstPlantFamily{gengibre};
\end{document}
Usa componentes internos do biocon.
Responder3
Isso não funcionará. \plant[Family]{acafrao}
é um comando muito complicado e absolutamente não expansível e você não pode usá-lo no ifthenelse.
Você pode tentar algo assim, mas não conheço o pacote e só estou supondo que funcionará:
\documentclass{article}
\usepackage{biocon}
\usepackage{ifthen}
\begin{document}
\newtaxon{family}
\newtaxastyle{Family}{\taxon{!family!}}
\newplant{araca}{genus=Psidium, epithet=cattleianum, author=Sabine, family=Myrtaceae}
\newplant{acafrao}{genus=Curcuma, epithet=longa, author=L., family=Zingiberaceae}
\tracingmacros=1
\newplant{gengibre}{genus=Zingiber, epithet=officinale, author=Roscoe, family=Zingiberaceae}
\tracingmacros=0
Testing the new taxon: \plant[Family]{araca}.
\makeatletter
\newcommand\Lastfamily{}
\def\Lastfamily{}
\newcommand{\printOnlyFirstOccurence}[1]{%
\edef\Newfamily{\csname \curr@ntid family\endcsname}%
\ifthenelse{\equal{\Lastfamily}{\Newfamily}}
{}
{ #1}%else
\let\Lastfamily\Newfamily
}
\makeatother
The same plant obviously would have the same family, thus:
\plant[f]{araca}\printOnlyFirstOccurence{\plant[Family]{araca}} and \plant[f]{araca}\printOnlyFirstOccurence{\plant[Family]{araca}};
However, these two have the same family, and yet they are printed duplicated:
\plant[f]{acafrao}\printOnlyFirstOccurence{\plant[Family]{acafrao}} and \plant[f]{gengibre}\printOnlyFirstOccurence{\plant[Family]{gengibre}};
\end{document}