如何找到从右到左的段落最后一行的长度

如何找到从右到左的段落最后一行的长度

这个问题是我上一个问题的后续从右到左的文本颜色奇怪\color如果命令包含在段落开头,则在从右到左的文本中效果很好,然后我想我可以像那样在段落中间使用它

\documentclass{article}
\usepackage{xcolor}

\TeXXeTstate=1 % to enable right to left writing 

\parindent=0pt

\begin{document}
\everypar{\beginR} % for right to left writing 

before \par 
\hangindent=-3em % how to measure length of preceding line 
\hangafter=-1
\vskip-\baselineskip
{\color{blue}
right to left text right to left text right to left text right to left  text right  to left text right to left text right to left text 
\par} 
\hangindent=-20em % how to measure length of preceding line
\hangafter=-1
\vskip-\baselineskip
after 

\end{document}

在此处输入图片描述

问题是如何计算彩色部分前最后一行的长度。欢迎任何有助于自动化该过程的帮助。

答案1

最后一行的长度可作为\predisplaysize显示方程式使用。当然,您的情况中没有方程式,因此我们必须插入一个空方程式:

\documentclass{article}
\usepackage{xcolor}

\TeXXeTstate=1 % to enable right to left writing 

\parindent=0pt

\makeatletter
\newcommand\hangtolastline[1][]{%
  \null$$%
    \predisplaypenalty=10000
    \abovedisplayshortskip-\baselineskip
    \abovedisplayskip\abovedisplayshortskip
    \postdisplaypenalty=10000
    \belowdisplayshortskip\abovedisplayskip
    \belowdisplayskip\abovedisplayskip
    \xdef\mysavedhang{\hangafter=-1\relax\hangindent-\dimexpr\hsize+\the\predisplaysize-2em\relax\relax}%
  $$%
  \par#1\mysavedhang
}
\makeatother

\begin{document}
\everypar{\beginR} % for right to left writing 

\noindent before \hangtolastline
{\color{blue}
right to left text right to left text right to left text right to left  text right  to left text right to left text right to left text 
\hangtolastline[\aftergroup]} 
after 

\end{document}

警告:这非常脆弱。例如,它会在单行段落后断开,而无需\noindent,这可能会产生奇怪的分页符,并且您无法在\hangtolastline调用 之前结束段落。

相关内容