三个长度\textwidth
、\linewidth
和\hsize
似乎都保持当前行的宽度。至少在我的代码中我从未看到\textwidth
和之间有什么真正的区别\linewidth
。即使被环境等改变,两者似乎也是相同的minipage
。
有人能详细解释一下这些长度之间的区别吗?我喜欢详细了解它们。我知道前两个来自 LaTeX,后一个来自 plainTeX。
还有,在单列模式下,\columnwidth
它似乎与\linewidth
或相同,对吗?除非行被或等环境减少。\textwidth
minipage
quote
答案1
\hsize
是 TeX 排版时使用的主要参数:每当完成一个段落时,它都会查看当前的 值,\hsize
以将其拆分为水平框。接下来,还有\leftskip
和\rightskip
以及可能的其他段落形状参数(\hangindent
和\hangafter
或更通用的\parshape
)。
LaTeX 采用间接方法并维护许多\...width
参数。
\textwidth
通常是文本区域的全局宽度,而\columnwidth
是文本列的宽度(与\textwidth
排版为两列或多列时不同)。但是,在 中minipage
,将与、和\textwidth
一起设置为给定的参数(它们将在 的末尾恢复为先前的值,因为它形成了一个组)。请注意,不会重置;大小可用作。\hsize
\columnwidth
\linewidth
minipage
\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
\raggedleft
list
\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 环境中(即包括quote
、quotation
和其他此类环境),比 和的总和\linewidth
要小。我想我还记得这是将段落分成行的例程所使用的;因为在列表中是使用命令创建的,所以不需要明确告知该例程。\textwidth
\leftmargin
\rightmargin
\hsize
\leftmargin
\parshape
\leftmargin