summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/gender/gender.dtx
blob: ac54a9c704ff6aad11802ca6d3938746ba750158 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
% \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