LaTeX 代码的范围

LaTeX 代码的范围

在 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,因此根本不使用下面一组中的局部设置。

相关内容