1行あたり66文字を強制する

1行あたり66文字を強制する

1 行あたりの平均または典型的な文字数を設定するために、余白 (またはレイアウト) をうまく操作できるようにする「何か」(パッケージ、トリック、マクロなど) が欲しいです。

理想的には、この「システム」は、フォント ファミリ (パッケージの使用など) やフォント サイズ (pslatexまたはクラス オプションの使用など) の変更に関係なく、この比率 (66、2.5 アルファベット、または私が選択/入力しtxfontsた他の数値) を維持するのに役立ちます。10pt12pt

少し調べてみたところ、KOMA-Script クラスまたはmemoirクラスを使用することが解決策の一部になる可能性があると理解しましたが、私はそうしたくないと思っています (特に、これまで一度も使用したことがないため)。

私にとって重要な点は、元のレイアウトの全体的な比率や原則を維持する必要があるということです。たとえば、左余白と右余白の比率が決まっている場合、1 つの余白やテキスト幅/行幅をいじるだけでは満足できません。

なぜこれをやりたいのか?pslatexパッケージを使用するのが好きなのですが、これにより、1 行あたりの平均文字数が、パッケージなしの場合の約 65 文字からパッケージありの場合の約 75 文字以上に増えるからです。

注記: 私はすでに以下の項目に目を通したりざっと目を通したりしています:

また、そこに答えがあるかもしれませんが、私は(簡単には)見つけることができませんでした。

答え1

小文字のアルファベットの長さの 2.5 倍という記述は単なる目安です。ただし、次のようにして遊ぶことができます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}

これにより、指定された余白の比率が使用されます (実際には、両面モードでは 2:3 がデフォルトです)。適切に動作するフォント パッケージは正常に動作するはずです。

デフォルトのフォントを使用すると、テキスト幅は 318.96 ポイントになりますが、 を使用するとnewtxtext298.58 ポイントになります (mathptmx結果は 298.57 ポイントになります)。

pslatex非常に時代遅れのパッケージであり、その派生は数学を含む本格的な組版には適していないことに注意してくださいmathptmx。数学が必要ない場合は、(Linotype)Times Romanに基づく他の選択肢があります。

  • newtxtext( に基づきますtxfontsが、指標は修正されています)

  • tgtermes

前者には、付随する数学パッケージがありますnewtxmath

余白の比率は自由に選択できます。両面印刷では、外側の余白を内側の余白よりも広くするのが一般的です。片面印刷(等幅)と両面印刷の選択を自動化したい場合は、

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

を使用できます。 のオプションは、geometry個別のコマンドで指定できます\geometry。用紙サイズを指定することを忘れないでください (\geometryクラス オプション内またはクラス オプションとして指定できます)。

ロードされたクラスをテストすることもできます。

\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

(設定4:2は単なる例です)。

ただし、「すべてを網羅する」形式はありません。ドキュメントに対して最終的に何を選択するかは、ドキュメント自体によって異なります。


水平マージン比をクラスで固定された値と同じに設定するにはどうすればよいですか? 標準設定では とは異なるモデルが使用されるため、これは少し難しいです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}

クラスではarticle1000:1000 になり、book(両側モード) では結果は 667:1000 となり、実質的には 2:3 になります。

答え2

ロバート・ブリングハースト「タイポグラフィスタイルの要素」は、さまざまなフォントの推奨される行の長さの表を提供します。表データの最小二乗最適化フィッティングにより、次のマクロでかなり正確に近似できることがわかりました。

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

などと組み合わせて使用​​してgeometryテキストの幅を設定できます。

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

これは、比較的短い単語を含む標準英語に当てはまると思います。アフリカーンス語 (私の母国語) などの言語では、非常に長い単語が多く、1 行あたり 66 文字では必ずしも正しく表示されません。他の言語では、適切なタイポグラフィの文字数は異なる可能性がありますが、何が最適かはわかりません。

答え3

ConTeXt は、言語固有の文字頻度に基づいて文字の平均幅を計算するというマクロを提供します\averagecharwidth。これには適切なインターフェイスがないため、必要なファイルを手動でロードする必要があります。

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

 \setuplayout[width=66\averagecharwidth]

見るlang-frd.mkii言語頻度表、およびlang-frq.mkii平均幅を計算するマクロ。ドキュメントより:

このモジュールは、言語の平均文字の幅を決定するメソッドを実装します。現在のフォントの寸法を使用します。

Method~1 は幅を無視し、各文字の幅が .5em であると想定します。これはほとんどの等幅フォントに当てはまります。Method~2 は x を開始点として、高さが幅とほぼ一致すると想定します。Method~3 は最も適しており、言語固有の文字テーブルに基づいて平均幅を決定します。Method~4 は最初の 2 つの方法を組み合わせたもので、文字固有の幅が均等に配分されます。Method~0 は合計数を報告します。これは通常 ~100 です。

ドキュメントには、英語、オランダ語、ドイツ語の頻度表を示す次の図も含まれています。

ここに画像の説明を入力してください

ファイルには.mkii拡張子が付いていますが、コードはかなり低レベルの TeX であり、ConTeXt MkIV でも動作します。また、少し変更すれば LaTeX でも動作するはずです。

本当の「1 行あたり平均 66 文字」を得るには、まずテキストを前処理して頻度表を生成し、次にその頻度表を使用して平均文字幅を計算します。

注記: この\averagecharwidthマクロは、現在のフォントからフォント サイズを取得し、現在の言語から文字の頻度を選択します。したがって、ドキュメントのフォントと言語を指定した後に使用する必要があります。

関連情報