Zeilenabstand erzwingen

Layout von Seiten, Rändern, Fusszeilen, usw, modifizieren
Roman_95
Forum-Anfänger
Forum-Anfänger
Beiträge: 40
Registriert: So 5. Aug 2018, 02:07

Zeilenabstand erzwingen

Beitrag von Roman_95 »

Hallo zusammen,

ich habe ein Problem mit dem Verwenden großer Schrift in moderncv. Die header-Definition die ich verwenden möchte setzt den Namen mit dem Befehl \fontsize{34}{36}. Dieser Befehl setzt den Text in der an die angegebene Schrifgröße nächsten verfügbaren. Soweit so klar. Was ich nicht verstehe ist, dass ich mit dem zweiten Argument (hier 36) nicht den Abstand der Grundlinien ändern kann, wofür dieses ja vorhanden ist. Aktuell ist die Schrift doch arg eng beieinander. Das MM zeigt mein Problem, die Änderung des zweiten Arguments bewirkt nichts.

Gibt es keine Möglichkeit den Abstand etwas zu erhöhen? Ich denke 1-2 pt würden schon reichen.

VG Roman

Code: Alles auswählen

\documentclass{letter}
\usepackage{lmodern,microtype}
\usepackage{anyfontsize}		% „flexible“ Schriftgrößenwahl
\usepackage{hyphenat}			% Silbentrennung unterbinden
\usepackage{calc}				% \widthof{} verfügbar machen

\begin{document}		% minipages um frühzeitigen Zeilenumbruch zu erzwingen
	\begin{minipage}{\widthof{Höhlenmensch}}
		{Höhlenmensch \nohyphens{Hausbauer} Hyperraumreisender}
	\end{minipage}
	\newline
	\begin{minipage}{0.33\textwidth}
		{\Huge Höhlenmensch \nohyphens{Hausbauer} Hyperraumreisender}
	\newline
		{\fontsize{34}{36}\selectfont Höhlenmensch \nohyphens{Hausbauer} Hyperraumreisender}
	\newline
		{\fontsize{34}{100}\selectfont Höhlenmensch \nohyphens{Hausbauer} Hyperraumreisender}
	\end{minipage}
\end{document}

MoeWe
Forum-Guru
Forum-Guru
Beiträge: 266
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Beitrag von MoeWe »

Das zweite Argument tut etwas, wenn Du den Absatz beendest, während es noch Wirkung hat. Das hängt damit zusammen, dass bestimmte Größen bei TeX absatzbezogen sind und dort der Wert am Ende des Absatzes gilt.

Daher wird z.B. in guten Einführungen statt {\huge Groß}\par lieber {\huge Groß\par} gezeigt.

Code: Alles auswählen

\documentclass{letter}
\usepackage{lmodern,microtype}
\usepackage{anyfontsize}
\usepackage{hyphenat}
\usepackage{calc}

\begin{document}      % minipages um frühzeitigen Zeilenumbruch zu erzwingen
   \begin{minipage}{\widthof{Höhlenmensch}}
      {Höhlenmensch \nohyphens{Hausbauer} Hyperraumreisender}
   \end{minipage}

   \begin{minipage}{0.33\textwidth}
      {\Huge Höhlenmensch \nohyphens{Hausbauer} Hyperraumreisender\par}
      {\fontsize{34}{36}\selectfont Höhlenmensch \nohyphens{Hausbauer} Hyperraumreisender\par}
      {\fontsize{34}{100}\selectfont Höhlenmensch \nohyphens{Hausbauer} Hyperraumreisender\par}
   \end{minipage}
\end{document}
Siehe z.B. https://tex.stackexchange.com/q/148508/35864 https://tex.stackexchange.com/q/444039/35864 https://tex.stackexchange.com/q/322256/35864 https://texwelt.de/fragen/1852/kann-ich ... -verwenden

Roman_95
Forum-Anfänger
Forum-Anfänger
Beiträge: 40
Registriert: So 5. Aug 2018, 02:07

Beitrag von Roman_95 »

Danke für die sehr schnelle fundierte Antwort, ich komme erst jetzt dazu mir das Ganze nochmal anzugucken.

Im MM funktioniert das ja einwandfrei, ich habe nun leider das Problem dass die Definition des entsprechenden Absatzes in einer .sty-Datei ist: Setze ich den Befehl an die Stelle wo er für mein Verständnis hingehört: \namestyle{\@firstname\ \@lastname\par} bekomme ich folgende Fehlermeldung: „Paragraph ended before \namestyle was complete. \makecvtitle.“ Andere sinnvolle Orte für die \par kann ich mir nicht erschließen. Im MM ist der Code der mit dem Setzen des Namens im Lebenslauf-Kopf zusammenhängt. Der o.g. Befehl ist in der ersten minipage. Die Definition des \namestyle-Befehls ist wie folgt:

Code: Alles auswählen

[t]\renewcommand*{\namestyle}[1]{{\namefont\textcolor{color0}{#1}}}
Gibt es also für .sty-Dateien andere Konstrukte, um ebenfalls den Absatzumbruch an der gewünschten Stelle zu erzielen?

Code: Alles auswählen

\ifthenelse{\lengthtest{\makecvheadnamewidth=0pt}}% check for dummy value (equivalent to \ifdim\makecvheadnamewidth=0pt)
    {\setlength{\makecvheadnamewidth}{\textwidth-\makecvheaddetailswidth-\makecvheadpicturewidth}}%
    {}%
  \@initializebox{\makecvheadnamebox}%
  \savebox{\makecvheadnamebox}{%
    \begin{minipage}[b]{\makecvheadnamewidth}%
      \if@left\raggedright\fi%
      \if@right\raggedleft\fi%
      \namestyle{\@firstname\ \@lastname\par}%
      \ifthenelse{\equal{\@title}{}}{}{\\[1.25em]\titlestyle{\@title}}
      %    
\end{minipage}}%
  % rendering
  \if@left%
    \usebox{\makecvheadnamebox}%
    \hfill%
    \llap{\usebox{\makecvheaddetailsbox}}% \llap is used to suppress the width of the box, allowing overlap if the value of makecvheadnamewidth is forced
    \usebox{\makecvheadpicturebox}\fi%
  \if@right%
    \usebox{\makecvheadpicturebox}%
    \rlap{\usebox{\makecvheaddetailsbox}}% \llap is used to suppress the width of the box, allowing overlap if the value of makecvheadnamewidth is forced
    \hfill%
    \usebox{\makecvheadnamebox}\fi%
  \\[2.5em]%
  % optional quote
  \ifthenelse{\isundefined{\@quote}}%
    {}%
    {{\centering\begin{minipage}{\quotewidth}\centering\quotestyle{\@quote}\end{minipage}\\[2.5em]}}%
  \par}% to avoid weird spacing bug at the first section if no blank line is left after \makecvhead

Gast

Beitrag von Gast »

Lies im usrguide nach, was der Unterschied zwischen \newcommand* und \newcommand ist.

Roman_95
Forum-Anfänger
Forum-Anfänger
Beiträge: 40
Registriert: So 5. Aug 2018, 02:07

Re: Zeilenabstand erzwingen

Beitrag von Roman_95 »

Hallo,

ja das habe ich getan und erfahren dass \newcommand (ohne Sternchen) nur verwendet werden soll, wenn eines der Argumente des Befehls ein ganzer Absatz ist. Nun vermutete ich dass diese Befehlsart dementsprechend mit Abschluss des Befehls (Ende des im Argument enthaltenen Textes) auch ein Absatz-Ende markiert und folglich der \fontsize-Befehl funktioniert. Leider ändert aber eine solche Anpassung nichts, die Wahl des Zeilenabstands funktioniert nach wie vor nicht. Auch der Umbau in ein environment-Konstrukt (wie in usrguide empfohlen) ergibt nicht den gewünschten Effekt.
Gibt es noch andere Möglichkeiten das Ganze anzupassen?

VG Roman

MoeWe
Forum-Guru
Forum-Guru
Beiträge: 266
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Zeilenabstand erzwingen

Beitrag von MoeWe »

Da \newcommand selbst ein langes Argument akzeptiert, ist \par in der Definition kein Problem

Code: Alles auswählen

\documentclass[ngerman]{article}
\usepackage{babel}
\usepackage{xcolor}

\newcommand*{\namefont}{\huge\scshape}
% nur damit \renewcommand geht,
% normalerweise würde man hier natürlich nur \newcommand nehmen
\newcommand*{\namestyle}[1]{}
\renewcommand*{\namestyle}[1]{{\namefont\textcolor{red}{#1}\par}}

\begin{document}
  \begin{minipage}{1em}
    {Lorem \namestyle{Wortbandwurm}}
  \end{minipage}
\end{document}
Einen Fehler gibt es nur mit

Code: Alles auswählen

\documentclass[ngerman]{article}
\usepackage{babel}
\usepackage{xcolor}

\newcommand*{\namefont}{\huge\scshape}
% nur damit \renewcommand geht,
% normalerweise würde man hier natürlich nur \newcommand nehmen
\newcommand*{\namestyle}[1]{}
\renewcommand*{\namestyle}[1]{{\namefont\textcolor{red}{#1}}}

\begin{document}
  \begin{minipage}{1em}
    {Lorem \namestyle{Wortbandwurm\par}}
  \end{minipage}
\end{document}

Code: Alles auswählen

Runaway argument?
{Wortbandwurm
! Paragraph ended before \namestyle was complete.
<to be read again> 
                   \par 
l.13     {Lorem \namestyle{Wortbandwurm\par
Na gut, machen wir \namestyle also \long

Code: Alles auswählen

\renewcommand{\namestyle}[1]{{\namefont\textcolor{red}{#1}}}
aber TeX beschwert sich noch immer

Code: Alles auswählen

Runaway argument?
{Wortbandwurm
! Paragraph ended before \@textcolor was complete.
<to be read again> 
                   \par 
l.13     {Lorem \namestyle{Wortbandwurm\par}
die Meldung hat sich aber leicht geändert: Nicht mehr \namestyle ist unzufrieden; diesmal ist es \@textcolor. Denn \textcolor möchte auch kein \par sehen. Lösen kann man das mit \color statt \textcolor.

Code: Alles auswählen

\renewcommand{\namestyle}[1]{{\namefont\color{red} #1}}
Die eingangs gezeigte Lösung, bei der das \par direkt im Befehl ist, finde ich aber wesentlich schöner, da es ja nur da sein muss, da wir mit \namefont die Schriftgröße umstellen: Das soll ein Nutzer aber gar nicht wissen müssen. Auch da kann man natürlich die \color statt \textcolor nehmen, was sich wegen \namefont vielleicht sogar etwas natürlicher anfühlt

Code: Alles auswählen

\documentclass[ngerman]{article}
\usepackage{babel}
\usepackage{xcolor}

\newcommand*{\namefont}{\huge\scshape}
% nur damit \renewcommand geht,
% normalerweise würde man hier natürlich nur \newcommand nehmen
\newcommand*{\namestyle}[1]{}
\renewcommand*{\namestyle}[1]{{\namefont\color{red} #1\par}}

\begin{document}
  \begin{minipage}{1em}
    {Lorem \namestyle{Wortbandwurm}}
  \end{minipage}
\end{document}

Roman_95
Forum-Anfänger
Forum-Anfänger
Beiträge: 40
Registriert: So 5. Aug 2018, 02:07

Re: Zeilenabstand erzwingen

Beitrag von Roman_95 »

Hallo MoeWe,

entschuldige bitte dass ich jetzt erst antworte - ich habe keine Benachrichtigung bekommen dass es eine neue Antwort gibt.

Leider funktioniert das Beispiel in meinem Dokument nicht, es kommt die Fehlermeldung: There is no line here to end - wahrscheinlich bedingt durch das \par in der Befehlsdefinition.

Die Ursache muss wohl irgendwie in den „Untiefen“ der Klasse verborgen sein, ich habe auch andere Probleme gefunden die ich so erstmal nicht nachvollziehen kann.
Tatsächlich funktioniert der Befehl selbst in der unangetasteten moderncv nicht richtig, auch hier wird der Text ohne die eigentlich angegeben 2pt Zeilenabstand gesetzt.
Nichtsdestotrotz habe ich es sogar hinbekommen dass der Abstand gesetzt wird, indem ich \namestyle durch \namefont ersetzte an der Stelle, wo der Befehl verwendet wird. Dann verschiebt sich aber die Adresse etc. an der anderen Seite des Kopfes nach unten, also auch nicht das gewünschte Ergebnis.
Ich habe ehrlich gesagt entschieden mich damit abzufinden, irgendwann muss ich mal den Deckel drauf bekommen.

Ich danke dir trotzdem aufrichtig für deine Hilfe und finde schade, dass ich es jetzt leider nicht verwenden kann. Deine gründliche Ausführung hat auf jeden Fall mein LaTeX-Verständnis vertieft.

Viele Grüße,

Roman

MoeWe
Forum-Guru
Forum-Guru
Beiträge: 266
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Zeilenabstand erzwingen

Beitrag von MoeWe »

"There is no line here to end"-Fehler hängen eigentlich immer mit der (falschen) Nutzung von \\ und \newline zusammen. Z.B.

Code: Alles auswählen

\documentclass{article}

\begin{document}
Lorem\\ % geht (ist aber nicht schön!)

Lorem\par \\ % Fehler
\end{document}
Zu Beginn eines Absatzes produziert \\ einen Fehler. Das ist verständlich, denn da ist ja in der Tat keine Zeile, die beendet werden könnte.

In normalem Text sollte man \\ eigentlich nie nutzen. Zeilenumbrüche macht LaTeX von alleine. Neue Absätze werden mit einer Leerzeile (oder \par) begonnen. In Tabellen, tabellenähnlichen Umgebungen und im mehrzeiligen Mathemodus ist \\ ist das natürlich anders, da ist \\ der Befehl, um eine neue Zeile anzufangen.

Ohne Deinen Code genau zu kennen, würde ich darauf tippen, dass der zum Formatieren irgendwelcher Angaben \\ nutzt, um Zeilenumbrüche zu erzeugen. Wenn wir jetzt \par einfügen, dann beenden wir den Absatz. Wenn der Code dann mit \\ um die Ecke kommt, gibt es den Fehler. Idealerweise würde man das Problem lösen, indem man \\ durch \par sowie eventuell notwendige \vspace für größere Zwischenräume ersetzt. Eventuell muss man (lokal!) auch mit \parindent und \parskip spielen, damit alles harmonisch aussieht.

Antworten