使用 \RaggedRight 进行连字

使用 \RaggedRight 进行连字

这是基于 egreg 的代码和注释在 \tabfill 中缩进文本(制表环境),其中\tabfill定义了一个命令,以便它在tabbing环境中换行。

这种方法的一个问题是它会导致单词之间出现很多空白:

\documentclass{article}
\makeatletter
\newcommand\tabfill[1]{%
  \dimen@\linewidth
  \advance\dimen@\@totalleftmargin
  \advance\dimen@-\dimen\@curtab
  \parbox[t]\dimen@{%
    \leftskip=2em\hspace*{-2em}#1\ifhmode\strut\fi}%
}
\makeatother

\textwidth=.75\textwidth % just to make wrapping more evident

\begin{document}
\begin{tabbing}
\hspace{3.1cm} \= \kill
Column 1 \> Column 2\\
bla bla \> \tabfill{Include longs words like extracurricular}\\
bla bla \> \tabfill{bla bla}
\end{tabbing}
\end{document}

在此处输入图片描述

\RaggedRight建议的解决方案是从包中使用ragged2e

\documentclass{article}
\usepackage{showframe}
\usepackage{ragged2e}
\makeatletter
\newcommand\tabfill[1]{%
  \dimen@\linewidth
  \advance\dimen@\@totalleftmargin
  \advance\dimen@-\dimen\@curtab
  \parbox[t]\dimen@{%
    \RaggedRight\leftskip=2em\hspace*{-2em}#1\ifhmode\strut\fi}%
}
\makeatother

\textwidth=.75\textwidth % just to make wrapping more evident

\begin{document}
\begin{tabbing}
\hspace{3.1cm} \= \kill
Column 1 \> Column 2\\
bla bla \> \tabfill{bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla}\\
bla bla \> \tabfill{Include longs words like extracurricular}\\
bla bla \> \tabfill{bla bla}
\end{tabbing}
\end{document}

虽然这修复了单词之间的空格,但它并没有extracurricular像我预期的那样将单词连字符化,而是倾向于在第一行末尾留下大量空格:

在此处输入图片描述

所以我的问题是,如何在制表环境中换行,同时保持“正常”的单词间空格和连字符?

答案1

恭喜!您发现了代码中的错误。:)

末尾添加的支撑使得最后一个单词不需要连字符。

这是正确的版本\RaggedRight

\documentclass{article}
\usepackage{showframe}
\usepackage{ragged2e}
\makeatletter
\newcommand\tabfill[1]{%
  \dimen@\linewidth
  \advance\dimen@\@totalleftmargin
  \advance\dimen@-\dimen\@curtab
  \parbox[t]\dimen@{%
    \RaggedRight\leftskip=2em\hspace*{-2em}#1\ifhmode\unskip\nobreak\strut\fi
  }%
}
\makeatother

\textwidth=.75\textwidth % just to make wrapping more evident

\begin{document}
\begin{tabbing}
\hspace{3.1cm} \= \kill
Column 1 \> Column 2\\
bla bla \> \tabfill{bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla}\\
bla bla \> \tabfill{Include longs words like extracurricular}\\
bla bla \> \tabfill{bla bla}
\end{tabbing}
\end{document}

在此处输入图片描述

您可能还想设置

\finalhyphendemerits=0

之前\RaggedRight,因此 TeX 就不会那么不愿意对倒数第二行进行连字符连接。

\makeatletter
\newcommand\tabfill[1]{%
  \dimen@\linewidth
  \advance\dimen@\@totalleftmargin
  \advance\dimen@-\dimen\@curtab
  \parbox[t]\dimen@{%
    \finalhyphendemerits=\z@
    \RaggedRight\leftskip=2em\hspace*{-2em}#1\ifhmode\unskip\nobreak\strut\fi
  }%
}
\makeatother

正如 Martin Schröder(的作者ragged2e)在评论中所建议的那样,可以使用特殊参数\RaggedRightLeftskip\dimexpr(或calc特征)。

\makeatletter
\newcommand\tabfill[1]{%
  \parbox[t]{\dimexpr\linewidth-\@totalleftmargin-\dimen\@curtab}{%
    \finalhyphendemerits=\z@
    \RaggedRightLeftskip=2em
    \RaggedRight\hspace*{-2em}#1\ifhmode\unskip\nobreak\strut\fi
  }%
}
\makeatother

相关内容