在描述环境中自动设置每页的标签宽度

在描述环境中自动设置每页的标签宽度

有几个问题要求在description环境中标签部分的宽度是最宽标签的宽度:

Label:         Text text text text text text
               text text text text.
Longer label:  Text text text text text text
               Text text text text.

一个解决方案用于enumitem手动设置标签宽度(也这里)另一种方法是指定最宽的标签手动(也这里)。

我正在编写一本长达数百页的字典。想必整个字典中最宽的单词会有点离群。我希望标签宽度适合最长的单词在页面上. (我猜这需要两次 LaTeX 运行,类似longtable或类似的东西。)

例如,在下面的示例中,“Nam gui ligula”的对齐方式将在每一页上匹配。在第一页上,它将与“Lorem ipsum”的宽度匹配,但在第二页上与“Lorem ipsum dolor sit”的宽度匹配,等等。

\documentclass[11pt,a4paper]{article}
\usepackage{enumitem,lipsum}
\begin{document}
\begin{description}
\item[Lorem] \lipsum[2-3]
\item[Lorem ipsum] \lipsum[2-3]
\item[Lorem ipsum dolor] \lipsum[2-3]
\item[Lorem ipsum dolor sit] \lipsum[2-3]
\item[Lorem ipsum dolor sit amet] \lipsum[2-3]
\end{description}
\end{document}

我已经为环境标记了这一点description,但我愿意接受任何解决方案。这是一个没有任何列表式环境的 MWE。我正在寻找一种计算\ComputedWidth每个页面的方法。

\documentclass[11pt]{article}
\usepackage{enumitem,lipsum}
\begin{document}
\parindent=0pt
\newdimen\ComputedWidth
\ComputedWidth=9em
\def\FixedWidthBox#1{\fbox{\hbox to \ComputedWidth{#1\hfill}}}

\FixedWidthBox{Lorem} \lipsum[2-3]

\FixedWidthBox{Lorem ipsum} \lipsum[2-3]

\FixedWidthBox{Lorem ipsum dolor} \lipsum[2-3]

\end{document}

答案1

这是一个可行的解决方案。第一次运行后,事情并不一致。第二次运行后,它们就对齐了。

\documentclass[11pt]{article}
\usepackage{enumitem,lipsum,atbegshi,ifthen}
\parindent=0pt

\IfFileExists{\jobname .ali}{\input{\jobname .ali}}{}

\newwrite\AlignmentOutput
\immediate\openout\AlignmentOutput=\jobname .ali

\newlength\LatestWidth
\newlength\WidestWidth
\setlength\WidestWidth{0pt}

\newsavebox{\mybox}

\def\FixedWidthBox#1{%
    \settowidth{\LatestWidth}{#1}%
    \ifthenelse{\lengthtest{\LatestWidth>\WidestWidth}}{\global\setlength\WidestWidth{\LatestWidth}}{}%
    \newdimen\Width
    \ifcsname WidestBoxOnPage\thepage\endcsname% 
        \setlength\Width{\csname WidestBoxOnPage\thepage\endcsname}%
    \else%
        \sbox{\mybox}{#1}
        \settowidth{\Width}{\usebox{\mybox}}
    \fi%
    \fbox{\hbox to \Width{#1\hfill}}%
}

\AtBeginShipout{\immediate\write\AlignmentOutput{\string\expandafter\string\def\string\csname\space WidestBoxOnPage\thepage\string\endcsname{\the\WidestWidth}}%
\global\setlength\WidestWidth{0pt}}

\begin{document}
\FixedWidthBox{Lorem} \lipsum[2-3]

\FixedWidthBox{Lorem ipsum} \lipsum[2-3]

\FixedWidthBox{Lorem ipsum dolor} \lipsum[2-3]

\FixedWidthBox{Lorem} \lipsum[2-3]

\FixedWidthBox{Lorem ipsum} \lipsum[2-3]

\FixedWidthBox{Lorem} \lipsum[2-3]
\end{document}

更新 从回答问题的意义上来说,这个解决方案“有效”。然而,我发现,实际上它是行不通的。框大小的(偶尔)大变化会改变段落中的行数,从而改变分页,这导致 TeX 在运行之间记住错误的框大小。我猜如果页面由短段落(尤其是单行)组成,这个解决方案可能会有效,但我不得不放弃这种方法来处理我的词典,因为它包含较长的段落。

相关内容