这个问题是我上一个问题的后续从右到左的文本颜色奇怪,\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
调用 之前结束段落。