Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[lualatex]: En-Dash-Ligatur unterdrücken

39 views
Skip to first unread message

Uwe Siart

unread,
May 11, 2020, 3:42:29 PM5/11/20
to
Hallo,

weiß hier jemand, wie man bei LuaLaTeX verhindern kann, dass die Eingabe
»--« zu einem EN DASH wird? Ich möchte die Ligatur nicht global
abschalten, aber in Einzelfällen bei Bedarf unterdrücken können. Bei
pdfLaTeX geht das mit einer leeren Gruppe dazwischen. Bei LuaLaTeX ist
das aber wirkungslos.

Bei diesem MB

\documentclass{article}
\begin{document}
-{}-
\end{document}

erscheinen mit pdfLaTeX zwei Trennstriche, mit LuaLaTeX kommt ein EN
DASH.

--
Uwe

Ulrike Fischer

unread,
May 11, 2020, 4:11:48 PM5/11/20
to
Am Mon, 11 May 2020 21:42:26 +0200 schrieb Uwe Siart:

> Hallo,
>
> weiß hier jemand, wie man bei LuaLaTeX verhindern kann, dass die Eingabe
> »--« zu einem EN DASH wird?

https://tex.stackexchange.com/a/146728/2388


--
Ulrike Fischer
https://www.troubleshooting-tex.de/

Uwe Siart

unread,
May 12, 2020, 1:39:34 AM5/12/20
to
r...@zedat.fu-berlin.de (Stefan Ram) writes:

> \documentclass{article}
> \begin{document}
> -\/-
> \end{document}

Hallo Ulrike, hallo Stefan,

vielen Dank für die Hinweise. Auf den Artikel in TeX.SE bin ich bei
meiner Suche tatsächlich nicht gestoßen. Falsche Suchbegriffe ...

Den »Trick« mit der Kursivkorrektur habe mal in irgendeinem Posting
gefunden. Da habe ich mich aber gefragt, ob es nicht eine Möglichkeit
ohne Nebenwirkungen (Einfluss auf den Abstand) gibt. Das ist wohl nicht
der Fall. Aber man kann damit leben.

--
Uwe

Ulrike Fischer

unread,
May 13, 2020, 3:51:15 AM5/13/20
to
Am Tue, 12 May 2020 07:39:32 +0200 schrieb Uwe Siart:

> Den »Trick« mit der Kursivkorrektur habe mal in irgendeinem Posting
> gefunden.

Es ist kein Trick, sondern der richtige Weg. Deine alte Methode war
ein "Trick", weil -{}- auf einen Seiteneffekt vertraut (der aber
auch mit pdflatex nicht immer funktioniert).

--
Ulrike Fischer
http://www.troubleshooting-tex.de/

Uwe Siart

unread,
May 13, 2020, 5:04:36 AM5/13/20
to
Ulrike Fischer <ne...@nililand.de> writes:

> Es ist kein Trick, sondern der richtige Weg. Deine alte Methode war
> ein "Trick", weil -{}- auf einen Seiteneffekt vertraut (der aber
> auch mit pdflatex nicht immer funktioniert).

Danke für die Erklärung. Das ist gut zu wissen. Dass man den Befehl für
Kursivkorrektur verwendet, um Ligaturen aufzubrechen, klang für mich
bisher noch viel mehr nach missbräuchlicher Ausnutzung eines
Seiteneffektes.

--
Uwe

Axel Berger

unread,
May 13, 2020, 6:51:43 AM5/13/20
to
Ulrike Fischer wrote:
> weil -{}- auf einen Seiteneffekt vertraut

Könntest Du das bitte genauer erklären? Ich kenne die leere Gruppe sonst
oft zum Abtrennen, vor allem als Alternative zum Leerzeichen nach
Makros. Deshalb verstehe ich hier den "Seiteneffekt" nicht.

Danke


--
/¯\ No | Dipl.-Ing. F. Axel Berger Tel: +49/ 221/ 7771 8067
\ / HTML | Roald-Amundsen-Straße 2a Fax: +49/ 221/ 7771 8069
 X in | D-50829 Köln-Ossendorf http://berger-odenthal.de
/ \ Mail | -- No unannounced, large, binary attachments, please! --

eu_an...@web.de

unread,
May 13, 2020, 5:46:51 PM5/13/20
to
Uwe Siart schrieb:

> weiß hier jemand, wie man bei LuaLaTeX verhindern kann, dass die Eingabe
> »--« zu einem EN DASH wird? Ich möchte die Ligatur nicht global
> abschalten, aber in Einzelfällen bei Bedarf unterdrücken können.

"verhindern, dass die Eingabe »--« zu einem EN DASH wird",
kann alles mögliche bedeuten.

Ein Mechanismus, der bewirkt, dass bei der Eingabe »--«
einfach gar nichts entsteht, würde auch verhindern, dass
die Eingabe »--« zu einem EN DASH wird.

Da beim deutschen Textsatz wird so gut wie nie zwischen
Bindestrichen und Trennstrichen unterschieden.

Ich gehe einfach mal davon aus -- denn diese Interpretation
liegt nahe --, dass Du in der Ausgabedatei (.dvi-Datei/
.pdf-Datei) Trennstriche in einer Anzahl haben möchtest, die
Du nach Belieben vorgeben kannst.


> Bei
> pdfLaTeX geht das mit einer leeren Gruppe dazwischen. Bei LuaLaTeX ist
> das aber wirkungslos.

Es geht also nicht darum, das Resultat der Eingabe »--«, also
der Eingabe zweier Hyphen/Minus (Code-Point in ASCII: 45(dec)),
dahingehend zu ändern, dass diese Eingabe nicht mehr zur
Entstehung von Halbgeviertstrichen in der .dvi-Datei/.pdf-Datei
(und vielleicht zur Entstehung von etas anderem) führt, sondern
es geht darum, _eine_ _andere_ _Eingabe_ zu finden, die in der
.pdf-Datei zu einer Sequenz von Trennstrichen führt?

Das TeXbook sagt,
- ergebe ein "hyphen", also einen Trennstrich,
-- ergebe einen en-Dash (Halbgeviertstrich),
--- ergebe einen em-Dash (Geviertsrich).

Die folgenden Varianten scheinen sowohl mit LuaTeX als auch mit
traditionellem TeX zu funktionieren:



-\null-\null-

-\kern0pt-\kern0pt-

\discretionary{-}{}{-}\discretionary{-}{}{-}\discretionary{-}{}{-}

-\nobreak-\nobreak-

-\penalty0 -\penalty0 -

\leavevmode\hbox{-}\hbox{-}\hbox{-}



Was mit auf LuaTeX basierenden Engines auch nicht funktioniert,
aber mit auf traditionellem TeX basierenden Engines funktioniert,
ist das Einfügen eines "Dummy-Assignments": -\let\foo=\foo- .



Wie wäre es mit einem Makro \nolighyphens{<Anzahl>} bei dem Du
die Anzahl an Trennstrichen angeben kannst?

Bei der Implementierung kann man unterschiedlich vorgehen, je
nachdem, ob man erlauben möchte, dass bei Zeilenumbrüchen
Trennstriche am Zeilenende unter Umständen ein ganz klein wenig
in den rechten Seitenrand hineinragen, oder dies nicht erlauben
möchte.



Bei der folgenden Variante kann es dazu kommen, dass der letzte
Trennstrich an einem Zeilenende ein bisschen in den rechten
Seitenrand hineinragt und man auf der Konsole und in der .log-
Datei eine entsprechende Overfull \hbox-Meldung bekommt:



\documentclass{article}

% Bei Zeilen, die zu lang sind, ein kleines schwarzes Rechteck-
% chen in en rechten Seitenrand malen:
% \overfullrule=5pt

\makeatletter
\newcommand*\nolighyphens[1]{%
\expandafter\nolighyphensloop
\expandafter{\romannumeral\number\number#1 000}{}%
}%
\newcommand*\nolighyphensloop[2]{%
\ifx\relax#1\relax
\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
{\leavevmode#2}{%
\expandafter\ifx\expandafter\relax\@gobble#1\relax
\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
{%
% Don't use \discretionary with the last hyphen to avoid
% \baselineskip after the last line in case that line being
% too long:
\expandafter\nolighyphensloop
\expandafter{\@gobble#1}{#2\hbox{-}}%
}{%
% use \discretionary to allow linebreaks
\expandafter\nolighyphensloop
\expandafter{\@gobble#1}{#2\hbox{-}\discretionary{}{}{}}%
}%
}%
}%
\makeatother

\begin{document}

%%%%%%%%%%%%%%%%%%%%% Textbreite malen: %%%%%%%%%%%%%%%%%%%%%%%%%
\hbox to\hsize{%
\hrulefill
\vbox{\hbox{\lower.3\ht\strutbox\hbox{Textbreite}}}%
\hrulefill\null
}%
\kern-\baselineskip
\hbox to\hsize{%
\vrule depth.3\ht\strutbox\hfill\vrule depth.3\ht\strutbox
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\nolighyphens{480}

%%%%%%%%%%%%%%%%%%%%% Textbreite malen: %%%%%%%%%%%%%%%%%%%%%%%%%
\hbox to\hsize{%
\vrule height .6\ht\strutbox\hfill\vrule height .6\ht\strutbox
}%
\kern-\baselineskip
\hbox to\hsize{%
\hrulefill
\vbox to.6\ht\strutbox{\vtop{\hbox{Textbreite}}}%
\hrulefill\null
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\end{document}



Bei der folgenden Variante wird immer erst ein Whitespace in der
Breite des Trennstriches mit einem anschließenden entsprechenden
negativen \hskip gemacht und dann der Trennstrich geschrieben.
Auf diese Weise gibt es u.U. auch zu breite Zeilen und
entsprechende Meldungen im .log-File und auf der Konsole, aber
die zu große Breite rührt nicht von sichtbarem Textmaterial her,
sondern vom Whitespace am Zeilenende, welcher erhalten bleibt,
weil der negative \hskip erst nach dem Zeilenwechsel erfolgen
würde, wo er als "discardable glue" dann gar nicht gemacht wird.



\documentclass{article}

% Bei Zeilen, die zu lang sind, ein kleines schwarzes Rechteck-
% chen in en rechten Seitenrand malen:
% \overfullrule=5pt

\makeatletter
\newcommand*\nolighyphens[1]{%
\expandafter\nolighyphensloop
\expandafter{\romannumeral\number\number#1 000}{}%
}%
\newcommand*\nolighyphensloop[2]{%
\ifx\relax#1\relax
\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
{\leavevmode#2}{%
\expandafter\nolighyphensloop
\expandafter{\@gobble#1}{%
#2%
\phantom{\hbox{-}}%
\hbox{-}{\setbox1=\lastbox\hskip-\wd1 \box1}%
}%
}%
}%
\makeatother

\begin{document}

%%%%%%%%%%%%%%%%%%%%% Textbreite malen: %%%%%%%%%%%%%%%%%%%%%%%%%
\hbox to\hsize{%
\hrulefill
\vbox{\hbox{\lower.3\ht\strutbox\hbox{Textbreite}}}%
\hrulefill\null
}%
\kern-\baselineskip
\hbox to\hsize{%
\vrule depth.3\ht\strutbox\hfill\vrule depth.3\ht\strutbox
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\nolighyphens{480}

%%%%%%%%%%%%%%%%%%%%% Textbreite malen: %%%%%%%%%%%%%%%%%%%%%%%%%
\hbox to\hsize{%
\vrule height .6\ht\strutbox\hfill\vrule height .6\ht\strutbox
}%
\kern-\baselineskip
\hbox to\hsize{%
\hrulefill
\vbox to.6\ht\strutbox{\vtop{\hbox{Textbreite}}}%
\hrulefill\null
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\end{document}



Allerdings kommen mir meine Versuche grade ziemlich unelegant
vor und ich habe das Gefühl, dass es sein könnte, dass ich
grade ziemlich auf der Leitung stehe und es auch viel einfacher
geht.

Deshalb habe ich die Sache auf TeX-LaTeX StackExchange
zur Diskussion gestellt, allerdings nicht mit Trennstrichen,
sondern mit Buchstaben "A" bzw "B":

URL: <https://tex.stackexchange.com/q/543996/118714>


Mit freundlichem Gruß

Ulrich

Uwe Siart

unread,
May 15, 2020, 1:42:30 AM5/15/20
to
eu_an...@web.de writes:

> "verhindern, dass die Eingabe »--« zu einem EN DASH wird",
> kann alles mögliche bedeuten.

Hallo Ulrich,

uuuups, ich hätte ja nicht gedacht, was meine Frage anrichten kann ;-)

Es ging mir tatsächlich nur um die zwei Striche. Anwendungsfall ist zum
Beispiel ein Auslassungszeichen in Finanzdokumenten - ein Strich für
jede Dezimalstelle. Also um mal »-,--« statt »0,00« schreiben zu können.
Manchmal wird dadurch stärker betont, dass eine Finanzposition nicht
besetzt ist.

Aber deine Anregungen werde ich mir auch mal merken.

--
Uwe
0 new messages