\textwidth、\linewidth 和 \hsize 之间的区别

\textwidth、\linewidth 和 \hsize 之间的区别

三个长度\textwidth\linewidth\hsize似乎都保持当前行的宽度。至少在我的代码中我从未看到\textwidth和之间有什么真正的区别\linewidth。即使被环境等改变,两者似乎也是相同的minipage

有人能详细解释一下这些长度之间的区别吗?我喜欢详细了解它们。我知道前两个来自 LaTeX,后一个来自 plainTeX。

还有,在单列模式下,\columnwidth它似乎与\linewidth或相同,对吗?除非行被或等环境减少。\textwidthminipagequote

答案1

\hsize是 TeX 排版时使用的主要参数:每当完成一个段落时,它都会查看当前的 值,\hsize以将其拆分为水平框。接下来,还有\leftskip\rightskip以及可能的其他段落形状参数(\hangindent\hangafter或更通用的\parshape)。

LaTeX 采用间接方法并维护许多\...width参数。

\textwidth通常是文本区域的全局宽度,而\columnwidth是文本列的宽度(与\textwidth排版为两列或多列时不同)。但是,在 中minipage,将与、和\textwidth一起设置为给定的参数(它们将在 的末尾恢复为先前的值,因为它形成了一个组)。请注意,不会重置;大小可用作。\hsize\columnwidth\linewidthminipage\parbox\textwidth\linewidth

参数\linewidth包含环境(或派生环境)内的行长度list,并且它可能在嵌套列表中发生变化(而\hsize\textwidth\columnwidth不会改变)。

当我们必须根据当前条件指定长度时,我们必须使用正确的参数。例如,图形的宽度应根据环境\columnwidth中的figure和环境\textwidth中的来指定;然而,当已知文档将以单列格式排版时,很少这样做。对于或环境figure*也应如此。tabular*tabularx

相反,当我们需要某个东西相对于 中的一条线居中时list,我们应该使用\linewidth

\begin{enumerate}
\item some text that contains a `here' table
      \begin{center}
      \begin{tabularx}{.9\linewidth}{lXX}
      ...
      \end{tabularx}
      \end{center}
      and some other text that follows.
\item ...
\end{enumerate}

\textwidth在这种情况下,使用或是错误的\columnwidth,因为在键入时行长度是“未知的”。

请注意,LaTeX\hangindent仅使用 来排版章节标题和\leftskip以及,rightskip和;环境的缩进是通过 获得的。\centering\raggedright\raggedleftlist\parshape

答案2

我认为描述差异的最简单方法如下:

  • \hsize是 TeX 原语,通常不应在 LaTeX 中使用
  • \textwidth是整个文本块的(恒定)宽度
  • \columnwidth是单列文本的(恒定)宽度(与单列文档
    相同)\textwidth
  • \linewidth是一个代表当前的文本行的大小,无论是在列内、小页面内还是列表中

一般来说,如果您指定图像或框的相对大小,最好始终使用它\linewidth,因为它将适应当前情况。

笔记\linewidth似乎也适用于桌子列,而不仅仅是文本列。请参阅这个答案例如,在表格单元格(实际上是多行单元格)中使用固定宽度的 parbox。

答案3

twocolumn和模式下的测试文档onecolumn

\documentclass[twocolumn]{article}
\parindent=0pt
\usepackage[paperheight=7cm]{geometry}
\begin{document}

\leavevmode\rlap{text:}\rule{\textwidth}{2pt}\par
\leavevmode\rlap{line:}\rule{\linewidth}{2pt}\par
\leavevmode\rlap{hsize:}\rule{\hsize}{2pt}\par
\leavevmode\rlap{column:}\rule{\columnwidth}{2pt}

\begin{itemize}
\item \rule{\textwidth}{5pt}
\item \rule{\linewidth}{5pt}
\item \rule{\hsize}{5pt}
\item \rule{\columnwidth}{5pt}
\end{itemize}

\onecolumn
\leavevmode\rlap{text:}\rule{\textwidth}{2pt}\par
\leavevmode\rlap{line:}\rule{\linewidth}{2pt}\par
\leavevmode\rlap{hsize:}\rule{\hsize}{2pt}\par
\leavevmode\rlap{column:}\rule{\columnwidth}{2pt}

\begin{itemize}
\item \rule{\textwidth}{5pt}
\item \rule{\linewidth}{5pt}
\item \rule{\hsize}{5pt}
\item \rule{\columnwidth}{5pt}
\end{itemize}

\end{document}

在此处输入图片描述

答案4

一个区别是,在 list 和 trivlist 环境中(即包括quotequotation和其他此类环境),比 和的总和\linewidth要小。我想我还记得这是将段落分成行的例程所使用的;因为在列表中是使用命令创建的,所以不需要明确告知该例程。\textwidth\leftmargin\rightmargin\hsize\leftmargin\parshape\leftmargin

相关内容