В ответе @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 в другой синтаксис. Обратите внимание, что xinttools
used above — это отдельный пакет от xintfrac
used 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
(это значение использовалось в последнем примере) и вы, возможно, захотите округлить его и использовать в опции пакета, как только будете уверены, что оно вам подходит.