% \iffalse meta-comment
%
% Copyright (C) 2015 by Steffen Banhardt
% -----------------------------------
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in:
%
% http://www.latex-project.org/lppl.txt
%
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% \fi
%
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{gender}
%<package>[2015/03/07 v1.0 First official release]
%
%<*driver>
\documentclass{ltxdoc}
\usepackage[english,ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{gender}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
\DocInput{gender.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{0}
%
% \changes{v1.0}{ 2015/03/07 }{First official release}
%
% \GetFileInfo{gender.sty}
%
% \DoNotIndex{\iffem, \ifuc}
%
% \title{The \textsf{gender} package\thanks{This document
% corresponds to \textsf{gender}~\fileversion,
% dated \filedate.}}
% \author{ Steffen Banhardt \\ \texttt{ latex-gender@steffenbanhardt.de}}
%
% \maketitle
%
% \begin{abstract}
% Many languages -- like German or French -- use masculine and feminine grammatical genders. There are many ideas how to promote gender neutrality in those languages. This package uses alternately masculine and feminine forms.
%
% It is also possible to use just one form out of a template.
% \end{abstract}
%
% \section{Einführung}
%
% \subsection{Ziel}
% 
% Das Ziel dieses Paketes ist es, eine Möglichkeit zu einer geschlechtergerechten Sprache zu implementieren. Hierzu werden jeweils \gender{die weibliche(und)die männliche} Form angegeben und in abwechselnder Reihenfolge \gender{die weibliche(und)die männliche} Form ausgegeben.
% 
% \section{Verwendung}
% 
% \subsection{Aufruf}
%
% Zum Aufruf wird das Paket geladen mit
%
% |\usepackage{gender}|
%
% Dabei sind die folgenden Abschnitt vorgestellten Paketoptionen optional möglich.
%
% \subsection{Optionen}
%
% Das Paket nutzt für die Optionen die Syntax |key=value| des Pakets |xkeyval|, von dem es abhängt.
%
% \DescribeMacro{konj =}
% |Konjunktion|
%
% Das optionale Argument \oarg{konj=} nimmt eine Konjunktion als Standardverbindung für die Formen an, voreingestellt ist "`und"'.
%
% \DescribeMacro{single =}
% |true, false| 
%
% Das optionale Argument \oarg{single=} nimmt die Werte |true| oder |false| an, voreingestellt ist |false|. Wird es auf |true| gesetzt, dann werden nicht die weibliche und die männliche Form ausgegeben, sondern abwechselnd jeweils nur eine Form.
%
% \DescribeMacro{malefirst =}
% |true, false| 
%
% Das optionale Argument \oarg{malefirst=} nimmt die Werte |true| oder |false| an, voreingestellt ist |false|. Wird es auf |true| gesetzt, beginnt der erste Aufruf von |\gender| nicht wie üblich mit einer weiblichen, sondern mit einer männlichen Form.
%
% \DescribeMacro{fixmale =}
% |true, false| 
%
% Das optionale Argument \oarg{fixmale=} nimmt die Werte |true| oder |false| an, voreingestellt ist |true|. Ist es auf |true| gesetzt, wird bei |\genderfix| die männliche, ansonsten die weibliche Form ausgegeben.
%
%
% \subsection{Allgemeine Makros}
%
% Das Paket stellt die folgenden Makros bereit:
%
% \DescribeMacro{\gender}
% \DescribeMacro{\Gender}
% benötigt als Argument \gender{eine weibliche(und)eine männliche} Form, die durch eine Konjuktion in Klammern getrennt werden:
%
% |\gender|\marg{Frau(konj)Mann}
%
% Bei der Version in Großschreibung wird das erste Wort großgeschrieben. Aus |\Gender|\marg{eine Frau(oder)ein Mann} wird "`\Gender{eine Frau(oder)ein Mann}"'.
%
%
% \DescribeMacro{\gend}
% \DescribeMacro{\Gend}
% wird aufgerufen wie |\gender| bzw.\ |\Gender|. Es werden jedoch nicht beide, sondern nur eine Form ausgegeben, also abwechselnd entweder \gender{die weibliche(oder)die männliche}.
%
% \DescribeMacro{\genderb}
% \DescribeMacro{\Genderb}
% wird aufgerufen wie |\gender| bzw.\ |\Gender|. Es werden jedoch immer beide Formen ausgegeben, auch wenn die Klassenoption \meta{single} gesetzt ist.
%
% \DescribeMacro{\keep}
% verändert die Reihenfolge der \gender{männlichen(und)weiblichen} Formen: es wird die gleiche Reihenfolge benutzt wie beim vorherigen Aufruf. Dies ist besonders mit gesetzter Klassenoption \meta{single} bzw.\ |\gend| und |\Gend| hilfreich:
% 
% |\Gend{sie()er}| putzt |\keep||\gend{ihre()seine}| Nase.
%
% Dies ergibt\\\emph{\Gend{sie()er} putzt \keep\gend{ihre()seine} Nase.}\\anstatt des missverständlichen:\\\keep\emph{\Gend{sie()er} putzt \gend{ihre()seine} Nase.}
%
% \DescribeMacro{\genderk}
% \DescribeMacro{\Genderk}
% \DescribeMacro{\gendk}
% \DescribeMacro{\Gendk}
% \DescribeMacro{\genderbk}
% \DescribeMacro{\Genderbk}
% die Formen mit angehängtem |k| verhalten sich wie die Formen ohne k mit vorangestelltem |\keep|. Es wird also die Reihenfolge der vorherigen Form beibehalten.
% 
% \vspace{8ex}
% \subsection{Kurzformen}
%
% \DescribeMacro{\gnd}
% ist eine Kurzform für Worte, bei denen die weibliche Form durch ein angehängtes "~in gebildet wird. Hierzu muss nur die männliche Form angegeben werden. Als optionales Argument kann eine Konjunktion übergeben werden: 
%
% |\gnd[bzw.]{Fahrer}| wird zu \emph{\gnd[bzw.]{Fahrer}} erweitert.
%
% \DescribeMacro{\gndpl}
% ist die Pluralform zu |\gnd|, für die weibliche Form wird "~innen angehängt.
%
% \subsection{Pronomen}
%
% Neben den beschriebenen Makros stehen auch noch Kurzformen für die Pronomina \sieer[und]{} in allen vier Fällen bereit. Auch hier kann als optionales Argument eine Konjunktion übergeben werden: |\ersie|\oarg{Konjunktion}|{}| Für diese Makros ist es unerheblich, ob sie als |\ersie{}| oder |\sieer{}| aufgerufen werden. Für den Satzanfang stehen jeweils die Makros |\Sieer{}| bzw. |\Ersie{}| zur Verfügung.
% 
% \begin{tabular}{lcccc}
%  & \multicolumn{2}{c}{Kleinschreibung} & \multicolumn{2}{c}{Großschreibung}  \\ 
% \hline 
% Nominativ & |\sieer{}| & |\ersie{}| & |\Sieer{}| & |\Ersie{}| \\ 
% Genitiv & |\ihrsein{}| & |\seinihr{}| & |\Ihrsein{}| & |\Seinihr{}| \\ 
% & |\ihreseine{}| & |\seineihre{}| & |\Ihreseine{}| & |\Seineihre{}| \\ 
% Dativ & |\ihrihm{}| & |\ihmihr{}| & |\Ihrihm{}| & |\Ihmihr{}| \\ 
% Akkusativ & |\sieihn{}| & |\ihnsie{}| & |\Sieihn{}| & |\Ihnsie{}| \\ 
% \end{tabular}  
%
% \subsection{Feste Formen mit genderfix}
%
% Neben den beschriebenen Formen, die abwechselnd unterschiedliche Formen ausgeben, beinhaltet das Paket die Möglichkeit eine einzelne, feste Form auszugeben. Die ist für Formulierungen in Vorlagen hilfreich, die an unterschiedliche Geschlechter angepasst werden müssen:
%
% \DescribeMacro{\genderfix}
%
% |Ich gelobe als \genderfix{Vorsitzende()Vorsitzender}|\ldots
%
% \emph{Ich gelobe als \genderfix{Vorsitzende()Vorsitzender}\ldots}
%
% Dabei müssen die weibliche und die männliche wie bei den Formen von |\gender| angegeben werden. Die Option \oarg{malefix=} legt hierbei fest, ob die männliche (|true|, Vorgabe) oder die weibliche (|false|) Form verwendet wird.
%
% \section{Implementierung}
%
% \subsection{Das \LaTeX-Dokument "`\texttt{gender.sty}"'}
%
% Das Paket benötigt |xkeyval| für die Klassenoptionen.
%    \begin{macrocode}
\RequirePackage{xkeyval}
%
% Wird konj aufgerufen wird gndr@konj auf 'Wert', ansonsten auf 'und' gesetzt
\DeclareOptionX[GN]<gndr>{konj}[und]{\def\gndr@konj{#1}\PackageInfo{GENDER}{Setting 'gndr@konj' to '#1'}}
%
% Boolean 'single'
\define@boolkey+[GN]{gndr}{single}[true]%
    {\PackageInfo{GENDER}{Setting boolean 'single' to '#1'}}
    {\PackageWarning{GENDER}{Value #1 for 'single' ignored}}
%Setzt GN@gndr@single wenn es nicht aufgerufen wurde
\presetkeys[GN]{gndr}{single=false}{}
%
\define@boolkey+[GN]{gndr}{malefirst}[true]%
    {\PackageInfo{GENDER}{Setting boolean 'malefirst' to '#1'}}
    {\PackageWarning{GENDER}{Value #1 for 'malefirst' ignored}}
\presetkeys[GN]{gndr}{malefirst=false}{}
%
\define@boolkey+[GN]{gndr}{fixmale}[true]%
    {\PackageInfo{GENDER}{Setting boolean 'fixmale' to '#1'}}
    {\PackageWarning{GENDER}{Value #1 for 'fixmale' ignored}}
\presetkeys[GN]{gndr}{fixmale=true}{}
%
\DeclareOptionX*{\PackageWarning{GENDER}{Unknown Option '\CurrentOption'}}
\ProcessOptionsX[GN]<gndr>\relax
%
%-----------------------------
%
% Wurde konj nicht aufgerufen, wird es nun auf 'und' gesetzt
\@ifundefined{gndr@konj}{\def\gndr@konj{und}\PackageInfo{GENDER}{Setting 'gndr@konj' to 'und'}}{\relax}%
%
%
\newif\iffem\femtrue%female vorne
\newif\ifuc\uctrue%uppercase
\newif\iffixmale\fixmalefalse
\ifGN@gndr@malefirst\global\femfalse\fi
\ifGN@gndr@fixmale\global\fixmaletrue\fi
%
\def\keep{\iffem\global\femfalse\else\global\femtrue\fi}%
%
\def\gender#1{\global\ucfalse\ifGN@gndr@single\@gend#1\@nil\else\@gender#1\@nil\fi}%
\def\Gender#1{\global\uctrue\ifGN@gndr@single\@gend#1\@nil\else\@gender#1\@nil\fi}%
\def\gend#1{\global\ucfalse\@gend#1\@nil}%
\def\Gend#1{\global\uctrue\@gend#1\@nil}%
%Version mit b -- es werden immer beide Formen genommen, auch bei single=true
\def\genderb#1{\global\ucfalse\@gender#1\@nil}%
\def\Genderb#1{\global\uctrue\@gender#1\@nil}%
%Versionen mit k -- die Form wird behalten
\def\genderk#1{\keep\global\ucfalse\ifGN@gndr@single\@gend#1\@nil\else\@gender#1\@nil\fi}%
\def\Genderk#1{\keep\global\uctrue\ifGN@gndr@single\@gend#1\@nil\else\@gender#1\@nil\fi}%
\def\gendk#1{\keep\global\ucfalse\@gend#1\@nil}%
\def\Gendk#1{\keep\global\uctrue\@gend#1\@nil}%
\def\genderbk#1{\keep\global\ucfalse\@gender#1\@nil}%
\def\Genderbk#1{\keep\global\uctrue\@gender#1\@nil}%
%
\def\genderfix#1{\global\ucfalse\@genderfix#1\@nil}%
\def\Genderfix#1{\global\uctrue\@genderfix#1\@nil}%
%
\def\@gender#1(#2)#3\@nil{%
    \if\relax\detokenize{#2}\relax%
    \def\gndr@ko{\gndr@konj}%
    \else\def\gndr@ko{#2}%
    \fi%
    \iffem%
	\ifuc\MakeUppercase#1 \else#1 \fi\gndr@ko{} #3%
	\global\femfalse%
    \else%
	\ifuc\MakeUppercase#3 \else#3 \fi\gndr@ko{} #1%
	\global\femtrue%
    \fi%
}
%
\def\@gend#1(#2)#3\@nil{%
    \iffem%
	\ifuc\MakeUppercase#1\else#1\fi%
	\global\femfalse%
    \else%
	\ifuc\MakeUppercase#3\else#3\fi%
	\global\femtrue%
    \fi%
}
%
\def\@genderfix#1(#2)#3\@nil{%
    \iffixmale%
	\ifuc\MakeUppercase#3\else#3\fi%
    \else%
	\ifuc\MakeUppercase#1\else#1\fi%
    \fi%
}
%
% Weitere Formen
% Dürfen nicht die @Versionen aufrufen!
\newcommand{\gnd}[2][\gndr@konj]{\gender{#2in(#1)#2}} %Kurzbefehl \gnd[konj]{neutr. Form}
\newcommand{\gndpl}[2][\gndr@konj]{\gender{#2innen(#1)#2}} %Kurzbefehl \gndpl[konj]{neutr. Form}
%
%Pronomen
\newcommand{\sieer}[1][\gndr@konj]{\gender{sie(#1)er}}
\newcommand{\ersie}{\sieer}
\newcommand{\ihrsein}[1][\gndr@konj]{\gender{ihr(#1)sein}}
\newcommand{\seinihr}{\ihrsein}
\newcommand{\ihreseine}[1][\gndr@konj]{\gender{ihre(#1)seine}}
\newcommand{\seineihre}{\ihreseine}
\newcommand{\ihrihm}[1][\gndr@konj]{\gender{ihr(#1)ihm}}
\newcommand{\ihmihr}{\ihrihm}
\newcommand{\sieihn}[1][\gndr@konj]{\gender{sie(#1)ihn}}
\newcommand{\ihnsie}{\sieihn}
%Großschreibung
\newcommand{\Sieer}[1][\gndr@konj]{\Gender{sie(#1)er}}
\newcommand{\Ersie}{\Sieer}
\newcommand{\Ihrsein}[1][\gndr@konj]{\Gender{ihr(#1)sein}}
\newcommand{\Seinihr}{\Ihrsein}
\newcommand{\Ihreseine}[1][\gndr@konj]{\Gender{ihre(#1)seine}}
\newcommand{\Seineihre}{\Ihreseine}
\newcommand{\Ihrihm}[1][\gndr@konj]{\Gender{ihr(#1)ihm}}
\newcommand{\Ihmihr}{\Ihrihm}
\newcommand{\Sieihn}[1][\gndr@konj]{\Gender{sie(#1)ihn}}
\newcommand{\Ihnsie}{\Sieihn}
%    \end{macrocode}
%
%
% \Finale
\endinput



