Как распечатать различные метрики, связанные с типом

Как распечатать различные метрики, связанные с типом

В ответе @Johan_E наКакие единицы измерения следует использовать в LaTeX?, есть полезные диаграммы, показывающие размер в пунктах 1em, ширину M, 1ex и высоту x. Как мне создать такую ​​диаграмму? Наиболее полезным был бы пример того, как создать первую строку для иллюстрации команд измерения и/или еще одну строку (например, bf, it), чтобы проиллюстрировать, как выполняется выбор шрифта. (Я знаю, как получить bf,it M, но как мне получить bf,it 1em?)

Я вечно пытаюсь масштабировать zlmtt, чтобы он соответствовал моему шрифту, увеличивая масштаб на экране просмотрщика PDF и рассматривая его. Наличие реальных измерений значительно облегчило бы такое масштабирование.

Воспользовавшись советом @jfbu в комментарии ниже, я извлек из цикла xintools следующее, и это, похоже, работает.

\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}

решение1

Ну вот:

\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добавлено в редактировании, т.к. вся таблица была составлена ​​ранее в \smallрежиме, включая расчет размеров).

введите описание изображения здесь


Обратите внимание, что в таблице выше происходит ряд замен шрифтов:

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.

Я думал, например, нарисовать перечеркнутую линию через всю строку, но делать это автоматически имеет сложности. Поскольку это не является основным фокусом OP, я просто оставляю все как есть.


Для автоматического определения, бесстыдно копируя ответ egreg в другой синтаксис. Обратите внимание, что xinttoolsused above — это отдельный пакет от xintfracused below.

\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}

введите описание изображения здесь

В журнале вы найдете:

zlmtt scaling factor: 0.9143980556305698

Последняя цифра отличается от расчета l3fp, но это не так уж важно с точки зрения типографики...

(попробуйте, \xintPFloat [32]...например, если вам нужно больше --несущественных-- цифр, ну ладно, я это сделал:

zlmtt scaling factor: 0.91439805563056980826357007831488

Мне действительно понадобится коэффициент масштабирования, 0.1чтобы скрыть мои неуместные забавы здесь)

решение2

Я могу предложить макрос для максимально автоматического определения масштабного коэффициента:

\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}

введите описание изображения здесь

Если я изменю вызов на \scalezlmtt{a},

\AtBeginDocument{\scalezlmtt{a}}

\begin{document}

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

\end{document}

я получил

введите описание изображения здесь

Есть еще «поправочный коэффициент»

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

\begin{document}

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

\end{document}

введите описание изображения здесь

Это должно быть достаточно гибким, чтобы избежать поиска в таблицах или визуального контроля. Выполнив работу \AtBeginDocument, вызов \normalfontбудет правильным. Просто загрузите другие пакеты шрифтов перед этой инструкцией, потому что некоторые из них также выполняют действия в начале документа.

Хитрость заключается в том, чтобы использовать lmttдля измерения, чтобы это еще не вызвало загрузку <encoding>zlmtt.fd.

В файле журнала вы увидите что-то вроде

zlmtt scaling: 0.9143980556305699

(это значение использовалось в последнем примере) и вы, возможно, захотите округлить его и использовать в опции пакета, как только будете уверены, что оно вам подходит.

Связанный контент