저는 biocon
학문적 작업에서 식물을 정리하기 위해 패키지를 사용하고 있습니다. 예를 들어 가족과 같이 텍스트에서 필요에 따라 새로운 분류군을 만들었습니다. 작업의 마지막 장에는 식물의 일부 정보를 나열하는 큰 표(약 300개 항목)가 있습니다(모든 새 분류군에 포함되어 있음).
이러한 테이블은 가족별로 알파벳순으로 구성됩니다. 따라서 어떤 경우에는 첫 번째 열에 반복되는 가족이 있습니다. 이런 일이 발생하면 패밀리의 첫 번째 항목만 인쇄해야 하고 나머지 항목은 비어 있어야 합니다.
해결 방법을 만들었지만 와 함께 작동하지 않습니다 biocon
. 다음 MWE에서는 단순화를 위해 표를 생략하고 대신 일반 텍스트로 동일한 구조를 사용합니다.
\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}
\printOnlyFirstOccurence
위의 예에서 나는 식물의 학명이 성을 동반할지 여부를 결정하기 위해 정의를 사용합니다 . 나는 패밀리의 첫 번째 항목(순서대로)만 표시하고 싶습니다(표와 동일하지만 여기서는 일반 텍스트로 예제가 실패합니다).
두 번째 예제의 출력은 다음과 같습니다.
새로운 분류군 테스트: Myrtaceae. 동일한 식물은 분명히 동일한 과를 갖게 됩니다. 따라서:시디움 카틀리아눔(금상화과) 및시디움 카틀리아눔; 그러나 이 두 가지는 동일한 계열을 갖고 있지만 중복해서 인쇄됩니다.강황 롱가(징기베리과) 및징기버 오피시날레(징기베리과);
그러나 원하는 출력은 다음과 같습니다.
새로운 분류군 테스트: Myrtaceae. 동일한 식물은 분명히 동일한 과를 갖게 됩니다. 따라서:시디움 카틀리아눔(금상화과) 및시디움 카틀리아눔; 그러나 이 두 가지는 동일한 계열을 갖고 있지만 중복해서 인쇄됩니다.강황 롱가(징기베리과) 및징기버 오피시날레;
이견있는 사람?
답변1
\plantF
또한 조판된 마지막 계열과 동일하지 않은 경우 계열 이름을 자동으로 추가하는 명령을 제공하여 구문을 단순화할 수도 있습니다 .
아이디어는 귀하와 동일하지만 내부를 자세히 조사해야 합니다. 특히 의 성이 araca
에 저장됩니다 \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}
마지막 단락에서 패밀리가 로 인해 다시 인쇄된다는 점에 유의하세요 \resetfamily
.
답변2
나는 의도적으로 다른 답변을 먼저 남겨두고 내 답변이 맨 위에 나열되도록 했습니다 ;-)
\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}
바이오콘 내부를 사용합니다.
답변3
이것은 작동하지 않습니다. \plant[Family]{acafrao}
매우 복잡한 명령이고 확장이 절대 불가능하며 ifthenelse에서는 사용할 수 없습니다.
다음과 같이 시도해 볼 수 있지만 패키지가 무엇인지 모르기 때문에 작동할 것이라고 추측할 뿐입니다.
\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}