@Johan_Eの回答ではLaTeX ではどの測定単位を使用すればよいですか?、1em のサイズ (ポイント単位)、 の幅M
、1ex、 の高さを示す便利なチャートがありますx
。 このようなチャートを作成するにはどうすればよいでしょうか。 最も便利なのは、測定コマンドを示す最初の行と、フォントの選択方法を示すもう 1 つの行 (たとえば bf、it) を作成する例です。 (bf、it を取得する方法は知っていますがM
、bf、it を取得するにはどうすればよいでしょうか1em
。)
私はいつも、PDF ビューアー画面でズームインして目視しながら、自分のフォントに合わせて zlmtt のスケールを調整しようとしています。実際の測定値があれば、このようなスケール調整がはるかに簡単になります。
以下のコメントにある @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
上記で使用されているパッケージは、下記で使用されているパッケージとは別のパッケージであることに注意してくださいxintfrac
。
\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
(これは最後の例で使用された値です)。適切であることが確認できたら、これを丸めてパッケージ オプションで使用することもできます。