我有一个项目清单,需要填补句子末尾的空白。
但有时,如果规则位于最后,则不具有适当的合理性。
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
\begin{enumerate}
\item The number of people in the poorest half of the world's population: \rule[-0.1mm]{2.5cm}{0.1mm}
\item The decrease in wealth of the poorest half of the world's popu: \rule[-0.1mm]{2.5cm}{0.1mm}\ %
\item The number of people with the same wealth as the poorest half of the population in 2010: \rule[-0.1mm]{2.5cm}{0.1mm}\ %
\end{enumerate}
\end{document}
有什么办法可以强制纠正它吗?
答案1
Werner 使用位置测量(需要两次 TeX 运行和 pdfTeX 扩展),而 Bernard 则表明可以使用 LaTeX 包。这两种解决方案都在有问题的行中留下了一个空格。好的。如果这是所需的行为(OP 没有指定),那么我会展示基于 TeX 基元的解决方案,这似乎更简单、更直接。
\newdimen \rulewd \rulewd=2.5cm
\def\myrule{\hskip0pt plus\rulewd\penalty0\hskip0pt plus-\rulewd \hbox to\rulewd{\hrulefill}}
此解决方案的主要核心称为“可丢弃项”。TeX 可以在 处\penalty0
(即规则本身之前)断行。如果这样做,则\hskip0pt plus-\rulewd
丢弃后面的可丢弃项,而前面的项则\hskip 0pt plus\rulewd
在行末留出空格。如果断点不在 处\penalty0
,则后面的项\hskip0pt plus-\rulewd
将取消前面的项的活动\hskip0pt plus\rulewd
,并且仅将规则放在此处。
答案2
\rule[<raise>]{<length>}{<width>}
<length>
设置长度和粗细的规则<width>
,增加<drop>
(0pt
默认值)。它的作用就像单个字符(或框),就像同一行上的其他任何字符一样。因此,将它放在句子的末尾应该可以像往常一样将其断开,除非它太长,并且似乎没有最佳方法将其(整体\rule
)断开到下一行。
下面我定义了\answerrule
一个\rule
长度为 25mm 的线,它位于代码中的同一行,除非规则不适合。然后它插入一个\par
图形中断前插入\rule
。
\documentclass{article}
%\usepackage{showframe}% Just to show the text block boundary
\usepackage[savepos]{zref}
\newcounter{answercnt}
\newcommand{\answerrule}{%
\stepcounter{answercnt}%
\zsaveposx{answer-\theanswercnt}%
\ifdim\dimexpr\hoffset+1in+\oddsidemargin+\leftmargin+\linewidth-\zposx{answer-\theanswercnt}sp<25mm
\par\nobreak
\fi
\rule[-0.1mm]{25mm}{0.1mm}%
}
\begin{document}
\begin{enumerate}
\item The number of people in the poorest half of the world's population: \answerrule
\item The decrease in wealth of the poorest half of the world's population: \answerrule
\item The number of people with the same wealth as the poorest half of the population in 2010: \answerrule
\end{enumerate}
\end{document}
答案3
基于 的解决方案linegoal
,借助etoolbox
。2.5cm 是可选参数的默认值:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{linegoal}
\newlength{\remain}
\usepackage{etoolbox}
\newcommand{\myrule}[1][2.5cm]{\setlength{\remain}{\linegoal}\ifdimless{\remain}{#1}{\newline}{} \rule[-0.1mm]{#1}{0.1mm}}
\begin{document}
\begin{enumerate}
\item The number of people in the poorest half of the world's population: \myrule
\item The decrease in wealth of the poorest half of the world's popu: \myrule%
\item The number of people with the same wealth as the poorest half of the population in 2010: \myrule
\end{enumerate}
\end{document}