在内联列表的换行符处删除分隔符

在内联列表的换行符处删除分隔符

我已经创建了一个新的内联列表样式enumitem没有项目符号,并且用中间点分隔每个项目:

\documentclass{article}

\newcommand{\middot}{~\textperiodcentered~}

\usepackage[inline]{enumitem}
\newlist{skills}{itemize*}{1}
\setlist[skills]{label={}, afterlabel={}, itemjoin=\middot}

\begin{document}
  \begin{skills}
    \item Something
    \item Another thing
    \item Foobar
    \item etc.
  \end{skills}
\end{document}

这很好,但是当项目列表超出行宽时,LaTeX 可能会在我的\middot分隔符上拆分。看起来有点像这样(想象一下我的 ASCII 星号是\textperiodcentered字符!):

|   Something * Another thing *   |
|   Foobar * etc.                 |

我可以通过明智地选择每个\item避免这种情况。然而,更好的是,在这种情况下,LaTeX 会自动用换行符替换悬挂的中间点(适当拉伸该行的字符间距),而无需任何繁琐的手动干预。因此,上面的内容可能看起来像这样(再次发挥您的想象力!):

|   Something  *  Another thing   |
|   Foobar * etc.                 |

(项目文本本身换行到下一行的情况是可以的。只是悬挂的中间点看起来不太好看。)

如何才能实现这一目标?


编辑我终于能够重现该问题的一个例子,包括使用\discretionary@DavidCarlisle 的建议:

\documentclass[a4paper]{article}

\newcommand{\middot}{~\textperiodcentered~}

\usepackage[inline]{enumitem}
\newlist{skills}{itemize*}{1}
\setlist[skills]{label={}, afterlabel={}, itemjoin=\discretionary{}{}{\hbox{\middot}}}

\setlength{\parindent}{0pt}

\begin{document}
  \begin{skills}
    \item This is
    \item a list of things
    \item that should hopefully
    \item break a line at
    \item some point
    \item if I just keep adding
    \item things
  \end{skills}
\end{document}

...产生以下输出:

输出显示悬挂分隔符

请注意第一行末尾的悬挂分隔符。虽然可自由选择确实减少了问题的发生频率,但我推测这是因为 (La)TeX 此时不想使用连字符,因此只能使用直线换行符。

答案1

这实际上是一个评论,扩展了 schtandard 的评论。下面是一个示例,显示该代码可以正常工作mode=unboxed

示例输出

\documentclass[a4paper]{article}

\newcommand{\middot}{~\textperiodcentered~}

\usepackage[inline]{enumitem}
\newlist{skills}{itemize*}{1}
\setlist[skills]{label={}, afterlabel={}, mode=unboxed,
itemjoin=\discretionary{}{}{\hbox{\middot}}}

\setlength{\parindent}{0pt}

\begin{document}

\showoutput
  \begin{skills}
    \item This is
    \item a list of things
    \item that should hopefully
    \item break a line at
    \item some point~x
    \item if I just keep adding
    \item things
  \end{skills}
\end{document}

在下面这个盒装示例中,您会得到相同的输出,其中该行是手动扩展的,因此不需要任何\rightskip

\documentclass[a4paper]{article}

\newcommand{\middot}{~\textperiodcentered~}

\usepackage[inline]{enumitem}
\newlist{skills}{itemize*}{1}
\setlist[skills]{label={}, afterlabel={},
itemjoin=\discretionary{}{}{\hbox{\middot}}}

\setlength{\parindent}{0pt}

\begin{document}

\showoutput
  \begin{skills}
    \item This is
    \item a list of things
    \item that should hopefully
    \item break a line at
    \item some point~x\kern6pt
    \item if I just keep adding
    \item things
  \end{skills}
\end{document}

相关内容