标记多行下划线文本

标记多行下划线文本

我需要创建大量文档,但有一个非常特殊的需求我找不到解决方案。

在这些文件中,有一些带下划线的文字,必须用数字或字母标记,并放在下划线正下方的文字中间。

为了对短文本执行此操作,我使用\underset数学模式和程序包\ul中的命令soul来执行我需要的操作。这仅在项目很短且没有超过换行符时才有效。

我知道该\ul命令本身可以很好地处理换行符,但我想不出如何让这个居中标签跨多行工作。我需要标签出现在下划线部分的每一行文本中心下方。

例如,如果我有一句标有“4”的带下划线的句子,它在纸上占三行,那么在页面上的每一行的下划线部分下面都必须出现数字“4”。具体来说,如果下划线部分只有一小段,比如一个单词,出现在其中一行,那么标签必须位于该下划线部分下方的中央,而不是位于出现该下划线的整行的中央。

我知道这是一个复杂的要求,但我希望你们中一位聪明的人能为我提供一个解决方案,让我在乳胶中做到这一点(或者如果只有一种方法可以在上下文中做到这一点)。

任何建议都值得赞赏。

\documentclass[two column]{article}
\usepackage{amsmath,soul}

\begin{document}

$\underset{4}{\text{\ul{This is short text}}}$

$\underset{5}{\text{\ul{Much longer text in this format will not split properly along lines, which is the effect I would like to produce.}}}$

\ul{But if I only use the ul command, I will not get the propery labelling on each line like I want}. 

\bigskip

$\underset{6}{\text{\ul{I want something to look like this text does, but I}}}$ \\
$\underset{6}{\text{\ul{don't want to manually break lines.}}}$ More text here.

\end{document}

答案1

我刚刚发布了soulpos,它允许使用基于 savepos 的不同方法(需要 pdftex 或兼容)。需要两次传递:

\documentclass[two column]{article}
\usepackage{amsmath,soul}
\usepackage{soulpos}

\ulposdef{\ulnumaux}{%
   $\underset{\saveulnum}{\rule[-.7ex]{\ulwidth}{.4pt}}$}

\newcommand{\ulnum}[2]{%
  \def\saveulnum{#1}%
  \ulnumaux{#2}}

\begin{document} 

\ulnum{4}{This is short text}

\ulnum{6}{I want something to look like this text does, but I
don't want to manually break lines.} More. \ulnum{7}{And more text here.}

\end{document}

soulpos 和编号下划线

答案2

在此处输入图片描述

虽然远非完美,但这是一个开始。如果开始和结束在同一行,此版本将不起作用,如果它们之间发生分页符,则此版本将不起作用。这两个问题都可以修复。

前几天我看过这个,但不记得测量线上某个点的位置的技巧,后来巧合的是@FrankMittelbach 出现了,并在这里对它进行了完整的说明

如何改变段落中间的缩进?

下面是相同的代码,稍微重新排列了一下,就生成了上面的图像(此版本为纯 TeX)

\hsize=.5\hsize
\newdimen\lastlinewidth

\baselineskip1.5\baselineskip

\def\ustart{%
  \ustartend{%
\hbox to \hsize{\hskip\lastlinewidth
\leaders\hrule height 0pt depth 1pt\hskip 0pt plus 2fill
\kern-\hsize
\hskip\lastlinewidth\hfill\smash{\raise-7pt\hbox{\tempn}}\hfill
}}}

\def\uend{%
  \ustartend{%
\count0=\prevgraf
\unskip\hbox to \hsize{%
\smash{\raise-\baselineskip\vbox{%
\loop
\ifnum\count0>2
\advance\count0 -1
\hbox to \hsize{%
\leaders\hrule height 0pt depth 1pt\hskip 0pt plus 2fill
\kern-\hsize
\hfill\smash{\raise-7pt\hbox{\tempn}}\hfill
}%
\repeat
\hbox to \lastlinewidth{%
\leaders\hrule height 0pt depth 1pt\hskip 0pt plus 2fill
\kern-\lastlinewidth
\hfill\smash{\raise-7pt\hbox{\tempn}}\hfill
}\hfill}}}}}

\def\ustartend#1#2{%
\def\tempn{#2}%
\leavevmode\hbox{}%
\begingroup
  \predisplaypenalty=10000
  \postdisplaypenalty=10000
  \abovedisplayskip=-\baselineskip
  \abovedisplayshortskip=-\baselineskip
  \belowdisplayskip=0pt %-\baselineskip
  \belowdisplayshortskip=0pt %-\baselineskip
  $$
\global\lastlinewidth\predisplaysize
\global\advance\lastlinewidth by -2em
#1%
$$%  
\endgroup
\vskip-\baselineskip
\vskip-\parskip     
\noindent\kern\lastlinewidth
}



\def\n{One two thr\-ee four five six seven eight nine ten. }
\def\c{Red blue yellow green. }

\n\c\ustart{3}start underline \n\n
\n\n\n\n
\n\n end underline\uend{3} first text after end
\n\n

\n\n\n\n\c\ustart{4}start again\c\n\n\c\c\n
\n\n\n end underline\uend{4} first text after end
\n\c\c\n\n\c\c\n
\n\n\n\n\c\c\n\n\c\c\n

\bye

相关内容