Manche TTF- oder OTF-Fonts haben Leerzeichen, die eben nicht (ganz) "leer" sind, sondern einen Hintergrund zeigen o. ä. (beispielsweise der paintball-font). Bei der Nutzung mit LuaLaTeX wird aber anscheinend nicht das echte Leerzeichen des jeweiligen Fonts genutzt, sondern es gibt eine Lücke. Wie kann ich das vermeiden?

EDIT: Ein MWE habe ich inzwischen zusammengestellt, zusammen mit meiner Umweg-Lösung:

Open in Online-Editor
\documentclass[paper=a4,fontsize=17pt]{scrartcl}

 \usepackage{fontspec}

 \usepackage[babelshorthands]{polyglossia}

 \setmainlanguage[spelling=new]{german}

 \usepackage{listings}
 \setmonofont{Paintball}

\begin{document}

\makeatletter
\def\lst@visiblespace{\char32}
\makeatother

\lstset{language=Pascal,
stringstyle=\ttfamily,
showstringspaces=true}

\begin{center}

\texttt{' Viel Erfolg ! '}\\

\lstinline|' Viel Erfolg ! '|

\end{center}

\end{document}

Die erste Zeile stellt dar, was ich nicht gewünscht habe, nämlich weiße Flecken in der Zeile. So sieht mein Ergebnis aus:

MWE-Ergebnis

gefragt 12 Nov '16, 12:47

aquila's gravatar image

aquila
4114
Akzeptiert-Rate: 0%

bearbeitet 27 Dez '16, 17:00

pdftex hat für so etwas \pdfinterwordspaceon (siehe pdfTeX Manual). Ob luatex so etwas auch hat, weiß ich nicht. Je nach Anwendung könnte man eventuell mit visible spaces arbeiten, wie das beispielsweise bei \verb*|test text| gemacht wird. Da ich aber weder den genannten Font kenne, noch ein Anwendungsbeispiel, kann ich nicht mehr dazu sagen.

(12 Nov '16, 13:27) saputello

Ah, die Idee mit verb* gefällt mir! Auf den anderen Vorschlag muss ich bei luatex wohl verzichten. Danke!

(12 Nov '16, 13:41) aquila

Leider gibt das verb*-Kommando ein Leerzeichen nur mit dem "open-box"-Symbol wieder, aber nicht als echtes Leerzeichen. Ohne Stern gibt es wieder die bekannten Lücken ...

(12 Nov '16, 15:49) aquila
1

Du hast es eventuell nicht bemerkt, aber hinter meinem Kommentar verbergen sich ein paar Fragen, u. a. die nach einem ganz konkreten Beispiel, aus dem hervor geht, wie das verwendet werden soll. Wenn Du ein solches ergänzt und dabei nach Möglichkeit einen frei verfügbaren Font mit Quellenangabe oder gar einen bei gängigen TeX-Distributionen wie TeX Live verfügbaren Font verwendest, würde das Deine Chance auf eine Antwort (nicht zwingend von mir, sondern auch von anderen) vermutlich verbessern.

(19 Nov '16, 13:22) saputello

@saputello: Doch, das hatte ich im Prinzip schon bemerkt, aber zu der Zeit, als ich die Frage stellte, war ich etwas knapp mit meiner Zeit. Inzwischen habe ich über einen Umweg das Problem (für mich) gelöst. Dennoch frage ich mich, ob es besser bzw. einfacher ginge, wenn ich nur wüsste, wie???

(27 Dez '16, 16:48) aquila

Unabhängig von der Engine, die man verwendet, kann man natürlich das Leerzeichen aktiv machen und durch ein beliebiges anderes Zeichen ersetzen:

Öffne in Overleaf
\documentclass{article}

\usepackage{fontspec}
\usepackage[ngerman]{babel}

\begingroup
  \catcode`\ =\active%
  \def\x{\def\filledspace##1{\catcode`\ \active\def {##1}}}%
\expandafter\endgroup\x

\newenvironment{linefillspace}{%
  \par
  \filledspace{/}% Statt des Leerzeichens einen Schrägstrich „/“ verwenden.
}{\par}

\begin{document}

\begin{linefillspace}%
Dies ist ein Beispieltext, den es zu verarbeiten gilt, um zu
zeigen, was dabei heraus kommt, wenn man die Wortzwischenräume durch ein
belieges anderes Zeichen ersetzt.
\end{linefillspace}

\end{document}

Genau ein / zwischen den Wörtern.

Wichtig dabei ist allerdings nicht, nur, dass dann eben genau dieses Zeichen eingefügt wird, sondern auch, dass genauso viele Zeichen davon eingefügt werden, wie vorhanden sind und zwar auch am Anfang einer Source-Zeile. Mit

Öffne in Overleaf
\begin{linefillspace}
  Dies ist ein Beispieltext, den es zu verarbeiten gilt, um zu
  zeigen, was dabei heraus kommt, wenn man die Wortzwischenräume durch ein
  belieges anderes Zeichen ersetzt.
\end{linefillspace}

Bekäme man daher ein anderes Ergebnis. Auch die ungleich langen Zeilen (mit entsprechenden overfull \hbox Meldungen) kommen daher.

Man kann aber mit Hilfe von leaders die Anzahl der eingefügten Zeichen und die damit überspannte Länge variabler gestalten:

Öffne in Overleaf
\documentclass{article}

\usepackage{fontspec}
\usepackage[ngerman]{babel}

\begingroup
  \catcode`\ =\active%
  \def\x{\def\filledspace##1{\catcode`\ \active\def {##1}}}%
\expandafter\endgroup\x

\newenvironment{linefillspace}{%
  \par
  \filledspace{%
    \leavevmode
    \cleaders \hbox to .2em{\hss/\hss}\hskip .5em plus .1em minus .1em
  }%
}{\par}

\begin{document}

\begin{linefillspace}
Dies ist ein Beispieltext, den es zu verarbeiten gilt, um zu%
 zeigen, was dabei heraus kommt, wenn man die Wortzwischenräume durch ein%
 ganz beliebiges anderes Zeichen ersetzt.
\end{linefillspace}

Mit erzwungen, unterschiedlichen Wortabständen:

\begin{linefillspace}\sloppy
Dies ist ein Beispieltext, den es zu verarbeiten gilt, um zu%
 zeigen, was dabei heraus kommt, wenn man die Wortzwischenräume durch ein%
 ganz \mbox{beliebiges} anderes Zeichen ersetzt.
\end{linefillspace}

\end{document}

Mit variablem Abstand

Statt des „/“ kannst du natürlich jedes andere Zeichen jedes beliebigen Fonts verwenden. Die Breite der Box mit dem Zeichen, die Abstände, in denen diese eingefügt werden und die Variabilität dieses Abstandes ist ebenfalls ganz nach Belieben veränderbar.

Da ich über den Font Paintball nicht verfüge, zeige ich kein Beispiel damit. Aber prinzipiell wäre statt „/“ auch ein \char32 möglich.

Permanenter link

beantwortet 24 Apr '18, 13:29

Ijon%20Tichy's gravatar image

Ijon Tichy
9.6k31227
Akzeptiert-Rate: 53%

bearbeitet 24 Apr '18, 13:31

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×42
×24
×13

gestellte Frage: 12 Nov '16, 12:47

Frage wurde gesehen: 3,177 Mal

zuletzt geändert: 24 Apr '18, 13:31