列表项下划线至页面宽度

列表项下划线至页面宽度

我目前正在制作我的论文模板,要求标题的格式如下所示:

示例标题

标题以固定的“THESIS:”标签开头,标题本身带有延伸至行尾的下划线。在以前的版本中,我手动绘制线条并将\tl_range:Nnn标题分成两行,因为它们的宽度是恒定的。但是,我很快就遇到了如何正确换行的问题。有些短标题只需要一行,而较长的标题则需要两行以上。

我现在正在考虑list环境,但不知道如何实现。用于下划线的包要么无法在列表中正确换行,要么不支持中文,而中文是此模板的实际语言。另一方面,不依赖这些包而是绘制固定线是否更好?那么我如何确定我需要多少行?

总结:

  • “论文:~”标签
  • 两端对齐的文本
  • 固定宽度的下划线
  • 中文支持

我还可以提供一个只能用 LuaTeX 编译的测试项目。遗憾的是,该 lua-ul 包忽略了空格。还值得一提的是,这个极简但不工作的示例使用了 LaTeX3 样式,这也是我在模板文件中使用的样式。

\documentclass{article}

\usepackage{expl3,lipsum,lua-ul}

\makeatletter
\ExplSyntaxOn
\cs_new_protected:Npn \__test_print_title:
  {
    \list { THESIS:~ }
      {
        \labelwidth  \c_zero_dim
        \labelsep    \c_zero_dim
        \leftmargin  \c_zero_dim
        \rightmargin \c_zero_dim
      }
    \item \underLine{\lipsum[][1-2]\hfill}
    \endlist
  }
\NewDocumentCommand \maketesttitle { }
  { \__test_print_title: }
\ExplSyntaxOff
\makeatother

\begin{document}
\maketesttitle
\end{document}

我非常感谢所提供的任何帮助。

答案1

您可以创建一个 \vbox,然后分解它的行并使用下划线再次运行段落中断算法。

\newbox\labeltext
\setbox\labeltext=\hbox{THESIS: }

\def\spectitle#1{%
   \setbox0=\vbox{\hangindent=\wd\labeltext \hangafter=-1 
      \leftskip=0pt plus1fill \rightskip=\leftskip \parindent=0pt #1\par
      \global\setbox2=\hbox{}
      \loop
         \setbox1=\lastbox \unskip\unpenalty
         \unless\ifvoid1 \global\setbox2=\hbox{\createubox\penalty0\unhbox2}
         \repeat
    }
    {\baselineskip=20pt
    \noindent\copy\labeltext\unhbox2 \par}   
}
\def\createubox{% create underlined box
    \vtop{\box1\kern-\prevdepth\kern2pt\hrule}}

% test
\hsize=10cm

\spectitle{Text dgdh ajhjd ja jsd ba gha dh dag sgfyie csf ufe w eeb ui vee
           ja jsd ba gha dh dag sgfyie csf ufe w ee}

\bye

您不需要任何包,这里只使用 TeX 原语。

相关内容