这是基于 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