So drucken Sie verschiedene typbezogene Metriken

So drucken Sie verschiedene typbezogene Metriken

In der Antwort von @Johan_E aufWelche Maßeinheiten sollte man in LaTeX verwenden?gibt es nützliche Diagramme, die die Größe von 1em in Punkten, die Breite von M, 1ex und die Höhe von zeigen x. Wie kann ich ein solches Diagramm erstellen? Am nützlichsten wäre ein Beispiel, wie man die erste Zeile erstellt, um die Messbefehle zu veranschaulichen, und/oder eine weitere Zeile (sagen wir bf, it), um zu veranschaulichen, wie die Schriftartauswahl vorgenommen wird. (Ich weiß, wie man ein bf,it bekommt M, aber wie bekomme ich ein bf,it 1em?)

Ich versuche immer, zlmtt so zu skalieren, dass es zu meiner Schriftart passt, indem ich auf einem PDF-Viewer-Bildschirm hineinzoome und es mit dem Auge abschätze. Wenn ich tatsächliche Maße hätte, wäre eine solche Skalierung viel einfacher.

Mithilfe des Ratschlags von @jfbu im Kommentar unten habe ich Folgendes aus der Xintools-Schleife extrahiert, was zu funktionieren scheint.

\documentclass{article}
\usepackage[T1]{fontenc}

\newcommand\oneem{}
\newcommand\oneex{}
\newcommand\Mwidth{}
\newcommand\xheight{}
\newcommand\xwidth{}
\newcommand\xdepth{}

\begin{document}
\edef\oneem{\the\dimexpr 1em\relax}%
\edef\oneex{\the\dimexpr 1ex\relax}%
\setbox0\hbox{M}%
\edef\Mwidth{\the\wd0}%
\setbox0\hbox{x}%
\edef\xheight{\the\ht0}%
\edef\xwidth{\the\wd0}%
\edef\xdepth{\the\dp0}%
%
\begin{tabular}{lllllll}
  font & 1em    & M-width & 1ex    & x-height & x-width & x-depth \\
  rm   & \oneem & \Mwidth & \oneex & \xheight & \xwidth & \xdepth
\end{tabular}
\end{document}

Antwort1

Bitte schön:

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[margin=1cm]{geometry}
\usepackage{xinttools}

\newcommand\WithFont [4]{%
   \csname text#1\endcsname {%
      \csname text#3\endcsname {%
         \csname text#2\endcsname {#4}}}}

\begin{document}
\begin{table}
  \centering
\Large\textbf{Computer Modern fonts (pdf\LaTeX) [10pt]}\\
\small
Selected using \detokenize{\textA{\textB{\textC{(some text)}}}},\\
with A in \detokenize{{rm, sf, tt}}; B in \detokenize{{md, bf}}; C in
\detokenize{{up, it, sl, sc}}\\
  \begin{tabular}{*{9}{l}}
    \bf Font&\bf 1em&&\bf M-width&\bf 1ex&&\bf x-height&\bf x-width&\bf x-depth\\
\hline
\xintForpair #1#2 in {(Roman,rm), (Sans,sf), (Typewriter,tt)} \do
{%
\xintFor #3 in {up, it, sl, sc}\do
  {%
    \xintFor #4 in {md, bf}\do
    {%
      \WithFont {#2}{#3}{#4}{#1, #3, #4\normalsize
                             \xdef\oneem{\the\dimexpr 1em\relax}%
                             \xdef\oneex{\the\dimexpr 1ex\relax}%
                             \setbox0\hbox{M}\xdef\Mwidth{\the\wd0}%
                             \setbox0\hbox{x}\xdef\xheight{\the\ht0}%
                                             \xdef\xwidth{\the\wd0}%
                                             \xdef\xdepth{\the\dp0}}%
      &\oneem&\WithFont{#2}{#3}{#4}{\normalsize\strut M}&\Mwidth
      &\oneex&\WithFont{#2}{#3}{#4}{\normalsize x}&\xheight&\xwidth&\xdepth
     \\
     }%
   }\hline
}\hline
  \end{tabular}
\end{table}
\end{document}

( \normalsizebeim Bearbeiten hinzugefügt, da die gesamte Tabelle \small, einschließlich der Dimensionsberechnung, zuvor unter Regime erstellt wurde).

Bildbeschreibung hier eingeben


Bitte beachten Sie, dass in der obigen Tabelle eine Reihe von Schriftarten ersetzt werden:

LaTeX Font Warning: Font shape `T1/cmss/m/sc' in size <9> not available
(Font)              Font shape `T1/cmr/m/sc' tried instead on input line 55.

LaTeX Font Warning: Font shape `T1/cmss/m/sc' in size <10> not available
(Font)              Font shape `T1/cmr/m/sc' tried instead on input line 55.

LaTeX Font Warning: Font shape `T1/cmss/bx/sc' undefined
(Font)              using `T1/cmss/bx/n' instead on input line 55.

LaTeX Font Info:    Font shape `T1/cmtt/bx/n' in size <9> not available
(Font)              Font shape `T1/cmtt/m/n' tried instead on input line 55.
LaTeX Font Info:    Font shape `T1/cmtt/bx/n' in size <10> not available
(Font)              Font shape `T1/cmtt/m/n' tried instead on input line 55.
LaTeX Font Info:    Font shape `T1/cmtt/bx/it' in size <9> not available
(Font)              Font shape `T1/cmtt/m/it' tried instead on input line 55.
LaTeX Font Info:    Font shape `T1/cmtt/bx/it' in size <10> not available
(Font)              Font shape `T1/cmtt/m/it' tried instead on input line 55.

LaTeX Font Warning: Font shape `T1/cmtt/bx/sl' undefined
(Font)              using `T1/cmtt/bx/n' instead on input line 55.

LaTeX Font Info:    Font shape `T1/cmtt/bx/sl' in size <10> not available
(Font)              Font shape `T1/cmtt/m/n' tried instead on input line 55.
LaTeX Font Info:    Font shape `T1/cmtt/bx/sl' in size <9> not available
(Font)              Font shape `T1/cmtt/m/n' tried instead on input line 55.

LaTeX Font Warning: Font shape `T1/cmtt/bx/sc' undefined
(Font)              using `T1/cmtt/bx/n' instead on input line 55.

LaTeX Font Info:    Font shape `T1/cmtt/bx/sc' in size <10> not available
(Font)              Font shape `T1/cmtt/m/n' tried instead on input line 55.
LaTeX Font Info:    Font shape `T1/cmtt/bx/sc' in size <9> not available
(Font)              Font shape `T1/cmtt/m/n' tried instead on input line 55.

Ich habe zum Beispiel darüber nachgedacht, eine durchgestrichene Linie über die ganze Reihe zu ziehen, aber das führt automatisch zu Komplikationen. Da dies nicht der Hauptfokus des OP ist, lasse ich es einfach so stehen.


Zur automatischen Bestimmung wird die Antwort von egreg schamlos in eine andere Syntax kopiert. Beachten Sie, dass xinttoolses sich bei „oben verwendet“ um ein anderes Paket als bei „ xintfracunten verwendet“ handelt.

\documentclass[border=4pt]{standalone}

\usepackage{zlmtt}
\usepackage{xintfrac}


\makeatletter
\newcommand{\scalezlmtt}[2][1]{%
   {\setbox0\hbox{\normalfont #2}%
    \setbox2\hbox{\fontfamily{lmtt}\selectfont #2}%
    \xdef\zlmtt@scale {\xintPFloat {\xintMul{#1}{\ht0/\ht2}}}%
    \typeout{zlmtt scaling factor: \zlmtt@scale}% 
   }%
}%
\makeatother

\AtBeginDocument{\scalezlmtt[.9]{a}}

\begin{document}

TT font scaled to 90\% lowercase: A\texttt{A}a\texttt{a}

\end{document}

Bildbeschreibung hier eingeben

Im Protokoll finden Sie:

zlmtt scaling factor: 0.9143980556305698

Dies unterscheidet sich in der letzten Ziffer von der Berechnung von l3fp, aber das ist typografisch nicht so relevant ...

(versuchen Sie es \xintPFloat [32]...zum Beispiel mit, wenn Sie mehr --irrelevante-- Ziffern wollen, na gut, ich habe es gemacht:

zlmtt scaling factor: 0.91439805563056980826357007831488

Ich bräuchte wirklich einen Skalierungsfaktor von 0.1um mein irrelevantes Herumspielen hier zu verbergen)

Antwort2

Ich kann ein Makro anbieten, um den Skalierungsfaktor möglichst automatisch festzulegen:

\documentclass{article}

\usepackage{zlmtt}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\scalezlmtt}{O{1}m}
 {
  \hbox_set:Nn \l_tmpa_box { \normalfont #2 }
  \hbox_set:Nn \l_tmpb_box { \fontfamily{lmtt}\selectfont #2 }
  \tl_set:cx { zlmtt@scale }
   {
    \fp_eval:n
     {
      #1 *
      \dim_to_fp:n { \box_ht:N \l_tmpa_box } /
      \dim_to_fp:n { \box_ht:N \l_tmpb_box }
     }
   }
  \typeout{ zlmtt~scaling:~\tl_use:c { zlmtt@scale } }
 }
\ExplSyntaxOff

\AtBeginDocument{\scalezlmtt{A}}

\begin{document}

TT font scaled to uppercase: A\texttt{A}a\texttt{a}

\end{document}

Bildbeschreibung hier eingeben

Wenn ich den Anruf ändere in \scalezlmtt{a},

\AtBeginDocument{\scalezlmtt{a}}

\begin{document}

TT font scaled to lowercase: A\texttt{A}a\texttt{a}

\end{document}

Ich bekomme

Bildbeschreibung hier eingeben

Es gibt auch einen „Korrekturfaktor“

\AtBeginDocument{\scalezlmtt[.9]{a}}

\begin{document}

TT font scaled to 90\% lowercase: A\texttt{A}a\texttt{a}

\end{document}

Bildbeschreibung hier eingeben

Dies sollte flexibel genug sein, um Nachschlagevorgänge in Tabellen oder Augenmaß zu vermeiden. Wenn Sie den Job ausführen \AtBeginDocument, ist der Aufruf \normalfontder richtige. Laden Sie einfach andere Schriftartpakete vor dieser Anweisung, da einige von ihnen auch Aktionen am Anfang des Dokuments ausführen.

Der Trick besteht darin, für die Messung zu verwenden lmtt, sodass das Laden von noch nicht ausgelöst wird <encoding>zlmtt.fd.

In der Protokolldatei sehen Sie etwas wie

zlmtt scaling: 0.9143980556305699

(das ist der Wert, der im letzten Beispiel verwendet wurde) und Sie möchten ihn möglicherweise runden und in der Paketoption verwenden, wenn Sie sicher sind, dass er für Sie geeignet ist.

verwandte Informationen