![LaTeX 中 \tiny 或 \scriptsize Fontsize 的出现(水平拉伸)](https://linux22.com/image/340404/LaTeX%20%E4%B8%AD%20%5Ctiny%20%E6%88%96%20%5Cscriptsize%20Fontsize%20%E7%9A%84%E5%87%BA%E7%8E%B0%EF%BC%88%E6%B0%B4%E5%B9%B3%E6%8B%89%E4%BC%B8%EF%BC%89.png)
对于小于的字体大小,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}
您会注意到,原始版本\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
替代了非数学中的固定形状运算符。通过声明仅在环境中调用的新数学版本来解决这个问题。tinyb
tinyb
显示为现代(可扩展的 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 字体专为小尺寸阅读而设计。在这种情况下,缩放字体不会增加任何价值。
对于数学,实验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}