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