% \iffalse meta-comment % % File `ngermanb.dtx' % % Copyright 1989--2024 % Johannes L. Braams % Bernd Raichle % Walter Schmidt % Juergen Spitzmueller % All rights reserved. % % This file is part of the babel-german bundle, % an extension to the Babel system. % ---------------------------------------------- % % It may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % 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.3 or later is part of all distributions of LaTeX % version 2003/12/01 or later. % % This work has the LPPL maintenance status "maintained". % % The Current Maintainer of this work is Juergen Spitzmueller. % % This file is based on german.tex version 2.5e % by Bernd Raichle, Hubert Partl et.al. % % \fi % \CheckSum{505} % % \iffalse % Tell the \LaTeX\ system who we are and write an entry on the % transcript. %<*dtx> \ProvidesFile{ngermanb.dtx} %</dtx> %<naustrian>\ProvidesLanguage{naustrian} %<ngerman>\ProvidesLanguage{ngerman} %<nswissgerman>\ProvidesLanguage{nswissgerman} %<ngermanb>\ProvidesLanguage{ngermanb} %\fi %\ProvidesFile{ngermanb.dtx} [2024/01/19 v2.14 German support for babel (post-1996 orthography)] %\iffalse % %<*filedriver> \documentclass{ltxdoc} \usepackage[T1]{fontenc} \usepackage[osf]{libertine} \usepackage[scaled=0.76]{beramono} \usepackage{url} \usepackage{array} \usepackage{booktabs} \usepackage[tableposition=top,skip=5pt]{caption} \usepackage{marginnote} \usepackage[svgnames]{xcolor} \usepackage[pdfusetitle]{hyperref} \hypersetup{% colorlinks, linkcolor=black, filecolor=Maroon, urlcolor=Maroon, citecolor=black } \newcommand*\babel{\textsf{babel}} \newcommand*\Babel{\textsf{Babel}} \newcommand*\langvar{$\langle \it lang \rangle$} \newcommand*\graph[1]{$\langle$#1$\rangle$} \newcommand*\note[1]{} \newcommand*\Lopt[1]{\texttt{#1}} \newcommand*\file[1]{\texttt{#1}} \newcommand*\newfeature[1]{\marginnote{\footnotesize New feature\\in v.\,#1!}} \GlossaryMin = .33\textheight \begin{document} \DocInput{ngermanb.dtx} \end{document} %</filedriver> %\fi % \GetFileInfo{ngermanb.dtx} % %\RecordChanges % % \changes{Version 2.9a=Version 2.10}{2016/11/07}{Improvements to the manual} % % \changes{Version 2.7}{2013/12/13}{Added support for variety \Lopt{nswissgerman}.} % \changes{Version 2.7}{2013/12/13}{Revised \Lopt{naustrian} support.} % \changes{Version 2.7}{2013/12/13}{Revised documentation: Turn the \babel{} % manual chapter into a self-enclosed manual.} % % \changes{Version 2.6f}{1999/03/24}{Renamed from \file{germanb.ldf}; % language names changed from \Lopt{german} and \Lopt{austrian} % to \Lopt{ngerman} and \Lopt{naustrian}.} % % \title{Babel support for the German language (post-1996~orthography)} % \author{Johannes Braams \and Bernd Raichle \and Walter Schmidt \and J\"urgen Spitzm\"uller\thanks{% % Current maintainer. Please report issues via \protect\url{https://github.com/jspitz/babel-german}.}} % \date{\fileversion\ (\filedate)} % \maketitle % % \begin{abstract} % \noindent This manual documents \babel\ language support for German (post-1996 orthography), % including support for the Austrian and Swiss (standard) varieties of German. % The manual is part of the \textsf{babel-german} bundle. % \end{abstract} % % \section{Aim and usage} % % The \babel\ `language definition file' \file{ngermanb.ldf} documented in this manual provides % the \babel\ package with all language specific strings, settings and commands needed for writing % German texts, including texts in the Austrian and Swiss (standard) varieties of German.\footnote{% % The file \file{ngermanb.ldf} started as a re-implementation of the % package \file{ngerman.sty} by Bernd Raichle (cf.\,\cite{gerdoc}), % which itself builds on \file{german.sty}, originally developed by % Hubert Partl (cf.\,\cite{HP}) and later maintained by Bernd Raichle % as well. The initial re-implementation was done by Johannes Braams.} % Furthermore, it is assured that the correct hyphenation patterns for the respective % language or variety are used (see sec.~\ref{sec:patterns} for details). % The file, and hence this manual, addresses the contemporary (`reformed', i.\,e., post-1996) orthography. % For traditional (pre-1996) German orthography support, please refer to the complementary % \href{file:germanb.pdf}{manual for the \file{germanb.ldf} language definition file}. % % In order to use the language definitions provided here, you need to use % the \babel\ package and pass the respective language\slash variety name\footnote{% % Obviously, the prefix \graph{n} in the language\slash variety % names stands for `new' (orthography) here, since the names \Lopt{austrian}, \Lopt{german} % and \Lopt{swissgerman} were already used for pre-1996 orthography.} % as an option, either of % % \begin{itemize} % \setlength{\itemsep}{0pt} % \item |\usepackage[ngerman]{babel}| % \item |\usepackage[naustrian]{babel}| % \item |\usepackage[ngerman.capsz]{babel}|\newfeature{2.14}\footnote{% % See sec.~\ref{sec:capsz} on the \Lopt{capsz} modifier.} % \item |\usepackage[naustrian.capsz]{babel}| % \item |\usepackage[nswissgerman]{babel}| % \item |\usepackage[nswissgerman.toss]{babel}|\newfeature{2.10}\footnote{% % See sec.~\ref{sec:toss} on the \Lopt{toss} modifier.} % \end{itemize} % Using multiple varieties in parallel is possible; % consult the \babel\ manual \cite{babel} for details. % % \section{Shorthands} % % For all three varieties of German, the character |"| is made active % in order to provide some shorthand macros for frequently used special % characters as well as for better control of hyphenation, line breaks % and ligatures. % Table~\ref{tab:german-quote} provides an overview of the shorthands % that are provided by \textsf{babel-german} for \Lopt{ngerman}, \Lopt{naustrian} % and \Lopt{nswissgerman}. % \begin{table}[htb] % \begin{center} % \small % \caption{The extra definitions made % by \file{ngermanb.ldf}}\label{tab:german-quote} % \begin{tabular}{l>{\raggedright}p{.9\textwidth}} % \toprule % |"a| & Umlaut \graph{\"a} (shorthand for |\"a|). Similar shorthands are % available for all other lower- and uppercase % vowels (umlauts: |"a|, |"o|, |"u|, |"A|, |"O|, % |"U|; tremata: |"e|, |"i|, |"E|, |"I|). \tabularnewline % |"s| & German \graph{\ss} (shorthand for |\ss{}|); % but cf. sec.~\ref{sec:toss}. \tabularnewline % |"z| & German \graph{\ss} (shorthand for |\ss{}|). % Differs to |"s| in uppercase version; % but cf. sec.~\ref{sec:toss}. \tabularnewline % |"S| & |\uppercase{"s}|, typeset as \graph{SS}(\graph{\ss} % is traditonally written as \graph{SS} in uppercase writing, % but cf. sec.~\ref{sec:capsz} if you prefer a capital eszett). \tabularnewline % |"Z| & |\uppercase{"z}|, typeset as \graph{SZ}. In traditional % spelling, \graph{\ss} could also be written as \graph{SZ} % instead of \graph{SS} in uppercase writing. Note that, % with reformed orthography, the \graph{SZ} variant has % been deprecated in favour of \graph{SS} only. \tabularnewline % \verb="|= & Disable ligature at this position (e.\,g., at morpheme % boundaries, as in \verb=Auf"|lage=). \tabularnewline % |"-| & An additional breakpoint that does still % allow for hyphenation at the breakpoints preset in % the hyphenation patterns (as opposed to |\-|). \tabularnewline % |"=| & An explicit hyphen with a breakpoint, allowing % for hyphenation at the other points preset in the % hyphenation patterns (as opposed to plain |-|); % useful for long compounds such as % |IT"=Dienstleisterinnen|. \tabularnewline % |"~| & An explicit hyphen without a breakpoint. Useful for % cases where the hyphen should stick at the following % syllable, e.\,g., |bergauf und "~ab| . \tabularnewline % |""| & A breakpoint that does not output a hyphen if the line % break is performed (consider parenthetical extensions % as in |(pseudo"~)""wissenschaftlich|). \tabularnewline % |"/| & \newfeature{2.9}A slash that allows for a linebreak. % As opposed to |\slash{}|, hyphenation at the breakpoints % preset in the hyphenation patterns is still allowed. \tabularnewline % |"*| & \newfeature{2.14}An asterisk which assures the word can % still be hyphenated at its defined breakpoints. % Useful if you want to employ gender-sensitive writing % (,gender star`). % Similar shorthands are available for the alternative % gender-sensitive spellings, |":| and |"_|. \tabularnewline % |"x| & \newfeature{2.14}Inserts a gender mark which assures % the word can still be hyphenated at its defined breakpoints. % This is predefined to |*| but can be globally redefined % by redefining the macro |\def\mkngender{*}| \tabularnewline % |"`| & German left double quotes \graph{,,}. \tabularnewline % |"'| & German right double quotes \graph{``}. \tabularnewline % |"<| & French/Swiss left double quotes \graph{<<}. \tabularnewline % |">| & French/Swiss right double quotes \graph{>>}. \tabularnewline % \bottomrule % \end{tabular} % \end{center} % \end{table} % % \enlargethispage{\baselineskip} % \noindent Table~\ref{tab:more-quote} lists some \babel\ macros for quotation marks % that might be used as an alternative to the quotation mark shorthands listed above. % \begin{table}[!h] % \begin{center} % \small % \caption{Alternative commands for quotation marks (provided by \babel)}\label{tab:more-quote} % \begin{tabular}{lp{.88\textwidth}} % \toprule % |\glqq| & German left double quotes \graph{,,}. \tabularnewline % |\grqq| & German right double quotes \graph{``}. \tabularnewline % |\glq| & German left single quotes \graph{,}. \tabularnewline % |\grq| & German right single quotes \graph{`}. \tabularnewline % |\flqq| & French/Swiss left double quotes \graph{<<}. \tabularnewline % |\frqq| & French/Swiss right double quotes \graph{>>}. \tabularnewline % |\flq| & French/Swiss left single quotes \graph{\guilsinglleft}. \tabularnewline % |\frq| & French/Swiss right single quotes \graph{\guilsinglright}. \tabularnewline % |\dq| & The straight quotation mark character \graph{\textquotedbl}. \tabularnewline % \bottomrule % \end{tabular} % \end{center} % \end{table} % % \section{Hyphenation patterns}\label{sec:patterns} % % The question which hyphenation patterns are used by \Babel\ in case of the varieties of German needs some elaboration. % There is a set of established hyphenation patterns for pre- and post-1996 German orthography that has been available % with \TeX\ distributions for a long time (currently, these are shipped in form of the \texttt{dehypht} and \texttt{dehyphn} files). % These patterns, though, have many flaws (they produce wrong hyphenations, and not much is known about their construction). Therefore, % a group of people developed completely new patterns that do much better, the so-called `experimental' new hyphenation patterns of German, % distributed in the \textsf{dehyph-exptl} package \cite{exptl}. % As opposed to the old patterns, the new ones undergo constant improvement. The price for this, however, is that hyphenation and thus % the typeset document is subject to change with, and only due to, pattern updates. % % Modern engines (i.\,e., \texttt{xetex} and \texttt{luatex}) have already embraced those new patterns, i.\,e., they are activated on these % engines by default. The classic \TeX\ engines (\texttt{tex}\slash\texttt{pdftex}), however, haven't: they continue to use the old patterns. % The reason for this is one of \TeX's quality standards: refrain, if ever possible, from changing the output of user's documents in the wake % of software updates. % % This means that you need to explicitly activate the new patterns for a given document with the classic engines, should you want to use them % instead of the old ones. With \Babel, this can be done easily by means of the \cs{babelprovide} command and the \textsf{hyphenrules} option: % \begin{verbatim} % \babelprovide[hyphenrules=ngerman-x-latest]{ngerman} % \end{verbatim}\vspace{-\baselineskip} % For \Lopt{naustrian} and \Lopt{nswissgerman}, use a respectively adapted version of the above. % % \section{Variety-specific options}% % % \subsection{Capital eszett letter}\label{sec:capsz} % % In\newfeature{2.14} 2008, a capital variant of the letter \graph{\ss} has been included to the Unicode standard % (U+1E9E), and in 2017, the capital eszett letter has been acknowledged in German orthography as a valid alternative % to \graph{SS} in uppercase writing of \graph{\ss}. The letter differs from its miniscule counterpart in that it is % usually more wide to match the form of uppercase letters. % % If you want to use this letter, you can do so by using the \Babel\ modifier \Lopt{capsz}, which is supported % for the ngerman and naustrian varieties. I.\,e., pass \Lopt{ngerman.capsz} or \Lopt{naustrian.capsz} % (rather than \Lopt{ngerman} or \Lopt{naustrian}) as \babel\ option. As the eszett letter is not common % in Swiss German writing in general, the option is not supported there. Similarly, the pre-1996 varieties % do not support the letter either. % % The modifier causes both |\MakeUppercase| and the |"S| shorthand to use the capital eszett letter. % Note that this requires a font which actually contains the glyph (otherwise, you still get \graph{SS}) % and \LaTeX\ kernel 2023/06 at least. % % \subsection{Handling of \texttt{"s} and \texttt{"z} in Swiss German}\label{sec:toss} % % In\newfeature{2.10} Swiss (and Liechtensteinian) German writing, the use of \graph{\ss} is rather uncommon. % Swiss writers would normally use \graph{ss} where German or Austrian writers use the \graph{\ss} character % (e.\,g., \emph{Bu\ss e} vs.\,\emph{Busse}). When texts (or names) from other German speaking areas are quoted, % however, the spelling and hence the \graph{\ss} is often maintained (particularly in scholarly writing where % the spelling of quoted text is not supposed to be touched). % % We assume that (1) Swiss writers normally input \graph{ss} directly when they mean \graph{ss}, and that (2) the % \graph{\ss}-related shorthands |"s| and |"z| are useful also for Swiss writers when they actually need \graph{\ss}, % the more so since the \graph{\ss} is not as directly accessible on Swiss keyboards as it is on German and Austrian ones. % On the other hand, there might be occasions where writers want to transfer a text from German or Austrian into Swiss % Standard German and adapt the spelling on the fly, i.\,e., transform all \graph{\ss} into \graph{ss}. % % For this special case, we provide an option to make the \graph{\ss}-related shorthands |"s| and |"z| expand to the % respective digraphs\footnote{In graphematics, the term \emph{digraph} denotes two characters that make a functional pair % (which means, depending on the theoretical assumptions: they represent a single sound or they are semantically distinctive).}, % \graph{ss} and \graph{sz}, rather than to \graph{\ss}. This is not the default behavior with % \Lopt{nswissgerman} since, as mentioned, there are situations when the \graph{\ss} is (and has to be) used in Swiss writing, % and normally, no shorthand is needed to input (or output) two simple \graph{s} characters. You can opt-in (and out) digraphical % expansion of |"s| and |"z| on a global and local level: % \begin{itemize} % \item To globally switch on the digraphical expansion, use the \Babel\ modifier \Lopt{toss} (read: `to \graph{ss}') with % \Lopt{nswissgerman}. I.\,e., pass \Lopt{nswissgerman.toss} (rather than \Lopt{nswissgerman}) as \babel\ option. % % \item To switch on the digraphical expansion only locally, you can use the boolean switch |\ntosstrue|. Likewise, % |\ntossfalse| switches off (both locally and globally set) digraphical expansion. % \end{itemize} % Both these changes result in the following deviant behavior of two shorthands:\\ % \begin{tabular}{l>{\raggedright}p{.9\textwidth}} % |"s| & Expands to digraph \graph{ss} \tabularnewline % |"z| & Expands to digraph \graph{sz} \tabularnewline % \end{tabular} % % % \StopEventually{} % % % \section{Implementation} % % \subsection{General settings} % % If \file{ngermanb.ldf} is read via the deprecated \babel\ option % \Lopt{ngermanb}, we make it behave as if \Lopt{ngerman} was specified. % \begin{macrocode} \def\tmpa{ngermanb} \ifx\CurrentOption\tmpa \def\CurrentOption{ngerman} \fi % \end{macrocode} % % The macro |\LdfInit| takes care of preventing that this file is % loaded more than once with the same option, checking the category % code of the \texttt{@} sign, etc. % \begin{macrocode} \LdfInit\CurrentOption{captions\CurrentOption} % \end{macrocode} % % We define some helper macros that help us to identify later on % which variety of German we are currently dealing with. % \changes{Version 2.9a=Version 2.10}{2016/11/03}{Add helper macros to identify the current option.} % \changes{Version 2.9d=Version 2.13}{2021/02/27}{Move option helper macros after \cs{LdfInit} to fix plain tex usage.} % \iffalse %<*ngermanb> % \fi % \begin{macrocode} \def\bbl@opt@ngerman{ngerman} \def\bbl@opt@ngermanb{ngermanb} \def\bbl@opt@naustrian{naustrian} \def\bbl@opt@nswissgerman{nswissgerman} % \end{macrocode} % % If \file{ngermanb.ldf} is read as an option, i.e., by the |\usepackage| % command, \Lopt{ngerman} could be an `unknown' language, so we % have to make it known. We check for the existence of % |\l@ngerman| and issue a warning if it is unknown. % % \begin{macrocode} \ifx\l@ngerman\@undefined \@nopatterns{German (new orthography)} \adddialect\l@ngerman0 \fi % \end{macrocode} % % We set \Lopt{naustrian} and \Lopt{nswissgerman} as dialects % of \Lopt{ngerman}, since they use the same hyphenation patterns % than \Lopt{ngerman}. If no \Lopt{ngerman} patterns are found, % we issue a warning. % \changes{Version 2.8}{2016/11/01}{Only add dialects if the respective % variety is loaded} % \changes{Version 2.9}{2016/11/02}{Do not attempt to load \cs{l@naustrian} % or \cs{l@nswissgerman}, which do not exist} % \begin{macrocode} \ifx\CurrentOption\bbl@opt@naustrian \ifx\l@ngerman\@undefined \@nopatterns{German (new orthography), needed by Austrian (new orthography)} \adddialect\l@naustrian0 \else \adddialect\l@naustrian\l@ngerman \fi \fi \ifx\CurrentOption\bbl@opt@nswissgerman \ifx\l@ngerman\@undefined \@nopatterns{German (new orthography), needed by Swiss Standard German (new orthography)} \adddialect\l@nswissgerman0 \else \adddialect\l@nswissgerman\l@ngerman \fi \fi % \end{macrocode} % % \subsection{Language-specific strings (captions)} % % The next step consists of defining macros that provide language specific strings % and settings. % % \begin{macro}{\@captionsngerman} % \changes{Version 2.6n}{2008/07/06}{Corrected typo % \cs{captionnsgerman}} % The macro |\@captionsngerman| defines all strings used in the four % standard document classes provided with \LaTeX\ for German. % This is an internal macro that is inherited and modified by the following % macros for the respective language varieties. % % \changes{Version 2.7}{2013/12/13}{Split \cs{captionsngerman} from % \cs{captionsnaustrian} and % \cs{captionsnswissgerman}.} % \changes{Version 2.7}{2013/12/13}{Changed \cs{enclname} in % \Lopt{naustrian} to % \emph{Beilage(n)}.} % \changes{Version 2.6k}{2000/09/20}{Added \cs{glossaryname}} % \changes{Version 2.8}{2016/11/01}{Define trans-variational base captions % which are loaded and modified by the varieties} % \begin{macrocode} \@namedef{@captionsngerman}{% \def\prefacename{Vorwort}% \def\refname{Literatur}% \def\abstractname{Zusammenfassung}% \def\bibname{Literaturverzeichnis}% \def\chaptername{Kapitel}% \def\appendixname{Anhang}% \def\contentsname{Inhaltsverzeichnis}% \def\listfigurename{Abbildungsverzeichnis}% \def\listtablename{Tabellenverzeichnis}% \def\indexname{Index}% \def\figurename{Abbildung}% \def\tablename{Tabelle}% \def\partname{Teil}% \def\enclname{Anlage(n)}% \def\ccname{Verteiler}% \def\headtoname{An}% \def\pagename{Seite}% \def\seename{siehe}% \def\alsoname{siehe auch}% \def\proofname{Beweis}% \def\glossaryname{Glossar}% } % \end{macrocode} % \end{macro} % \begin{macro}{\captionsngerman} % The macro |\captionsngerman| is identical to |\@captionsngerman|, % but only defined if \Lopt{ngerman} is requested. % \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsngerman} if % \Lopt{ngerman} is requested.} % \begin{macrocode} \ifx\CurrentOption\bbl@opt@ngerman \@namedef{captionsngerman}{% \@nameuse{@captionsngerman}% } \fi % \end{macrocode} % \end{macro} % \begin{macro}{\captionsnaustrian} % The macro |\captionsnaustrian| builds on |\@captionsngerman|, but % redefines some strings following Austrian conventions (for the % respective variants, cf. \cite{vwb}). It is only defined if % \Lopt{naustrian} is requested. % \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsnaustrian} if % \Lopt{naustrian} is requested.} % \begin{macrocode} \ifx\CurrentOption\bbl@opt@naustrian \@namedef{captionsnaustrian}{% \@nameuse{@captionsngerman}% \def\enclname{Beilage(n)}% } \fi % \end{macrocode} % \end{macro} % \begin{macro}{\captionsnswissgerman} % The macro |\captionsnswissgerman| builds on |\@captionsngerman|, but % redefines some strings following Swiss conventions (for the % respective variants, cf. \cite{vwb}). It is only defined if % \Lopt{nswissgerman} is requested. % \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsnswissgerman} if % \Lopt{nswissgerman} is requested.} % \begin{macrocode} \ifx\CurrentOption\bbl@opt@nswissgerman \@namedef{captionsnswissgerman}{% \@nameuse{@captionsngerman}% \def\enclname{Beilage(n)}% } \fi % \end{macrocode} % \end{macro} % % \subsection{Date localizations} % % \begin{macro}{\month@ngerman} % The macro |\month@ngerman| defines German month names for all varieties. % \begin{macrocode} \def\month@ngerman{\ifcase\month\or Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or Juli\or August\or September\or Oktober\or November\or Dezember\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\datengerman} % The macro |\datengerman| redefines the command % |\today| to produce German dates. It is only defined if % \Lopt{ngerman} is requested. % \changes{Version 2.8}{2016/11/01}{Only define \cs{datengerman} if % \Lopt{ngerman} is requested.} % \begin{macrocode} \ifx\CurrentOption\bbl@opt@ngerman \def\datengerman{\def\today{\number\day.~\month@ngerman \space\number\year}} \fi % \end{macrocode} % \end{macro} % % \begin{macro}{\datenswissgerman} % \changes{Version 2.7}{2013/12/13}{Added \cs{datenswissgerman}.} % The macro |\datenswissgerman| does the same for Swiss Standard German dates. % The result is identical to German. This macro is only defined if % \Lopt{nswissgerman} is requested. % \changes{Version 2.8}{2016/11/01}{Only define \cs{datenswissgerman} if % \Lopt{nswissgerman} is requested.} % \begin{macrocode} \ifx\CurrentOption\bbl@opt@nswissgerman \def\datenswissgerman{\def\today{\number\day.~\month@ngerman \space\number\year}} \fi % \end{macrocode} % \end{macro} % % \begin{macro}{\datenaustrian} % The macro |\datenaustrian| redefines the command % |\today| to produce Austrian versions of the German dates. % Here, the naming of January (,,J\"anner``) differs from the % other German varieties. The macro is only defined if % \Lopt{naustrian} is requested. % \changes{Version 2.8}{2016/11/01}{Only define \cs{datenaustrian} if % \Lopt{naustrian} is requested.} % \begin{macrocode} \ifx\CurrentOption\bbl@opt@naustrian \def\datenaustrian{\def\today{\number\day.~\ifnum1=\month J\"anner\else \month@ngerman\fi \space\number\year}} \fi % \end{macrocode} % \end{macro} % % \subsection{Extras} % % \begin{macro}{\extrasnaustrian} % \begin{macro}{\extrasnswissgerman} % \changes{Version 2.7}{2013/12/13}{Added \cs{extrasnswissgerman}.} % \begin{macro}{\extrasngerman} % \begin{macro}{\noextrasnaustrian} % \begin{macro}{\noextrasnswissgerman} % \changes{Version 2.7}{2013/12/13}{Added \cs{noextrasnswissgerman}.} % \begin{macro}{\noextrasngerman} % The macros |\extrasngerman|, |\extrasnaustrian| % and |\extrasnswissgerman|, respectively, will perform all the extra % definitions needed for the German language or the respective % variety. The macro |\noextrasngerman| is used to cancel the % actions of |\extrasngerman|. |\noextrasnaustrian| and % |\noextrasnswissgerman| behave analoguously. % % First, the character \texttt{"} is declared active for all German % varieties. This is done once, later on its definition may vary. % \begin{macrocode} \initiate@active@char{"} % \end{macrocode} % % Depending on the option with which the language definition file % has been loaded, the macro |\extrasngerman|, |\extrasnaustrian| % or |\extrasnswissgerman| is defined. Each of those is identical: % they load the shorthands defined below and activate the \texttt{"} % character. % \begin{macrocode} \@namedef{extras\CurrentOption}{% \languageshorthands{ngerman}% } \expandafter\addto\csname extras\CurrentOption\endcsname{% \bbl@activate{"}} % \end{macrocode} % % \changes{Version 2.9a=Version 2.10}{2018/03/28}{Implement boolean switch % \cs{ntosstrue}\slash\cs{ntossfalse} to customize \graph{\ss}-related % shorthands in Swiss Standard German context.} % \changes{Version 2.9a=Version 2.10}{2018/03/28}{Implement modifier \Lopt{toss} % to customize \graph{\ss}-related shorthands in Swiss Standard German context.} % \begin{macro}{toss} % \begin{macro}{\ntosstrue} % \begin{macro}{\ntossfalse} % For Swiss Standard German, we allow optionally to expand the \graph{\ss}-related % shorthands the Swiss way, i.\,e. as \graph{ss} (globally, if the modifier \Lopt{toss} % is used or locally if |\ntosstrue|). % \begin{macrocode} \newif\ifntoss\ntossfalse \newif\ifbbl@ntoss\bbl@ntossfalse \ifx\bbl@mod@nswissgerman\@undefined\else \@expandtwoargs\in@{,toss,}{,\bbl@mod@nswissgerman,} \ifin@ \ntosstrue \fi \addto\extrasnswissgerman{% \ifntoss\bbl@ntosstrue\else\bbl@ntossfalse\fi} \fi % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{capsz} % \changes{Version 2.9e=Version 2.14}{2024/01/19}{Implement modifier \Lopt{capsz} % to use capital eszett letter in Austrian and German varieties if possible.} % For German and Austrian Standard German, we allow optionally to uppercase \graph{\ss} % with the capital eszett letter rather as \graph{SS} if the font provides the glyph % (if the modifier \Lopt{capsz} is used). % \begin{macrocode} \newif\ifcapsz\capszfalse \newif\ifbbl@capsz\bbl@capszfalse \ifx\bbl@mod@ngerman\@undefined\else \@expandtwoargs\in@{,capsz,}{,\bbl@mod@ngerman,} \ifin@ \capsztrue \fi \addto\extrasngerman{% \ifcapsz\bbl@capsztrue\bbl@csarg\xdef{casing@ngerman}{de-x-eszett}% \else\bbl@csarg\xdef{casing@ngerman}{de}\bbl@capszfalse\fi} \fi \newif\if@at@capsz\@at@capszfalse \ifx\bbl@mod@naustrian\@undefined\else \@expandtwoargs\in@{,capsz,}{,\bbl@mod@naustrian,} \ifin@ \@at@capsztrue \fi \addto\extrasnaustrian{% \if@at@capsz\bbl@capsztrue\bbl@csarg\xdef{casing@naustrian}{de-x-eszett}% \else\bbl@csarg\xdef{casing@naustrian}{de}\bbl@capszfalse\fi} \fi % \end{macrocode} % \end{macro} % % Next, again depending on the option with which the language definition % file has been loaded, the macro |\noextrasngerman|, |\noextrasnaustrian| % or |\noextrasnswissgerman| is defined. % These deactivate the \texttt{"} character and thus turn the shorthands % off again outside of the respective variety. % \changes{Version 2.6j}{1999/12/16}{Deactivate shorthands outside of % German} % \changes{Version 2.7}{2013/12/13}{Deactivate shorthands also outside of % \Lopt{naustrian} and \Lopt{nswissgerman}.} % \begin{macrocode} \expandafter\addto\csname noextras\CurrentOption\endcsname{% \bbl@deactivate{"}} % \end{macrocode} % % Now deactivate the settings that might have been done by the modifiers: % \begin{macrocode} \ifx\CurrentOption\bbl@opt@nswissgerman \addto\noextrasnswissgerman{\bbl@ntossfalse} \fi \ifx\CurrentOption\bbl@opt@ngerman \ifbbl@capsz \addto\noextrasngerman{\bbl@capszfalse\bbl@csarg\xdef{casing@ngerman}{de}} \fi \fi \ifx\CurrentOption\bbl@opt@naustrian \ifbbl@capsz \addto\noextrasnaustrian{\bbl@capszfalse\bbl@csarg\xdef{casing@naustrian}{de}} \fi \fi % \end{macrocode} % % % In order for \TeX\ to be able to hyphenate German words which % contain `\ss' (in the \texttt{OT1} position |^^Y|) we have to % give the character a nonzero |\lccode| (see Appendix H, the \TeX % book). % \begin{macrocode} \expandafter\addto\csname extras\CurrentOption\endcsname{% \babel@savevariable{\lccode25}% \lccode25=25} % \end{macrocode} % % The umlaut accent macro |\"| is changed to lower the umlaut dots. % The redefinition is done with the help of |\umlautlow|. % \begin{macrocode} \expandafter\addto\csname extras\CurrentOption\endcsname{% \babel@save\"\umlautlow} % \end{macrocode} % \changes{Version 2.7}{2013/12/13}{Do not use \cs{@namedef} when % \cs{noextras} is already defined and should not be overwritten.} % \begin{macrocode} \expandafter\addto\csname noextras\CurrentOption\endcsname{% \umlauthigh} % \end{macrocode} % The current % version of the `new' German hyphenation patterns (\file{dehyphn.tex}) % is to be used with |\lefthyphenmin| and |\righthyphenmin| set to~2. % \changes{Version 2.6k}{2000/09/22}{Now use \cs{providehyphenmins} to % provide a default value} % \begin{macrocode} \providehyphenmins{\CurrentOption}{\tw@\tw@} % \end{macrocode} % For German texts we need to assure that |\frenchspacing| is % turned on. % \changes{Version 2.6m}{2001/01/26}{Turn frenchspacing on, as in % \file{german.sty}} % \begin{macrocode} \expandafter\addto\csname extras\CurrentOption\endcsname{% \bbl@frenchspacing} \expandafter\addto\csname noextras\CurrentOption\endcsname{% \bbl@nonfrenchspacing} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsection{Active characters, macros \& shorthands} % % The following code is necessary because we need an extra active % character. This character is then used as indicated in % table~\ref{tab:german-quote}. % % In order to be able to define the function of |"|, we first define a % couple of `support' macros. % % % \changes{Version 2.9e=Version 2.14}{2024/01/19}{Output capital eszett for \texttt{"S} if possible and required} % \begin{macro}{\dq} % We save the original double quotation mark character in |\dq| to keep % it available, the math accent |\"| can now be typed as |"|. % % Furthermore, we define some helper macros for contextual \graph{\ss} handling. % \begin{macrocode} \begingroup \catcode`\"12 \def\x{\endgroup \def\dq{"} \def\@SS{\mathchar"7019 } \def\bbl@ss{\ifbbl@ntoss ss\else\textormath{\ss}{\@SS{}}\fi} \def\bbl@SS{\ifbbl@capsz\MakeUppercase{\ss}\else SS\fi} \def\bbl@sz{\ifbbl@ntoss sz\else\textormath{\ss}{\@SS{}}\fi} \def\bbl@SZ{SZ} } \x % \end{macrocode} % \end{macro} % % Since we need to add special cases for hyperref which needs hyperref's |\texorpdfstring|, % we provide a dummy command for the case that hyperref is not loaded. % \changes{Version 2.9c=Version 2.12}{2020/07/21}{Properly handle shorthands in hyperref pdf strings} % \begin{macrocode} \providecommand\texorpdfstring[2]{#1} % \end{macrocode} % % Now we can define the doublequote shorthands: the umlauts, % \begin{macrocode} \declare@shorthand{ngerman}{"a}{\textormath{\"{a}\bbl@allowhyphens}{\ddot a}} \declare@shorthand{ngerman}{"o}{\textormath{\"{o}\bbl@allowhyphens}{\ddot o}} \declare@shorthand{ngerman}{"u}{\textormath{\"{u}\bbl@allowhyphens}{\ddot u}} \declare@shorthand{ngerman}{"A}{\textormath{\"{A}\bbl@allowhyphens}{\ddot A}} \declare@shorthand{ngerman}{"O}{\textormath{\"{O}\bbl@allowhyphens}{\ddot O}} \declare@shorthand{ngerman}{"U}{\textormath{\"{U}\bbl@allowhyphens}{\ddot U}} % \end{macrocode} % tremata, % \begin{macrocode} \declare@shorthand{ngerman}{"e}{\textormath{\"{e}}{\ddot e}} \declare@shorthand{ngerman}{"E}{\textormath{\"{E}}{\ddot E}} \declare@shorthand{ngerman}{"i}{\textormath{\"{\i}}% {\ddot\imath}} \declare@shorthand{ngerman}{"I}{\textormath{\"{I}}{\ddot I}} % \end{macrocode} % German \ss{}, % \begin{macrocode} \declare@shorthand{ngerman}{"s}{\bbl@ss} \declare@shorthand{ngerman}{"S}{\bbl@SS} \declare@shorthand{ngerman}{"z}{\bbl@sz} \declare@shorthand{ngerman}{"Z}{\bbl@SZ} % \end{macrocode} % German and French/Swiss quotation marks, % \begin{macrocode} \declare@shorthand{ngerman}{"`}{\glqq} \declare@shorthand{ngerman}{"'}{\grqq} \declare@shorthand{ngerman}{"<}{\flqq} \declare@shorthand{ngerman}{">}{\frqq} % \end{macrocode} % some additional commands (hyphenation, line breaking and ligature control): % \changes{Version 2.9}{2016/11/02}{Add \texttt{"/} shortcut for breakable slash % (taken from \file{dutch.ldf})} % \changes{Version 2.9b=Version 2.11}{2018/12/08}{Fix old hyphenation regression introduced with \babel\ 3.7 % (2002) in a number of shorthands (change of meaning of \cs{allowhyphens} % vs. \cs{bbl@allowhyphens})} % \begin{macrocode} \declare@shorthand{ngerman}{"-}{\nobreak\-\bbl@allowhyphens} \declare@shorthand{ngerman}{"|}{% \texorpdfstring{\textormath{\penalty\@M\discretionary{-}{}{\kern.03em}\bbl@allowhyphens}{}}% TeX string {}% PDF string } \declare@shorthand{ngerman}{""}{\hskip\z@skip} \declare@shorthand{ngerman}{"~}{% \texorpdfstring{\textormath{\leavevmode\hbox{-}}{-}}% tex string {-}% PDF string } \declare@shorthand{ngerman}{"=}{\penalty\@M-\hskip\z@skip} \declare@shorthand{ngerman}{"/}{\textormath {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}} % \end{macrocode} % and some shorthands to support gender-sensitive spelling: % \changes{Version 2.9e=Version 2.14}{2024/01/19}{Add \texttt{"*}, \texttt{":}, \texttt{"\_}, and \texttt{"x} % shorthands to support gender-sensitive writing} % \begin{macrocode} \def\mkngender{*} \declare@shorthand{ngerman}{":}{\nobreak:\bbl@allowhyphens} \declare@shorthand{ngerman}{"*}{\nobreak*\bbl@allowhyphens} \declare@shorthand{ngerman}{"_}{\nobreak\_\bbl@allowhyphens} \declare@shorthand{ngerman}{"x}{\nobreak\mkngender\bbl@allowhyphens} % \end{macrocode} % % \begin{macro}{\mdqon} % \begin{macro}{\mdqoff} % All that's left to do now is to define a couple of commands % for reasons of compatibility with \file{german.sty}. % \begin{macrocode} \def\mdqon{\shorthandon{"}} \def\mdqoff{\shorthandoff{"}} % \end{macrocode} % \end{macro} % \end{macro} % % The macro |\ldf@finish| takes care of looking for a % configuration file, setting the main language to be switched on % at |\begin{document}| and resetting the category code of % \texttt{@} to its original value. % \begin{macrocode} \ldf@finish\CurrentOption % \end{macrocode} % \iffalse %</ngermanb> % \fi % % \subsection{\file{naustrian.ldf}, \file{ngerman.ldf} and \file{nswissgerman.ldf}} % % \changes{Version 2.7}{2013/12/13}{Generate portmanteau files \file{naustrian.ldf}, % \file{ngerman.ldf} and \file{nswissgerman.ldf}.} % % \Babel\ expects a \file{\langvar{}.ldf} file for each \langvar. So we create portmanteau % ldf files for \Lopt{naustrian}, \Lopt{ngerman} and \Lopt{nswissgerman}.\footnote{% % For \Lopt{naustrian} and \Lopt{ngerman}, this is not strictly necessary, % since \babel\ provides aliases for these languages (pointing to \Lopt{ngermanb}). % However, since \babel\ does not officially support these aliases anymore after % the language definition files have been separated from the core, we provide % the whole range of ldf files for the sake of completeness.} These files themselves % only load \file{ngermanb.ldf}, which does the real work: % % \iffalse %<*naustrian|ngerman|nswissgerman> % \fi % \begin{macrocode} \input ngermanb.ldf\relax % \end{macrocode} % \iffalse %</naustrian|ngerman|nswissgerman> % \fi % %\PrintChanges % % \begin{thebibliography}{9} % \bibitem{vwb} Ammon, Ulrich et al.: % \emph{Variantenw\"orterbuch des Deutschen. Die Standardsprache in \"Osterreich, der Schweiz % und Deutschland sowie in Liechtenstein, Luxemburg, Ostbelgien und S\"udtirol.} % Berlin, New York: De Gruyter. % \bibitem{babel} Braams, Johannes and Bezos, Javier: % \emph{Babel}. % \url{http://www.ctan.org/pkg/babel}. % \bibitem{exptl} Deutschsprachige Trennmustermannschaft: % \emph{dehyph-exptl -- Experimental hyphenation patterns for the German language}. % \url{https://ctan.org/pkg/dehyph-exptl}. % \bibitem{HP} Partl, Hubert: % \emph{German \TeX}, \emph{TUGboat} 9/1 (1988), p.~70--72. % \bibitem{hyph-utf8} Manuel P\'egouri\'e-Gonnard et al.: % \emph{hyph-utf8 -- Hyphenation patterns expressed in UTF-8}. % \url{https://ctan.org/pkg/hyph-utf8}. % \bibitem{gerdoc} Raichle, Bernd: % \emph{German}. % \url{http://www.ctan.org/pkg/german}. % \end{thebibliography} % % \Finale %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %% \endinput