了解 LaTeX 图形环境中 \hfill 后需要 \null

了解 LaTeX 图形环境中 \hfill 后需要 \null

你好,TeX Stack Exchange,

我正在使用环境处理文档figure,遇到了与\hfill命令相关的布局问题。我的目标是tikzpicture在图中均匀分布两个环境。我注意到,为了实现所需的间距,我需要\null在最后一个命令后包含一个命令\hfill。这是我的代码的简化版本:

\begin{figure}[htpb]
    \centering
    \hfill
    % First tikzpicture environment
    \begin{tikzpicture}[...]
        % TikZ commands
    \end{tikzpicture}
    \hfill
    % Second tikzpicture environment
    \begin{tikzpicture}[...]
        % TikZ commands
    \end{tikzpicture}
    \hfill\null
    \caption{Prohibited lines}
\end{figure}

我的问题是:为什么\null在第三个命令之后需要该命令\hfill才能正确分配水平空间?如果没有,间距将无法按预期工作。第二张 tikz 图片的右侧没有空间。您能帮助我理解此上下文中和\null的底层机制吗?\hfill\null

谢谢您的帮助!

答案1

5 小时前此处的答案表明您不需要\hfill因为在左侧和右侧\centering插入。但它不包括您关于为什么需要在代码中插入 if 的问题的答案。是的,使用 会抑制隐式(从 插入,使用宏时 TeX 原始寄存器),因此我们必须查看s 在哪里以及(更重要的是)在处理段落时它们保留在哪里。\hfil\null\hfill\hfill\hfil\leftskip\rightskip\centering\hfill

在水平模式下调用时,TeX 会移除最后一个粘连(即\hfill本例中) 。您通过插入第一个、第一个图像、第二个、第二个图像和最后一个来进入水平模式。所有这些材料都包含在水平列表中。然后宏在开始自己的打印之前运行。这会从水平列表中移除最后一个粘连,即最后一个。它会创建一个单行段落:、图像、、图像。\par\hfill\hfill\hfill\caption\par\par\hfill\hfill\hfill

另一方面,如果\null这里有(即\hbox{}),那么水平列表包括\hfill,图像,,\hfill图像,,\hfill\hbox{}现在,这个水平列表中的最后一项不是粘合项,因此下面的不会删除任何内容\par

我建议使用\hbox to\hsize(即\centerline来自纯 TeX)而不是 LaTeX 的\centering宏。您可以控制要创建的框:

\hbox to\hsize{%
   \hfil
   first image
   \hfil
   second image
   \hfil
}

当然,您可以替换此代码中所有出现的\hfilby \hfill,而不会发生任何改变。

答案2

需要\null。永远。

在 的范围内\centering,LaTeX\hfil在两边都添加了胶水,因此你需要的只是\hfil数字之间。

\documentclass{article}

\usepackage{lipsum}% just for context

\begin{document}

\lipsum[1][1-3]

\begin{figure}[htpb]
\centering

%%%% this is just for showing the spaces are equal
\rule{\dimeval{(\textwidth-8cm)/3}}{0.4pt}\hfill
\rule{\dimeval{(\textwidth-8cm)/3}}{0.4pt}\hfill
\rule{\dimeval{(\textwidth-8cm)/3}}{0.4pt}
\bigskip
%%%%

\framebox[4cm]{\rule{0pt}{3cm}}% <--- 
\hfil
\framebox[4cm]{\rule{0pt}{3cm}}

\caption{Prohibited lines}

\end{figure}

\lipsum[2][1-3]

\end{document}

在此处输入图片描述

一般来说,如果您希望水平空间不会被换行符所吞噬,请使用\hspace*。 在您的例子中\hspace*{\fill}可以这样做,但是,正如您上面看到的,解决方案更简单。

相关内容