LaTeX 中 \tiny 或 \scriptsize Fontsize 的出现(水平拉伸)

LaTeX 中 \tiny 或 \scriptsize Fontsize 的出现(水平拉伸)

对于小于的字体大小,fontsize 命令会\normalsize拉伸字母的纵横比或拉伸字母本身加上它们的间距,而不是正确缩放文本的宽度和高度(相对于\normalsize) - 这种效果对于\scriptsize和尤其来说非常极端\tiny

以下最小示例显示了基本问题及其可能的解决方案/解决方法(我需要改进的、全局开启/关闭解决方案):

 \documentclass[12pt,a4paper,ngerman]{scrbook}
 \usepackage[T1]{fontenc}
 \usepackage{lmodern}
 \usepackage[utf8]{inputenc}
 \usepackage{amsmath,amsfonts,amssymb,amsxtra}
 \usepackage[ngerman]{babel}
 \usepackage{graphicx}

 \newcommand{\tinyb}[1]{\scalebox{0.5}{{\normalsize #1}}}
 %\newcommand{\scriptsizeb}[1]{\scalebox{0.66667}{{\normalsize #1}}}

 \begin{document}
 \begin{itemize}
      \item {\tiny{Tiny tiny Tiny TINY tiny (original \textbackslash tiny)}} \hspace{.2cm} {\tinyb{Tiny tiny Tiny TINY tiny (custom \textbackslash tinyb)}}
      \item {\tinyb{Tiny tiny Tiny TINY tiny (custom \textbackslash tinyb)}}
      \item {\normalsize{Tiny tiny Tiny TINY tiny (original \textbackslash normalsize)}}
      \item {\tiny{$U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ (original \textbackslash tiny)}} \hspace{.2cm} {\tinyb{$U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ (custom \textbackslash tinyb)}}
      \item {\tinyb{$U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ (custom \textbackslash tinyb)}}
      %\item {\scriptsize{Scriptsize SCRIPTSIZE (original \textbackslash scriptsize)}} \hspace{.2cm} {\scriptsizeb{Scriptsize SCRIPTSIZE (custom \textbackslash scriptsizeb)}}
      %\item {\scriptsizeb{Scriptsize SCRIPTSIZE (custom \textbackslash scriptsizeb)}}
 \end{itemize}
 \end{document}

结果将如下所示: LaTeX 中 \tiny 文本拉伸不均匀

您会注意到,原始版本\tiny会将文本宽度拉伸到极限,而解决方法是\tinyb使用 -package 中的 scalebox 命令graphicx,将文本的高度和宽度都精确缩放 50%。两种样式(\tiny\tinyb)的字体高度完全相同。尤其是在等式中,\tiny拉伸看起来非常丑陋,这在小图的图例或注释中是一个大问题,即使使用,也只有很少的字母适合图例\tiny

使用(比例尺技巧)的解决方案\tinyb对我来说不够,因为我无法全局更改设置。我只能\tinyb在本地将某个文本模式更改为,而换行符等则不起作用。它不是像\tiny或这样的打开/关闭解决方案\normalsize,而这正是我想要的:例如,我想使用 tikzfigures / pgfplots 并仅使用一个命令将所有轴图例条目、刻度和图形注释的注释样式更改为,\tinyb但由于\tinyb使用比例尺(使用\mbox),我只能在特定的命令行和代码中使用它,例如

\begin{tikzpicture}
\tinyb
\begin{axis}[...
...
xlabel={frequency (Hz) $U_{\infty}$ $\frac{\alpha}{\beta}$},
ylabel={frequency (Hz) $U_{\infty}$ $\frac{\alpha}{\beta}$},
...
\end{axis}
\end{tikzpicture}

不起作用(而用\tiny代替的相同代码\tinyb可以起作用并将每个注释、标签、刻度标签等更改为\tiny)!所以我需要重新定义\tiny它的行为方式,或者创建一个行为方式类似但看起来像 的\tinyb新命令。但我找不到如何更改不同字体大小的拉伸行为。基本上,我希望 LaTeX 能够按照预期正确缩放文本的宽度和高度- 特别是对于和命令,因为那里的拉伸效果非常极端……我需要一个命令,它必须全局定义,并且可以轻松地为整个部分打开和关闭。\tinyc\tiny\tinyb\normalsize\tiny\scriptsize

有人知道怎么做吗?

我想一定有一个简单的解决方案,也许有一些软件包允许改变字母间距和/或字距,但我实际上不知道字母似乎相对于其宽度被拉长的问题的正确搜索词......(字母间距和字距似乎都无法解决这个问题)

答案1

也许是这样的,使用 来\DeclareFontShape告诉 LaTeX 始终使用 10pt 字体来构建其他所有内容。

编辑以使用原本未使用的“bold-scshape”作为字体固定宽度版本的占位符(在环境中调用tinyb)。

重新编辑以使环境中的数学字体具有固定形状。最初,它也tinyb替代了非数学中的固定形状运算符。通过声明仅在环境中调用的新数学版本来解决这个问题。tinybtinyb

显示为现代(可扩展的 T1 编码字体)

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{lmodern}
%%% TEXT FONT FIX
\rmfamily
\DeclareFontShape{T1}{lmr}{bx}{sc}{<-> cmr10}{}% USE BOLD SCSHAPE NOT OTHERWISE DEFINED
%%% MATH FONT FIX
\DeclareFontFamily{OML}{zlmm}{}
\DeclareFontShape{OML}{zlmm}{m}{it}{<-> lmmi10}{}
\DeclareFontShape{OML}{zlmm}{b}{it}{<->ssub * zlmm/m/it}{}
\DeclareFontShape{OML}{zlmm}{bx}{it}{<->ssub * zlmm/m/it}{}

\DeclareMathVersion{Tinyb}
\SetSymbolFont{operators}{Tinyb}{T1}{lmr}{bx}{sc}
\SetSymbolFont{letters}{Tinyb}{OML}{zlmm}{m}{it}
%%%
\newenvironment{tinyb}{\bgroup\tiny\bfseries\scshape\mathversion{Tinyb}}{\egroup} % edit: now with \tiny included
\begin{document}
\newcommand\mytext[1]{\normalsize This is a test #1\par
  \small \scalebox{1.11}{This is a test} This is a test \par
  \footnotesize \scalebox{1.25}{This is a test} This is a test \par
  \scriptsize \scalebox{1.425}{This is a test} This is a test \par
  \tiny \scalebox{2}{This is a test} This is a test\par\normalsize
}
\newcommand\mymath{\normalsize$y = mx + b - 3f^2 + \sin (\omega x - \tau)$\par
  \tiny$y = mx + b - 3f^2 + \sin (\omega x - \tau)$\par\normalsize}

\mytext{of the normal}

\begin{tinyb}
\mytext{of the fixed scale}
\end{tinyb}

\mymath

\begin{tinyb}
\mymath
\end{tinyb}
\end{document}

在此处输入图片描述

楼主似乎并不想使用tinyb环境,而是想使用\tinyb宏。这种可能性有一个缺点...那就是任何更改字体大小的命令也会将字体置于\mdseries\upshape模式中。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{lmodern}
%%% TEXT FONT FIX
\rmfamily
\DeclareFontShape{T1}{lmr}{bx}{sc}{<-> cmr10}{}% USE BOLD SCSHAPE NOT OTHERWISE DEFINED
%%% MATH FONT FIX
\DeclareFontFamily{OML}{zlmm}{}
\DeclareFontShape{OML}{zlmm}{m}{it}{<-> lmmi10}{}
\DeclareFontShape{OML}{zlmm}{b}{it}{<->ssub * zlmm/m/it}{}
\DeclareFontShape{OML}{zlmm}{bx}{it}{<->ssub * zlmm/m/it}{}

\DeclareMathVersion{Tinyb}
\SetSymbolFont{operators}{Tinyb}{T1}{lmr}{bx}{sc}
\SetSymbolFont{letters}{Tinyb}{OML}{zlmm}{m}{it}
%%%
\def\invokemode{\bfseries\scshape\mathversion{Tinyb}}
\def\restoremode{\mdseries\upshape\mathversion{normal}}
\newcommand\adapt[1]{%
  \expandafter\let\csname sv#1\expandafter\endcsname\csname#1\endcsname%
  \expandafter\def\csname#1\endcsname{\restoremode\csname sv#1\endcsname}
  \expandafter\def\csname#1b\endcsname{\invokemode\csname sv#1\endcsname}
}
\adapt{tiny}\adapt{scriptsize}\adapt{footnotesize}\adapt{small}\adapt{normalsize}
\adapt{large}\adapt{Large}\adapt{LARGE}\adapt{huge}\adapt{Huge}
\begin{document}
 \tiny Hello World \par 
 \tinyb Hello World \par 
 \tiny Hello World \par 
 \tiny $a^{2} + b^{2} = c^{2}$ \par 
 \tinyb $a^{2} + b^{2} = c^{2}$ \par 
 \tiny $a^{2} + b^{2} = c^{2}$ 
\end{document}

在此处输入图片描述

答案2

您应该查看字体的“光学尺寸”包含哪些内容。(Computer Modern是字体系列的示例,其中包含各种字体大小的光学尺寸字母。)光学尺寸的字母\tiny包括不是普通字母线性缩小 50%,而且它们也不是简单地水平拉伸。相反,它们被单独重新绘制,按比例更厚的笔画更少,间距更松散,这样即使它们只有\normalsize字母高度的一半,仍然清晰可辨。相反,视觉尺寸的\huge字母故意用更薄笔画数更少,而且间距更紧密,这样虽然\huge字母高度是 的两倍多,但看起来不会太“重” \normalsize

下表左侧显示了以“原生”10pt 大小排版的各种单词,左侧为线性地放大或缩小,因为排版时使用了\tiny\scriptsize\footnotesize\huge尺寸。请注意,随着表格右侧列的向下移动,调整大小后的单词中的字母看起来逐渐变细,间距也越来越小。

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx,lmodern}
\begin{document}
\begin{tabular}{rl}
basic 10pt    & scaled \\
\hline
five    & \scalebox{2}{\tiny five}\\
seven   & \scalebox{1.429}{\scriptsize seven}\\
eight   & \scalebox{1.25}{\footnotesize eight}\\
twelve  & \scalebox{0.833}{\large twelve}\\
fourteen& \scalebox{0.694}{\Large fourteen}\\
twenty  & \scalebox{0.482}{\huge twenty}\\
\end{tabular}
\end{document} 

附录:另一种思考光学缩放作用的方式是将原生设置为 的单词\normalsize与相同的单词叠加在一起,从其光学尺寸\tiny\scriptsize等线性缩放到\huge各个版本。在下面的屏幕截图中,原生字母\normalsize呈现为黑色,而重新缩放的光学尺寸单词呈现为红色。请注意,光学尺寸调整需要 (a) 更改用于各种字形的笔画宽度以及 (b) 更改字距之间word 中的字母。这比执行水平拉伸要复杂得多。

在此处输入图片描述

\documentclass{article}
\usepackage{lmodern,graphicx,xcolor}
\begin{document}
\obeylines
five\kern-15.6pt\textcolor{red}{\scalebox{2}{\tiny five}}
seven\kern-23.45pt\textcolor{red}{\scalebox{1.429}{\scriptsize seven}}
eight\kern-21.4pt\textcolor{red}{\scalebox{1.25}{\footnotesize eight}}
twelve\kern-27.18pt\textcolor{red}{\scalebox{0.833}{\large twelve}}
fourteen\kern-35.8pt\textcolor{red}{\scalebox{0.694}{\Large fourteen}}
twenty\kern-29.05pt\textcolor{red}{\scalebox{0.482}{\huge twenty}}
\end{document}

答案3

正如评论和其他答案所解释的那样,不是乳胶在缩放字体,而只是选择为该尺寸设计的字体。

如果您不喜欢字体选择,您可以在此处进行更改,我指定使用 10pt 字体来缩放所有尺寸(我只做了罗马字体和数学斜体,您可能需要做更多)一般来说,这种缩放被认为比在设计尺寸上使用光学缩放字体会产生更差的易读效果,但所有这些都是主观选择。

在此处输入图片描述

\documentclass[12pt,a4paper,ngerman]{scrbook}
 \usepackage[T1]{fontenc}
 \usepackage{lmodern}
 \usepackage[utf8]{inputenc}
 \usepackage{amsmath,amsfonts,amssymb,amsxtra}
 \usepackage[ngerman]{babel}
 \usepackage{graphicx}

 \newcommand{\tinyb}[1]{\scalebox{0.5}{{\normalsize #1}}}
 %\newcommand{\scriptsizeb}[1]{\scalebox{0.66667}{{\normalsize #1}}}
\DeclareFontFamily{T1}{lmr}{}
\DeclareFontShape{T1}{lmr}{m}{n}%
     {<->    ec-lmr10
      }{}

\DeclareFontFamily{OML}{lmm}{\skewchar\font127 }
\DeclareFontShape{OML}{lmm}{m}{it}%
     {<->  lmmi10
      }{}

 \begin{document}
 \begin{itemize}
      \item {\tiny Tiny tiny Tiny TINY tiny (original \textbackslash tiny)} \hspace{.2cm} {\tinyb{Tiny tiny Tiny TINY tiny (custom \textbackslash tinyb)}}
      \item {\tinyb{Tiny tiny Tiny TINY tiny (custom \textbackslash tinyb)}}
      \item {\normalsize Tiny tiny Tiny TINY tiny (original \textbackslash normalsize)}
      \item {\tiny{$U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ (original \textbackslash tiny)}} \hspace{.2cm} {\tinyb{$U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ (custom \textbackslash tinyb)}}
      \item {\tinyb{$U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ (custom \textbackslash tinyb)}}
      %\item {\scriptsizeScriptsize SCRIPTSIZE (original \textbackslash scriptsize)} \hspace{.2cm} {\scriptsizeb{Scriptsize SCRIPTSIZE (custom \textbackslash scriptsizeb)}}
      %\item {\scriptsizeb{Scriptsize SCRIPTSIZE (custom \textbackslash scriptsizeb)}}
 \end{itemize}
 \end{document}

答案4

编辑添加:如果允许用户缩放,则一个极端的例子是如何获得更小的字体?。只需将比例因子设为缩放的倒数(当然,使用可缩放的字体)。

或者更好的是:进行一个实验:

一些普通文本,实际大小:

实际尺寸

放大笔记:

第一个信息点

然后是注释的注释(这是 x19462% 的放大倍数):

第二个信息点

结论:TeX 非常棒!

此方法使用嵌套小页面,其中线宽会根据外部小页面的宽度进行调整。但基线跳跃不会自动调整(原因很明显:原始设计),因此需要手动调整。

我认为嵌套是无限的(好吧,可见光的波长是一个限制)。下一步可能是 TikZ 路径版本,它遵循字母的内部轮廓。

梅威瑟:

\documentclass{article}
\usepackage{fontspec}
\usepackage{xcolor}
\usepackage{lipsum}
\setmainfont{Noto Serif}
\newfontface\ftsmall[Scale=0.25,Colour=blue]{Noto Serif}
\newfontface\ftvsmall[Scale=0.02,Colour=red]{Noto Serif}
\begin{document}
\begin{enumerate}
\item Here is some text, with some notes $\to$
\begin{minipage}{0.1\linewidth}
x\baselineskip2pt
{\ftsmall{\tiny \lipsum[2] And here is another InfoDot:}}
\begin{minipage}{0.1\linewidth}
{\ftsmall{\tiny y}}\par\baselineskip0.2pt
{\ftvsmall{\tiny \lipsum[3] And that is the end of the demonstration.}} 
\end{minipage}
\end{minipage}
\end{enumerate}
\end{document}

=== 原帖:

对于文本,通常无衬线字体在较小尺寸下比衬线字体更容易阅读。Verdana 字体专为小尺寸阅读而设计。在这种情况下,缩放字体不会增加任何价值。

sans 为小

对于数学,实验mathspec包(在后台使用fontspec)可能值得一看。但它有太多选项和开关,无法在一篇文章中快速掌握,因此值得仔细研究。另一种选择是unicode-math,它也使用fontspec但以不同的方式。问题的核心似乎是关于可缩放字体。

这是mathspec,使用随机字体和默认设置:

数学试演

可供选择的字体种类繁多,但各种子集的组合并不会简化任务。

梅威瑟:

\documentclass{article}
%\usepackage{fontspec}
\usepackage[MnSymbol]{mathspec}
\setmainfont{Noto Serif}
\setmathsfont(Digits,Latin){Noto Serif}%TeX Gyre Termes Math}
\setmathsfont(Greek){FreeSerif}
\setmathrm{TeX Gyre Bonum Math}%Symbola}%Cambria Math}%TeX Gyre Schola Math}
%STIX Math}%Quivira}%Noto Sans Symbols}%Libertinus Math}%Hayashi-Serif}%FreeSerif}%DejaVu Math}%Arial Unicode MS}%Minion Pro}%Cambria Math}%GFS Porson}
\usepackage{xcolor}
\newfontface\ftsmall[Scale=0.5,Colour=blue]{Noto Serif}
\newfontface\ftverdana{Verdana}
\newfontface\ftvsmall[Scale=0.5,Colour=blue]{Verdana}
\begin{document}
Noto Serif
\begin{tabular}{rl}
\tiny abc wqerty & \ftsmall\tiny abc wqerty \\
\scriptsize  abc wqerty &  \ftsmall\scriptsize abc wqerty \\
\footnotesize  abc wqerty & \ftsmall\footnotesize abc wqerty \\
\small  abc wqerty & \ftsmall\small abc wqerty \\
\normalsize  abc wqerty & \ftsmall\normalsize abc wqerty \\
\large abc wqerty & \ftsmall\large abc wqerty \\
\Large abc wqerty & \ftsmall\Large abc wqerty \\
\LARGE abc wqerty & \ftsmall\LARGE abc wqerty \\
\huge abc wqerty & \ftsmall\huge abc wqerty \\
\Huge abc wqerty & \ftsmall\Huge abc wqerty \\
\end{tabular}

\ftverdana
Verdana
\begin{tabular}{rl}
\tiny abc wqerty & \ftvsmall\tiny abc wqerty \\
\scriptsize  abc wqerty &  \ftvsmall\scriptsize abc wqerty \\
\footnotesize  abc wqerty & \ftvsmall\footnotesize abc wqerty \\
\small  abc wqerty & \ftvsmall\small abc wqerty \\
\normalsize  abc wqerty & \ftvsmall\normalsize abc wqerty \\
\large abc wqerty & \ftvsmall\large abc wqerty \\
\Large abc wqerty & \ftvsmall\Large abc wqerty \\
\LARGE abc wqerty & \ftvsmall\LARGE abc wqerty \\
\huge abc wqerty & \ftvsmall\huge abc wqerty \\
\Huge abc wqerty & \ftvsmall\Huge abc wqerty \\
\end{tabular}

\newpage
\normalfont
Maths
\begin{tabular}{r}
\tiny $U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ \\
\scriptsize $U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ \\
\footnotesize  $U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ \\
\small   $U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ \\
\normalsize  $U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ \\
\large  $U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ \\
\Large  $U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ \\
\LARGE  $U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ \\
\huge  $U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ \\
\Huge  $U_{\infty}=f\cdot a\cdot \frac{\alpha}{\beta}$ \\
\end{tabular}

\begin{tabular}{r}
\tiny $a^{2} + b^{2} = c^{2}$ \\
\scriptsize $a^{2} + b^{2} = c^{2}$ \\
\footnotesize  $a^{2} + b^{2} = c^{2}$ \\
\small   $a^{2} + b^{2} = c^{2}$ \\
\normalsize  $a^{2} + b^{2} = c^{2}$ \\
\large  $a^{2} + b^{2} = c^{2}$ \\
\Large  $a^{2} + b^{2} = c^{2}$ \\
\LARGE  $a^{2} + b^{2} = c^{2}$ \\
\huge  $a^{2} + b^{2} = c^{2}$ \\
\Huge  $a^{2} + b^{2} = c^{2}$ \\
\end{tabular}




\end{document}

相关内容