我目前正在制作我的论文模板,要求标题的格式如下所示:
标题以固定的“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 原语。