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}
( \normalsize
beim Bearbeiten hinzugefügt, da die gesamte Tabelle \small
, einschließlich der Dimensionsberechnung, zuvor unter Regime erstellt wurde).
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 xinttools
es sich bei „oben verwendet“ um ein anderes Paket als bei „ xintfrac
unten 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}
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.1
um 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}
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
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}
Dies sollte flexibel genug sein, um Nachschlagevorgänge in Tabellen oder Augenmaß zu vermeiden. Wenn Sie den Job ausführen \AtBeginDocument
, ist der Aufruf \normalfont
der 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.