就 latex 语言而言,resizebox{width}{!}{object} 命令中的感叹号到底是什么?

就 latex 语言而言,resizebox{width}{!}{object} 命令中的感叹号到底是什么?

通常,当我使用该\resizebox{width}{height}{object}命令时,它最终看起来像这样:

\resizebox{1\linewidth}{!}{%
  object
}%

我知道这里感叹号基本上会自动计算适当的高度,以保持与之前相同的纵横比。

我不知道,这是否与 tex / latex 语言有关?或者它只是特定于命令的语法resizebox?感叹号与\begin{figure}[!htbp]此有关吗,或者这也只是特定于环境内部的语法{figure}

换句话说,问题是,感叹号是一种语言构造吗?如果是,它是什么?了解它有什么用?如果它不是一种语言构造,而只是特定于某些功能的语法,那么至少存在某种关于其含义的约定吗?了解它有什么用?

答案1

\resizebox这是的定义graphics.sty(添加了行号以供参考):

244 \def\Gin@exclamation{!}

417 \def\resizebox{%
418   \leavevmode
419   \@ifstar{\Gscale@@box\totalheight}{\Gscale@@box\height}}
420 \def\Gscale@@box#1#2#3{%
421   \let\@tempa\Gin@exclamation
422   \expandafter\def\expandafter\@tempb\expandafter{\string#2}%
423   \expandafter\def\expandafter\@tempc\expandafter{\string#3}%
424   \ifx\@tempb\@tempa
425     \ifx\@tempc\@tempa
426       \toks@{\mbox}%
427     \else
428       \toks@{\Gscale@box@dd{#3}#1}%
429     \fi
430   \else
431     \ifx\@tempc\@tempa
432       \toks@{\Gscale@box@dd{#2}\width}%
433     \else
434       \toks@{\Gscale@box@dddd{#2}\width{#3}#1}%
435     \fi
436   \fi
437   \the\toks@}

-version*使用\totalheight而不是 ,\height并将控制权传递给\Gscale@@box,它吸收了作为 的参数出现的两个参数\resizebox\string第 422 行和第 423 行中的标记被使用,因为babel可能已变成!活动字符。

这三个条件将参数与\resizebox正常的进行比较!;如果找到,则执行适当的操作。

在 LaTeX 或一般 TeX 语法中没有特殊含义!;LaTeX 的开发人员只是选择了一个不应该属于维度设置的字符。

浮点环境的可选参数的情况!类似:只需选择一个简单的字符,就可以与该参数中具有含义的其他字符很好地区分开来。

相关内容