![Cómo imprimir varias métricas relacionadas con el tipo](https://rvso.com/image/328457/C%C3%B3mo%20imprimir%20varias%20m%C3%A9tricas%20relacionadas%20con%20el%20tipo.png)
En la respuesta de @Johan_E a¿Qué unidades de medida se deben utilizar en LaTeX?, hay gráficos útiles que muestran el tamaño, en puntos, de 1em, el ancho de un M
, 1ex y la altura de un x
. ¿Cómo puedo producir un gráfico así? Lo más útil sería un ejemplo de cómo producir la primera fila para ilustrar los comandos de medición y/o otra fila (digamos bf, it) para ilustrar cómo se realiza la selección de fuente. (Sé cómo conseguir un novio M
, pero ¿cómo consigo un novio 1em
?)
Siempre intento escalar zlmtt para que coincida con mi fuente, haciendo zoom en la pantalla de un visor de PDF y observándolo. Tener medidas reales haría que esa escala fuera mucho más fácil.
Siguiendo el consejo de @jfbu en el comentario a continuación, extraje lo siguiente del bucle xintools, que parece funcionar.
\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}
Respuesta1
Aquí tienes:
\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
agregado en la edición, porque toda la tabla se produjo anteriormente bajo \small
el régimen, incluido el cálculo de las dimensiones).
Tenga en cuenta que en la tabla anterior se están realizando varias sustituciones de fuentes:
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.
Pensé, por ejemplo, en dibujar una línea tachada en toda la fila, pero hacerlo automáticamente tiene complicaciones. Como este no es el enfoque principal del OP, lo dejo como está.
Para una determinación automática, copiar descaradamente la respuesta de egreg a otra sintaxis. Tenga en cuenta que xinttools
el uso anterior es un paquete independiente del xintfrac
utilizado a continuación.
\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}
Encontrarás en el registro:
zlmtt scaling factor: 0.9143980556305698
Esto difiere en el último dígito del cálculo de l3fp, pero eso no es tan relevante tipográficamente...
(Pruébalo, \xintPFloat [32]...
por ejemplo, si quieres más dígitos --irrelevantes--, bueno, lo hice:
zlmtt scaling factor: 0.91439805563056980826357007831488
Realmente necesitaría un factor de escala 0.1
para ocultar mis juegos irrelevantes aquí)
Respuesta2
Puedo ofrecer una macro para decidir el factor de escala de la forma más automática posible:
\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}
Si cambio la llamada a \scalezlmtt{a}
,
\AtBeginDocument{\scalezlmtt{a}}
\begin{document}
TT font scaled to lowercase: A\texttt{A}a\texttt{a}
\end{document}
yo obtengo
También hay un "factor de corrección"
\AtBeginDocument{\scalezlmtt[.9]{a}}
\begin{document}
TT font scaled to 90\% lowercase: A\texttt{A}a\texttt{a}
\end{document}
Esto debería ser lo suficientemente flexible para evitar búsquedas en tablas o miradas. Al hacer el trabajo \AtBeginDocument
, la llamada \normalfont
será la correcta. Simplemente cargue otros paquetes de fuentes antes de esta instrucción, porque algunos de ellos también realizan acciones al inicio del documento.
El truco consiste en usarlo lmtt
para la medición, de modo que esto aún no active la carga de <encoding>zlmtt.fd
.
En el archivo de registro verá algo como
zlmtt scaling: 0.9143980556305699
(este es el valor utilizado en el último ejemplo) y es posible que desee redondearlo y utilizarlo en la opción del paquete una vez que esté seguro de que se adapta a sus necesidades.