Discussion:
Frage zur Breite von \rule
(zu alt für eine Antwort)
Friedrich Vosberg
2023-08-01 18:39:08 UTC
Permalink
Liebe Leute,

wie bekomme ich's hin, dass die Länge der horizontalen Linien in folgendem
Minimalbeispiel rechtsbündig im selben Abstand vom Seitenrand enden?

Mit bestem Gruß aus Leipzig
Friedrich Vosberg

\documentclass{minimal}
\begin{document}

eine Angabe
\parbox[t]{.6\linewidth}{\rule{\linewidth}{.4pt}\\\centerline{(Bitte tragen
Sie hier etwas ein.)}}

eine andere Angabe
\parbox[t]{.6\linewidth}{\rule{\linewidth}{.4pt}\\\centerline{(Bitte tragen
Sie hier etwas anderes ein.)}}

\end{document}
Thorsten Bonow
2023-08-01 19:33:04 UTC
Permalink
FV> Liebe Leute, wie bekomme ich's hin, dass die Länge der horizontalen Linien
FV> in folgendem Minimalbeispiel rechtsbündig im selben Abstand vom Seitenrand
FV> enden?

FV> Mit bestem Gruß aus Leipzig Friedrich Vosberg

FV> \documentclass{minimal} \begin{document}

FV> eine Angabe
FV> \parbox[t]{.6\linewidth}{\rule{\linewidth}{.4pt}\\\centerline{(Bitte tragen
FV> Sie hier etwas ein.)}}

FV> eine andere Angabe
FV> \parbox[t]{.6\linewidth}{\rule{\linewidth}{.4pt}\\\centerline{(Bitte tragen
FV> Sie hier etwas anderes ein.)}}

FV> \end{document}

Guten Abend,

ich muss gestehen, ich verstehe die Formulierung nicht. "die Länge der
horizontalen Linien"?

Sollen die Längen der horizontalen Linien unterschiedlich sein? Also so?

blabla _________
blablabla ______

Oder so?

blabla ______
blablabla ______

Und "rechtsbündig im selben Abstand vom Seitenrand enden" ist nicht doppelt
gemoppelt für "rechtsbündig" sondern am Ende der Linien ist tatsächlich noch
bei beiden der gleiche whitespace bis zum Rand? Also z. B.

blabla blabla blabla|
blabla _________ |
blablabla ______ |

Vielleicht hilft das zur Verdeutlichung, was ich verstehe:

\documentclass{minimal}
\begin{document}

eine Angabe\hfill
\parbox[t]{.6\linewidth}{\rule{\linewidth}{.4pt}\\\centerline{(Bitte tragen
Sie hier etwas ein.)}}\hspace{2.4cm}

eine andere Angabe\hfill
\parbox[t]{.6\linewidth}{\rule{\linewidth}{.4pt}\\\centerline{(Bitte tragen
Sie hier etwas anderes ein.)}}\hspace{2.4cm}

\end{document}

Grüße aus dem schönen Aachener Süden
Toto
--
Sent from my GNU Emacs running on GNU/Linux
Friedrich Vosberg
2023-08-02 18:18:20 UTC
Permalink
On 1. August 2023 at 21:33:04 CEST, "Thorsten Bonow"
Post by Thorsten Bonow
Sollen die Längen der horizontalen Linien unterschiedlich sein? Also so?
blabla _________
blablabla ______
Ja. Und ...
Post by Thorsten Bonow
blabla blabla blabla|
blabla _________ |
blablabla ______ |
... genau so meine ich's.

Mit bestem Gruß aus Leipzig
Friedrich Vosberg
Stefan Ram
2023-08-02 18:57:35 UTC
Permalink
Post by Thorsten Bonow
blabla blabla blabla|
blabla _________ |
blablabla ______ |
Das folgende ist ein Schnellschuß als Startpunkt für weitere
Anpassungen. Beabsichtigt ist, daß die Linie mindestens 10 em
breit ist und 3 em vor dem rechten Rand endet. Außerdem ist es
für plain TeX gedacht. Die Leerzeilen sind hier sehr signifikant.

\begingroup
\def\par{{\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil\leaders\hrule
\hskip10em plus1filll\kern3em
\parfillskip=0pt \finalhyphendemerits=0 \endgraf}}%
\parindent=0pt
Lorem ipsum dolor sit amet,

Lorem ipsum dolor sit amet, consectetur adipiscing elit,

Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor

Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore

Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore
magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore
magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat.

Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore
magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.

\endgroup

\end
Ulrich D i e z
2023-08-03 12:16:45 UTC
Permalink
Post by Friedrich Vosberg
Liebe Leute,
wie bekomme ich's hin, dass die Länge der horizontalen Linien in folgendem
Minimalbeispiel rechtsbündig im selben Abstand vom Seitenrand enden?
Lieber Friedrich Vosberg,

erstens ist "..., dass die Länge ... enden" kein korrektes Deutsch.
Zweitens ist eine Länge eine Quantität/eine physikalische Größe und
somit etwas Abstraktes, während das Verb "enden" sich hier aber wohl
nicht auf etwas Abstraktes bezieht, sondern auf etwas, das man sich
auch als sinnliche Anschauung vorstellen/denken kann.

Mir ist deshalb nicht ganz klar, was genau du möchtest.

Wie lautet die Regel, die den Verlauf und die Länge der Linien
bestimmen soll?

Wie lautet die Regel für die Platzierung der Bemerkungen, die
unterhalb der Linien stehen?
Post by Friedrich Vosberg
Mit bestem Gruß aus Leipzig
Friedrich Vosberg
\documentclass{minimal}
\begin{document}
eine Angabe
\parbox[t]{.6\linewidth}{\rule{\linewidth}{.4pt}\\\centerline{(Bitte tragen
Sie hier etwas ein.)}}
eine andere Angabe
\parbox[t]{.6\linewidth}{\rule{\linewidth}{.4pt}\\\centerline{(Bitte tragen
Sie hier etwas anderes ein.)}}
\end{document}
Generelle Bemerkungen:

Du möchtest offenbar mit (La)TeX irgendwelche Linien malen.

TeX malt, wenn man nichts anderes angibt, Linien, die mittels
\rule oder \hrule oder \vrule erzeugt werden, mit einer
Strichstärke von 0.4pt.

Mögliche Problemquelle wenn man Linien malt:

0.4pt als Standard-Strichstärke bei TeX ist recht dünn.

Wenn man Dokumente vor dem Druck kleiner skaliert, z.B., um
zwei Seiten des Dokuments nebeneinander auf eine Seite eines
Blattes Papier zu bekommen, werden die Strichstärken kleiner -
es kann recht schnell passieren, dass sie bei Kleinskalierungs-
aktionen so klein werden, dass z. B. ein herkömmlicher
Tintenstrahldrucker die betreffenden Linien nicht druckt.

Generell, wenn man Linien malt, muss man also einrechnen, ob
man das alles hinterher vielleicht mal kleiner skalieren will
und ob der verwendete Drucker noch mitmacht wenn die
Strichstärken der Linien durchs Kleinerskalieren kleiner sind.


Horizontale Linien kann man recht problemlos basteln, indem man
mit horizontalen \leaders der Form \hrule und mit \hskip
arbeitet.

Zum Beispiel bewirkt die Anweisung

\leaders\hrule\hskip .3\textwidth plus 1 fill

, wenn TeX beim Ausführen dieser Anweisung im horizontalen
Modus ist, in dem TeX Absätze selbst in Zeilen umbricht, dank
\hskip .3\textwidth plus 1 fill
das Erzeugen eines horizontalen Zwischenraums, dessen Breite
den in der betreffenden Absatzzeile verfügbaren horizontalen
Platz ausfüllt und mindestens ca. ein Drittel der Textbreite
beträgt.

Dank \leaders\hrule ist dieser horizontale Zwischenraum
nicht leer, sondern mit einer horizontalen Linie auf der
Basislinie der betreffenden Absatzzeile gefüllt, die TeX,
da bei \hrule keine Parameter angegeben sind, in einer Strichstärke
von 0.4pt zeichnet.
(Wenn man diese horizontale Linie als rechteckigen Balken
betrachtet, ist die untere Begrenzungslinie dieses Balkens
mit der Basislinie der betreffenden Absatzzeile identisch
und die obere Begrenzungslinie dieses Balkens liegt 0.4pt
über der Basislinie der betreffenden Absatzzeile.)

Zum Thema "in der Absatzzeile verfügbarer horizontaler Platz":
Wieviel Platz da verfügbar ist, hängt davon ab, was in der
betreffenden Absatzzeile sonst noch alles vor und/oder hinter
diesem horizontalen Zwischenraum stehen soll.
Ggfs muss man mittels `\nobreak` oder ähnlichem dafür sorgen,
dass die folgende "Zwischenraumanweisung" selbst nicht als ein
Indikator dafür gesehen wird, dass an der betreffenden Stelle
im zu setzenden Text ggfs statt eines horizontalen Zwischenraums
ein Zeilenumbruch gemacht werden darf.
Zum Thema "horizontale Zwischenräume und Zeilenumbrüche":
Ein horizontaler Zwischenraum an einem Zeilenumbruch wird
normalerweise entfernt - Stichwort "discardable glue".
D.h. er bewirkt normalerweise nicht, dass am rechten Ende der
Zeile vor dem Umbruch oder am linken Ende der Zeile nach dem
Umbruch entsprechend eingerückt wird.

Wenn du also eine Linie willst, die die Absatzzeile bis auf
einen zusätzlichen rechten Rand horizontal ausfüllt, kannst du
zwei horizontale Zwischenräume hintereinander setzen, einen
mittels \leaders\hrule mit Linie gefüllt, einen leer:

\nobreak \leaders\hrule\hskip .3\textwidth plus 1 fill \nobreak \hskip 2cm \null

, gefolgt von \\ oder \par oder was auch immer geeignet
erscheint, (auch) das Zeilenende zu bewirken.




Auch wenn mir nicht ganz klar ist, was genau du möchtest, habe
ich trotzdem auf Verdacht für den horizontalen Modus ein Makro
\Schreibstrich mit der folgenden Syntax zusammengefrickelt:

\Schreibstrich{<Minimalbreite des Schreibstriches>}%
{<horizontaler Leerraum am Absatzzeilenende>}%
{<Text, der mittig unter den Schreibstrich soll>}

Dieses Makro ist dazu gedacht, entlang der Basislinie
der Absatzzeile einen horizontalen Strich zu malen, der mindestens
eine Länge hat, die der <Minimalbreite des Schreibstriches> entspricht
und die Absatzzeile so ausfüllt, dass rechts von diesem Strich bis zum
rechten Textrand ein leerer Zwischenraum der Breite
<horizontaler Leerraum am Absatzzeilenende> bestehen bleibt.

Unter dem Strich erscheint, horizontal zum Strich zentriert,
der <Text, der mittig unter den Schreibstrich soll>.

Da die Strichlänge variabel sein soll, braucht man für die
Positionierung des Textes, der unter den Linien horizontal zentriert
sein soll, eine Möglichkeit, Anfangs- und Endpunkte der Linien zu
referenzieren.

Das kann man z.B. mit TikZ machen, indem man picture-
Umgebungen verwendet und dort, wo TeX die Anfangs- und Endpunkte
der Linien setzt, benannte Koordinaten setzt und mittels
der Umgebungsoptionen "overlay" und "remember picture"
speichert und anderen picture-Umgebungen zugänglich macht.

Bei diesem Ansatz muss man aber die .tex-Datei mindestens
zweimal compilieren und die diesbezüglichen Meldungen von
TeX auf der Konsole und in der .log-Datei beachten.


\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand\Schreibstrich[3]{%
% Speichere die Koordinate des linken Strichendes
% unter dem Namen LineStart:
\begin{tikzpicture}[overlay, remember picture]%
\coordinate (LineStart) at (0,0) ;
\end{tikzpicture}%
% Male den Strich:
\nobreak \leaders\hrule\hskip\dimexpr(#1)\relax plus 1 fill
% Speichere die Koordinate des rechten Strichendes
% unter dem Namen LineEnd und schreibe den Text unter
% den Strich:
\begin{tikzpicture}[overlay, remember picture]%
\coordinate (LineEnd) at (0,0) ;
\node [below] (LineText) at ($(LineStart)!0.5!(LineEnd)$) {#3};
\end{tikzpicture}%
% Mache am Zeilenende einen horizontalen Leerraum:
\nobreak \hskip\dimexpr(#2)\relax\null
}%

\begin{document}

\noindent\hrule

\vskip 1.5cm

\hfill Das sind 2cm: \leaders\hrule\hskip 2cm \null

\vskip 1.5cm

\noindent
Eine Angabe:~%
\Schreibstrich{.3\textwidth}{2cm}{(Bitte tragen Sie hier etwas ein.)}%

\vskip 1.5cm

\noindent
Eine andere Angabe:~%
\Schreibstrich{.3\textwidth}{2cm}{(Bitte tragen Sie hier etwas anderes ein.)}%

\vskip 1.5cm

\noindent\hrule

\end{document}



Man beachte, dass bei diesem Beispiel die Linien bzw. die Balken, die
die Striche der Linien darstellen, ihre obere Begrenzungslinie oberhalb der
Basislinie der betreffenden Textzeile haben.
Da mag man aber vielleicht schreiben.
Deshalb wird oft gewünscht, dass diese Balken sich ein kleines bisschen
unterhalb der Basislinie der betreffenden Textzeile befinden.

Um dies zu erreichen, kann man bei der betreffenden \hrule-Anweisung
eine etwas größere Tiefe und eine negative Höhe angeben, die betragsmäßig
kleiner als die Tiefe sein muss:


\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand\Schreibstrich[3]{%
% Speichere die Koordinate des linken Strichendes
% unter dem Namen LineStart:
\begin{tikzpicture}[overlay, remember picture]%
\coordinate (LineStart) at (0,0) ;
\end{tikzpicture}%
% Male den Strich etwas unterhalb der Basislinie der Absatzzeile:
\nobreak \leaders\hrule depth .8pt height -.4pt \hskip\dimexpr(#1)\relax plus 1 fill
% Speichere die Koordinate des rechten Strichendes
% unter dem Namen LineEnd und schreibe den Text unter
% den Strich:
\begin{tikzpicture}[overlay, remember picture]%
\coordinate (LineEnd) at (0,0) ;
\node [below] (LineText) at ($(LineStart)!0.5!(LineEnd)+(0, -.8pt)$) {#3};
\end{tikzpicture}%
% Mache am Zeilenende einen horizontalen Leerraum:
\nobreak \hskip\dimexpr(#2)\relax\null
}%

\begin{document}

\noindent\hrule

\vskip 1.5cm

\hfill Das sind 2cm: \leaders\hrule\hskip 2cm \null

\vskip 1.5cm

\noindent
Eine Angabe:~%
\Schreibstrich{.3\textwidth}{2cm}{(Bitte tragen Sie hier etwas ein.)}%

\vskip 1.5cm

\noindent
Eine andere Angabe:~%
\Schreibstrich{.3\textwidth}{2cm}{(Bitte tragen Sie hier etwas anderes ein.)}%

\vskip 1.5cm

\noindent\hrule

\end{document}



Wenn man keine durchgehenden Linien, sondern einen anderen Linienstil möchte,
ist das auch kein Problem:

Bei der Anweisung

\nobreak \leaders\hrule\hskip\dimexpr(<Mindestbreite des Striches>)\relax plus 1 fill

kann man statt \hrule auch eine \hbox nehmen, die eine Instanz dessen enthält,
womit der horizontale Zwischenraum gefüllt wird.

Also etwas in der Art

\nobreak \leaders\hbox to 3pt{\hfill.\hfill}\hskip\dimexpr(<Mindestbreite des Striches>)\relax plus 1 fill
.

Um sich inspirieren zu lassen, kann man z.B. das Makro \dotfill anschauen.

Da TeX bei der Frage, wie dieser Zwischenraum mit Instanzen des als \hbox
Angegebenen gefüllt wird, aber ein paar Eigenheiten hat, die, je nachdem,
ob man \leaders oder \cleaders oder \xleaders verwendet, unterschiedlich
sind, und nicht unbedingt zum optimalen Ergebnis führen, schlage ich eine
andere Vorgehensweise vor:

Man lasse diesen horizontalen Zwischenraum einfach leer:

\nobreak \hskip\dimexpr(<Mindestbreite des Striches>)\relax plus 1 fill

und verwende die vom TiKz-Paket bereitgestellten Mittel, um die Linie
zwischen den Koordinaten zu zeichnen:


\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand\Schreibstrich[3]{%
% Speichere die Koordinate des linken Strichendes
% unter dem Namen LineStart:
\begin{tikzpicture}[overlay, remember picture]%
\coordinate (LineStart) at (0,0) ;
\end{tikzpicture}%
% Leerer Zwischenraum in Strichbreite:
\nobreak \hskip\dimexpr(#1)\relax plus 1 fill
% Speichere die Koordinate des rechten Strichendes
% unter dem Namen LineEnd und male den Strich und schreibe
% den Text unter den Strich:
\begin{tikzpicture}[overlay, remember picture]%
\coordinate (LineEnd) at (0,0) ;
% Linie mit Text darunter von LineStart nach LineEnd malen:
% Linienstil ist hier densely dotted, pgfmanual.pdf erklärt
% die verschiedenen Linienstile und Optionen des \draw-Befehls.
% Der Text, der unter den Strich soll, wird im "node"-Teil zur
% Beschriftung der Linie.
\draw [densely dotted, black, line width=.4pt]%
($(LineStart)+(0,-.4pt)$)
-- ($(LineEnd)+(0,-.4pt)$)
node [below] at ($(LineStart)!0.5!(LineEnd)+(0,-.4pt)$) {#3};
\end{tikzpicture}%
% Mache am Zeilenende einen horizontalen Leerraum:
\nobreak \hskip\dimexpr(#2)\relax\null
}%

\begin{document}

\noindent\hrule

\vskip 1.5cm

\hfill Das sind 2cm: \leaders\hrule\hskip 2cm \null

\vskip 1.5cm

\noindent
Eine Angabe:~%
\Schreibstrich{.3\textwidth}{2cm}{(Bitte tragen Sie hier etwas ein.)}%

\vskip 1.5cm

\noindent
Eine andere Angabe:~%
\Schreibstrich{.3\textwidth}{2cm}{(Bitte tragen Sie hier etwas anderes ein.)}%

\vskip 1.5cm

\noindent\hrule

\end{document}



Mit freundlichem Gruß

Ulrich

Lesen Sie weiter auf narkive:
Loading...