Frage- und Ausrufezeichen

Fragezeichen ? und Ausrufezeichen ! gehören zu den ganz wenigen Satzzeichen mit einem auf den Kopf gestellten Partner: dem spanischen ¿ und ¡. In LaTeX erzeugt man sie über eine Ligatur – einfach einen Backtick hinter das Zeichen setzen –, und weniger bekannt ist, dass diese Ligatur in Knuths ursprünglicher Kodierung OT1 genauso funktioniert wie in T1. Der Preis, den OT1 dafür zahlt: Tippt man dort im Fließtext ein <, erscheint ¡. Diese Seite klärt mit Messungen, wie man ¿ und ¡ eingibt, warum < und > falsch herauskommen, wie ? und ! den folgenden Zwischenraum verbreitern, welchen Raum das Französische vor ihnen setzt, und dass ! im Mathematikmodus die Fakultät bezeichnet (\! ist überhaupt kein Ausrufezeichen).

Spanisches ¿ und ¡ erzeugen – die Backtick-Ligatur und \textquestiondown

Ein Backtick direkt nach ? ergibt ¿, direkt nach ! ergibt ¡. Es handelt sich um eine Schriftligatur; weder Paket noch Befehl sind nötig. Schreibt man es wie im Codebeispiel unten, erscheint „¿Como estas?“, und der Backtick taucht in der Ausgabe nirgends auf. Wer es ausdrücklich mag, hat \textquestiondown und \textexclamdown; gemessen sind sie exakt so breit wie die Ligatur – in T1 4,72107 pt für ¿ und 2,7771 pt für ¡. Die umgekehrten Zeichen selbst schlug die Königlich Spanische Akademie im 18. Jahrhundert vor, damit Lesende schon vor dem Satzende wissen, wo eine lange Frage beginnt. Deshalb ist ein Schlusszeichen allein unvollständig: Ein fehlendes Anfangszeichen gilt weniger als Satzfehler denn als Rechtschreibfehler.

Das Verhältnis von Ligatur und Befehl verläuft in beiden Kodierungen entgegengesetzt. In OT1 definiert ot1enc.def das \textquestiondown als die Ligatur selbst (siehe den Code unten) – der Befehl ruft also die Ligatur auf. Die Ligatur ist das Ursprüngliche, der Befehl ein Alias. In T1 ist es umgekehrt: t1enc.def deklariert \DeclareTextSymbol{\textquestiondown}{T1}{190} und legt \textexclamdown auf 189, verweist also direkt auf echte Positionen in der Schrift. Das Ergebnis ist in beiden Fällen dasselbe; nehmen Sie, was Ihnen lieber ist. \textquestiondown lässt sich allerdings leichter suchen und ersetzen, und die Absicht ist beim Lesen sofort erkennbar. ¿ und ¡ direkt in eine UTF-8-Quelle zu tippen, ist ebenfalls in Ordnung – modernes LaTeX erwartet UTF-8 und lässt die Zeichen unter T1 unverändert durch.

latex
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}
% ...
?`Como estas?  !`Que bien!
\textquestiondown Como estas?  \textexclamdown Que bien!
¿Como estas?  ¡Que bien!   % direct UTF-8 also works
latex
% ot1enc.def -- in OT1 the COMMAND is defined as the ligature
\DeclareTextCommand{\textexclamdown}{OT1}{!`}
\DeclareTextCommand{\textquestiondown}{OT1}{?`}

% t1enc.def -- in T1 they are real slots in the font
\DeclareTextSymbol{\textexclamdown}{T1}{189}
\DeclareTextSymbol{\textquestiondown}{T1}{190}

In OT1 werden < und > zu ¡ und ¿ – wo die umgekehrten Zeichen sitzen

Weil OT1-Schriften gar keine Glyphen für < und > besitzen und auf diesen Codepositionen ¡ und ¿ sitzen. Kompiliert man OT1 angle: <a> and 2<3 and x>y. ohne \usepackage[T1]{fontenc} und lässt pdftotext darüberlaufen, kommt OT1 angle: ¡a¿ and 2¡3 and x¿y. zurück – ohne jede Fehlermeldung, ohne Warnung. Lädt man T1 in dieselbe Quelle, bleibt <a> einfach <a>. Das ist ein Unfall, der niemals laut scheitert: Kaum steht ein Vergleichsoperator oder eine spitze Klammer im Fließtext, verwandelt er sich stillschweigend in ein anderes Zeichen.

Es gibt drei Abhilfen, in dieser Reihenfolge. Erstens \usepackage[T1]{fontenc} einbinden – T1 besitzt echte <- und >-Glyphen und trennt außerdem Wörter mit Akzentbuchstaben korrekt, sodass jedes westlichsprachige Dokument es ohnehin braucht. Zweitens im Mathematikmodus $<$ und $>$ schreiben – als Vergleichsoperator ist das auch semantisch richtig. Drittens \textless und \textgreater verwenden – passend, wenn das Zeichen ausdrücklich benannt werden soll. Umgekehrt gelesen ist dieses Verhalten ein nützlicher Hinweis darauf, ob OT1 noch tragbar ist: Erscheinen spitze Klammern im Fließtext, gibt es einen Grund mehr, T1 zu laden.

Nach ? und ! wird der Abstand größer – wie sie als Satzende gewertet werden

? und ! tragen denselben Space Factor 3000 wie ein Punkt und schalten den folgenden Zwischenraum auf Satzabstand um. Gemessen ergibt wow! Next 47,2107 pt, während wow!\ Next mit ausgeschriebenem Wortzwischenraum 46,09985 pt liefert; die Differenz von 1,11085 pt ist der zusätzliche Satzabstand. Endet ein Satz auf ? oder !, erhält man also ohne Zutun genau die Breite eines Punktes. Die Kehrseite: Derselbe Abstand entsteht auch, wenn ein Ausrufezeichen mitten im Satz steht. Nach einer Wendung wie Wow! he said oder einem Eigennamen wie Yahoo! schreibt man den Zwischenraum entweder aus – Yahoo!\ Inc. – oder schaltet den Satzabstand mit \frenchspacing ganz ab.

Französisch setzt Raum vor ? und ! – babel fügt gemessene 1,66626 pt ein

Die französische Rechtschreibung setzt vor ? ! ; : einen Zwischenraum, und babel mit [french] fügt ihn ein, ob man ihn getippt hat oder nicht. Die Größe steht ausdrücklich in french.ldf: \FBthinspace ist \hskip .5\fontdimen2\fontder halbe Wortzwischenraum, bei 10 pt also 1,66626 pt. Gemessen: Quoi ergibt 21,10596 pt, Quoi! 25,54932 pt, Differenz 4,44336 pt; zieht man die 2,7771 pt Breite des T1-! ab, bleiben exakt 1,66626 pt. Der Doppelpunkt ist die Ausnahme: \FBcolonspace ist \space, ein voller Wortzwischenraum von 3,33252 pt. Gemessen ergibt Non 18,05115 pt und Non: 24,16077 pt; abzüglich der Breite von : bleiben genau 3,33252 pt.

Die praktische Folgerung ist klar. In einem französischen Manuskript den Zwischenraum vor dem Zeichen nicht selbst tippen. babel fügt ihn ein, und zwar als geschützten Zwischenraum – so kann auch kein einzelnes ? an den Zeilenanfang rutschen. Ein von Hand gesetztes Leerzeichen verdoppelt die Lücke und schafft zusätzlich eine mögliche Umbruchstelle. Umgekehrt setzt keine andere Sprache Raum vor ? oder ! – Englisch, Deutsch und Spanisch schließen sie direkt ans vorangehende Wort an. In mehrsprachigen Dokumenten überlässt man diesen Unterschied am sichersten der Sprachumschaltung von babel.

latex
\usepackage[french]{babel}
% ...
% babel adds the space itself; typing one is unnecessary
Vraiment? Voici: ceci; cela!   % prints as: Vraiment ? Voici : ceci ; cela !

Im Mathematikmodus ist ! eine Fakultät – und \! kein Ausrufezeichen

Im Mathematikmodus fügt ! auf keiner Seite Raum ein. fontmath.ltx deklariert \DeclareMathSymbol{!}{\mathclose}{operators}{"21} und macht ! damit zu einem schließenden Zeichen (\mathclose), das sich an das Vorangehende klebt. Gemessen: $ab$ ergibt 9,57755 pt, $a!b$ 12,35533 pt – eine Differenz von 2,77778 pt, also genau die Breite der !-Glyphe. Kein einziger skalierter Punkt Zwischenraum auf beiden Seiten. Deshalb wird die Fakultät n! bündig gesetzt, und $n!!$ fügt schlicht eine weitere Glyphe hinzu (11,55792 pt); auch die doppelte Fakultät braucht nichts Besonderes. ? ist genauso als \mathclose deklariert.

Und hier stellt der Name eine Falle. \! ist kein Ausrufezeichen, sondern ein negativer schmaler Zwischenraum. Gemessen werden aus den 9,57755 pt von $ab$ in $a\!b$ nur 7,91092 pt – es schrumpft um 1,66663 pt. Es ist das genaue Gegenteil von \, (positiver schmaler Zwischenraum), ein Feinjustierbefehl, um Zeichen zusammenzuziehen. Wer in einer Formel schlicht ein Ausrufezeichen möchte, tippt ! ohne Backslash. Da \! vor allem in Konstruktionen wie \int\!\int zum Zusammenrücken von Integralzeichen auftaucht, führt ein versehentliches \! statt einer Fakultät zu einem verwirrenden Defekt: Das Zeichen verschwindet, und die Nachbarn rücken zusammen.

latex
\[
  \binom{n}{k} = \frac{n!}{k!\,(n-k)!}, \qquad (2n)!! = 2^n n!
\]
% \! is a NEGATIVE thin space, not an exclamation mark:
\[ \int\!\!\int_D f(x,y)\,dx\,dy \]

Das Interrobang ‽ und doppeltes !! ?? – wenn Zeichen sich häufen sollen

!! und ?? lassen sich einfach so tippen: kein Befehl nötig, und keine Ligatur greift ein. Und das eine Zeichen für „Frage und Verblüffung zugleich“ – das Interrobang ‽ – steckt überraschenderweise im Standardapparat von LaTeX. Es heißt \textinterrobang in der TS1-Kodierung, verfügbar sobald textcomp geladen ist, deklariert auf Position 148 in ts1enc.def (das umgekehrte \textinterrobangdown steht auf 149). Kompiliert und durch pdftotext geschickt, kommt tatsächlich ein ‽ heraus. Es misst 4,72107 pt, genauso viel wie ein ?.

Das Interrobang ersann 1962 Martin K. Speckter, der eine amerikanische Werbeagentur leitete; es entsprang dem Wunsch eines Texters, „eine staunend gestellte Frage“ als einzelnes Zeichen schreiben zu können, und wurde eine Zeit lang sogar als Bleitype geschnitten und als Schreibmaschinenkugel gefertigt. Als gewöhnliches Satzzeichen setzte es sich nie durch, lebt aber in Unicode als U+203D und über TS1 in LaTeX weiter. Ehrlich gesagt gibt es in der Praxis kaum Gelegenheit dafür – ebenso wenig wie für gestapelte !! oder ?? in wissenschaftlicher Prosa, wo der Rat lautet, den Satz zu verstärken statt das Zeichen. Dennoch ist es gut zu wissen, dass für den Tag des Bedarfs ein eigener Befehl bereitliegt.

Eingabetabelle – was man tippt und was erscheint

EingabeAusgabeHinweise
??westliches Fragezeichen; sfcode 3000, der folgende Raum wird zum Satzabstand
?`¿Ligatur; funktioniert in OT1 wie in T1, der Backtick wird nicht gesetzt
!`¡Ligatur; Ausgabe identisch mit \textexclamdown
\textquestiondown¿expliziter Befehl; in T1 eine echte Glyphe auf Position 190
\textexclamdown¡expliziter Befehl; in T1 eine echte Glyphe auf Position 189
\textinterrobangbenötigt textcomp (TS1); Position 148
$n!$n!Fakultät; ! ist \mathclose, daher kein Raum auf beiden Seiten
\!(negativer Raum)kein Ausrufezeichen; ein Feinbefehl, der in Formeln 1,66663 pt zusammenzieht
? !? !japanische Zeichen voller Breite; danach kein Leerzeichen voller Breite tippen

Japanische ? und ! sind volle Breite – danach kein Leerzeichen tippen

Japanisch verwendet die Zeichen ? und ! voller Breite, und man tippt danach kein Leerzeichen voller Breite. Japanischfähige Engines wie upLaTeX oder LuaLaTeX mit luatexja behandeln sie als Satzzeichen und reservieren den nachfolgenden Raum automatisch. Auch die W3C-„Requirements for Japanese Text Layout (JLReq)“ legen fest, dass ein satzschließendes Frage- oder Ausrufezeichen ein volles Geviert einnimmt und ein Geviert Raum folgt – außer wenn unmittelbar eine schließende Klammer anschließt, dann wird bündig gesetzt. Ein eigenes Leerzeichen voller Breite legt sich hier auf das automatische und verdoppelt die Lücke. Auch den Umgang mit dem Restraum, wenn ein ? ans Zeilenende fällt, übernehmen die meisten Klassen und Pakete. Den Satzzeichenraum der Engine überlassen – das ist die Regel auf der japanischen Seite.

latex
\documentclass{ltjsarticle}
\begin{document}
本当ですか? はい、できました! 次に進みましょう。
\end{document}
  • In japanisch geprägten Manuskripten einheitlich und voller Breite verwenden. Ein verirrtes halbbreites ? oder ! verändert Zeilenende und Abstände, obwohl der Tonfall derselbe ist.
  • Westliche Zitate, Code und Eigennamen halbbreit belassen. Zitierte Zeichen werden getrennt von der japanischen Textrichtlinie behandelt.
  • Im Spanischen die Anfangszeichen prüfen. Nur das schließende ? oder ! zu schreiben und ¿ oder ¡ zu vergessen, ist ein sprachlicher, kein kosmetischer Fehler.
  • Im Französischen den Zwischenraum nie von Hand setzen. Das übernimmt babel mit [french]; „vor dem Zeichen kein Leerzeichen tippen“ als Teamregel festhalten.
  • Bei OT1-Dokumenten die spitzen Klammern verdächtigen. Ein < oder > im Fließtext wird stillschweigend zu ¡ oder ¿ – zuerst prüfen, ob \usepackage[T1]{fontenc} vorhanden ist.