Erzwingen Sie 66 Zeichen pro Zeile

Erzwingen Sie 66 Zeichen pro Zeile

Ich hätte gerne „etwas“ (ein Paket, einen Trick, ein Makro, …?), das es mir ermöglicht, schön mit den Rändern (oder dem Layout) zu spielen, um die durchschnittliche oder typische Anzahl von Zeichen pro Zeile festzulegen.

Im Idealfall würde mir dieses „System“ dabei helfen, dieses Verhältnis (66, 2,5 Alphabete oder jede andere Zahl, die ich wähle/eingebe) unabhängig von Änderungen in Schriftfamilien (wie beispielsweise durch die Verwendung des Pakets pslatexoder txfonts) oder in Schriftgrößen (beispielsweise mit einer 10ptoder 12ptKlassenoption) beizubehalten.

Ich habe mich ein wenig umgesehen und mir ist so ziemlich klar geworden, dass die Verwendung von KOMA-Script-Klassen oder der memoirKlasse Teil einer Lösung sein könnte, ich dies aber lieber nicht tun würde (insbesondere, weil ich bisher noch nie welche verwendet habe).

Ein wichtiger Punkt für mich ist, dass die gesamten Proportionen oder Prinzipien des ursprünglichen Layouts beibehalten werden müssen. Wenn es beispielsweise ein festgelegtes Verhältnis zwischen linkem und rechtem Rand gibt, dann würde mich das Herumspielen mit einem Rand oder mit der Textbreite/Zeilenbreite nicht zufriedenstellen.

Warum ich das tun möchte? Weil ich das Paket gerne verwende pslatex, aber dadurch die durchschnittliche Anzahl der Zeichen pro Zeile von ca. 65 ohne auf über 75 mit erhöht wurde.

Beachten Sie, dass ich Folgendes bereits durchgegangen bin oder überflogen habe:

Und vielleicht gibt es dort auch Antworten, ich konnte sie aber nicht (so leicht) finden.

Antwort1

Die Angabe über die 2,5-fache Länge des Kleinbuchstabenalphabets ist nur ein Anhaltspunkt. Sie können jedoch damit experimentieren geometry:

\documentclass{book}

%%\usepackage{newtxtext}
\newlength{\alphabet}
\settowidth{\alphabet}{\normalfont abcdefghijklmnopqrstuvwxyz}

\usepackage{geometry}
\geometry{textwidth=2.5\alphabet,hmarginratio={2:3}}

\begin{document}
\the\textwidth
\end{document}

Dadurch wird das angegebene Seitenverhältnis für die Ränder verwendet (im zweiseitigen Modus ist 2:3 die Standardeinstellung). Gut funktionierende Schriftpakete sollten korrekt funktionieren.

Mit den Standardschriften erhalte ich eine Textbreite von 318,96 pt, während newtxtextich mit 298,58 pt erhalte (mit mathptmxergibt das Ergebnis 298,57 pt).

Beachten Sie, dass pslatexes sich um ein sehr veraltetes Paket handelt und dass sein Nachfolger mathptmxfür ernsthaften Satz mit Mathematik eher ungeeignet ist. Wenn Sie keine Mathematik benötigen, sind andere Optionen, die auf (Linotype) Times Roman basieren,

  • newtxtext(basierend auf txfonts, aber mit korrigierten Messwerten)

  • tgtermes

Ersteres verfügt über das dazugehörige Mathematikpaket newtxmath.

Sie können das gewünschte Verhältnis für die Ränder wählen. Beim beidseitigen Drucken ist es üblich, dass der äußere Rand breiter ist als der innere. Wenn Sie die Wahl zwischen einseitigem Drucken (gleiche Ränder) und beidseitigem Drucken automatisieren möchten, dann

\geometry{textwidth=2.5\alphabet}
\makeatletter
\if@twoside
  \geometry{hmarginratio={2:3}}
\else
  \geometry{hmarginratio={1:1}}
\fi
\makeatother

könnte verwendet werden. Die Optionen dafür geometrykönnen in einzelnen \geometryBefehlen angegeben werden. Vergessen Sie nicht, die Papiergröße anzugeben (Sie können dies entweder in \geometryoder als Klassenoption tun).

Sie können die geladene Klasse auch testen:

\makeatletter
\geometry{hmarginratio={1:1}} % fallback

\@ifclassloaded{book}
 {
  \if@twoside
    \geometry{hmarginratio={2:3}}
  \else
    \geometry{hmarginratio={1:1}}
  \fi
 }{}

\@ifclassloaded{article}
 {
  \if@twoside
    \geometry{hmarginratio={4:2}}
  \else
    \geometry{hmarginratio={1:1}}
  \fi
 }{}
\makeatletter

(Die Einstellung 4:2 dient nur als Beispiel).

Es gibt jedoch kein „Catch-All“-Format: Was Sie letztendlich für ein Dokument auswählen, hängt vom Dokument selbst ab.


Wie kann das horizontale Randverhältnis so eingestellt werden, dass es dem von der Klasse festgelegten Wert entspricht? Dies ist etwas schwierig, da die Standardeinstellung ein anderes Modell verwendet als geometry.

\documentclass{article}
\usepackage{newtxtext}
\usepackage{geometry}

\newlength{\alphabet}
\sbox0{\normalfont abcdefghijklmnopqrstuvwxyz}
\setlength{\alphabet}{\wd0}

\makeatletter
\begingroup
\dimendef\innermargin=\z@
\dimendef\outermargin=\tw@
\innermargin=\dimexpr\oddsidemargin+1in+\hoffset\relax
\outermargin=\dimexpr\paperwidth-\innermargin-\textwidth\relax
\outermargin=.002\outermargin
\innermargin=2\innermargin
\count@=\innermargin
\divide\count@ \outermargin
\xdef\standardhmarginratio{\number\count@:1000}
\endgroup

\geometry{textwidth=2.5\alphabet,hmarginratio=\standardhmarginratio}

\begin{document}

text width = \the\textwidth

horizontal margin ratio = \standardhmarginratio

\end{document}

Mit der articleKlasse erhalten wir 1000:1000, mit book(Twoside-Modus) ist das Ergebnis 667:1000, also praktisch 2:3.

Antwort2

Robert Bringhurst, in„Die Elemente des typografischen Stils“gibt eine Tabelle mit bevorzugten Zeilenlängen für verschiedene Schriftarten an. Eine Kleinstquadrate-Optimierung der Tabellendaten ergab, dass dies mit dem folgenden Makro recht gut angenähert werden kann:

\newcommand*\GetTextWidth[3][\normalfont]{{#1%
    \settowidth{#2}{abcdefghijklmnopqrstuvwxyz}%
    \setlength{#2}{0.03193#2}%
    \addtolength{#2}{0.44961pt}%
    \setlength{#2}{#3#2}%
    \global#2=#2}}

Dies kann zusammen mit geometryusw. verwendet werden, um die Textbreite festzulegen.

\newlength\bringhurstwdt
\GetTextWidth{\bringhurstwdt}{66}
\geometry{textwidth=\bringhurstwdt}

Ich gehe davon aus, dass dies für Standardenglisch gilt, das relativ kurze Wörter hat. In einer Sprache wie Afrikaans (meiner Muttersprache) haben wir viele sehr lange Wörter und die 66 Zeichen pro Zeile sehen nicht immer richtig aus. Bei anderen Sprachen kann die Zeichenanzahl für eine gute Typografie unterschiedlich sein, aber ich habe keine Ahnung, was am besten wäre.

Antwort3

ConTeXt bietet ein Makro namens \averagecharwidth, das die durchschnittliche Breite eines Zeichens basierend auf der sprachspezifischen Zeichenhäufigkeit berechnet. Es gibt keine richtige Schnittstelle dafür, daher müssen Sie die erforderlichen Dateien manuell laden.

 \input lang-frq.mkii %macros to calculate average length
 \input lang-frd.mkii %language frequency tables

 \setuplayout[width=66\averagecharwidth]

Sehenlang-frd.mkiifür Sprachenhäufigkeitstabellen undlang-frq.mkiifür Makros zur Berechnung der durchschnittlichen Breite. Aus der Dokumentation:

Dieses Modul implementiert eine Methode zur Bestimmung der Breite eines durchschnittlichen Zeichens in einer Sprache. Es verwendet die Abmessungen der aktuellen Schriftarten.

Methode 1 ignoriert die Breiten und geht davon aus, dass jedes Zeichen eine Breite von 0,5em hat, was für die meisten monospaced Schriftarten zutrifft. Methode 2 nimmt das x als Ausgangspunkt und geht davon aus, dass seine Höhe ungefähr seiner Breite entspricht. Methode 3 ist die beste und ermittelt die durchschnittliche Breite basierend auf der sprachspezifischen Zeichentabelle. Methode 4 ist eine Mischung aus den ersten beiden Methoden: zeichenspezifische Breiten werden auf eine gleichmäßige Verteilung angewendet. Methode 0 meldet die Gesamtzahl, die normalerweise bei 100 liegt.

Die Dokumentation enthält außerdem die folgende Abbildung mit den Häufigkeitstabellen für Englisch, Niederländisch und Deutsch.

Bildbeschreibung hier eingeben

Obwohl die Dateien .mkiieine Erweiterung haben, handelt es sich beim Code um relativ einfaches TeX und er funktioniert auch mit ConTeXt MkIV. Mit geringfügigen Änderungen sollte er auch mit LaTeX funktionieren.

Um einen echten „Durchschnitt von 66 Zeichen pro Zeile“ zu erhalten, können Sie Ihren Text zunächst vorverarbeiten, um die Häufigkeitstabelle zu generieren, und diese Häufigkeitstabelle dann verwenden, um die durchschnittliche Zeichenbreite zu berechnen!

Notiz: Das \averagecharwidthMakro übernimmt die Schriftgrößen aus der aktuellen Schriftart und wählt die Zeichenhäufigkeit aus der aktuellen Sprache. Es sollte also verwendet werden, nachdem die Schriftart und Sprache des Dokuments angegeben wurden.

verwandte Informationen