![就 latex 语言而言,resizebox{width}{!}{object} 命令中的感叹号到底是什么?](https://linux22.com/image/339914/%E5%B0%B1%20latex%20%E8%AF%AD%E8%A8%80%E8%80%8C%E8%A8%80%EF%BC%8Cresizebox%7Bwidth%7D%7B!%7D%7Bobject%7D%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E7%9A%84%E6%84%9F%E5%8F%B9%E5%8F%B7%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
通常,当我使用该\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 的开发人员只是选择了一个不应该属于维度设置的字符。
浮点环境的可选参数的情况!
类似:只需选择一个简单的字符,就可以与该参数中具有含义的其他字符很好地区分开来。