在 C/C++ 或其他语言中,代码和变量都有作用域。在 LaTeX 中也是一样吗?
我努力理解下面代码的行为——
\documentclass[doubleside]{article}
\usepackage{lipsum}
\begin{document}
%% case 1
%%
\lipsum[5]
{
\flushright
\Huge
}
%% case 2
%%
\lipsum[5]
{
\Huge
\flushright
}
%% case 3
%%
\lipsum[5]
{
\Huge
\flushright
}
\end{document}
希望您能理解我所得到的内容的困难(也许是我对 C/C++ 的熟悉使得这变得困难)——
答案1
tex 具有本地和全局范围,由以下因素决定:群组({...}
并且\begin...\end
在您的示例中(\begin...\end
形成一个组,因为它们是扩展为使用 tex 原始\begingroup
和\endgroup
组构造的宏。)
可以将命令定义为具有本地或全局操作,但您显示的命令是本地的,当组结束时不会恢复全局分配。
但是您令人困惑的输出是由于用户错误造成的,\flushright
并不打算用作命令(命令形式是\raggedleft
)它是环境启动的执行\begin{flushright} \end{flushright}
。
TeX 的换行功能在段落中进行了优化,使用以下设置在最后该段落。
这里重要的是(与\raggedleft
)\flushright
执行\par
如此,上一段如此结束:
在第一种情况下,段落已经完成,并使用正常设置进行设置,然后设置局部大字体和参差不齐的设置,但在}
使用之前被丢弃。
在第二种情况下,Huge
设置了字体和基线,因此在执行时,段落会设置一个巨大的\par
基线\flushright
。
第三种情况,段落在空白行处隐式地设置了正常设置\par
,因此根本不使用下面一组中的局部设置。