具有固定长度下划线段的文本文档,可通过手写、打字或在 LaTeX 源中输入字符串来填充

具有固定长度下划线段的文本文档,可通过手写、打字或在 LaTeX 源中输入字符串来填充

我想创建简单的文本文档,其中的行和段落可以包含各种预设长度的下划线段 (\rule{}{})。仅使用下划线段编译文档并打印会得到一份可以手写或打字填写的纸质文档。

我还想制作看起来像是用打字机填写的文档,但实际上是通过在 LaTeX 源中输入打字机字体的文本生成的。

最小工作示例实现了预期的效果,但只能通过不切实际的手动摆弄来确定下划线文本 \ultt{} 后面的下划线 \ul{} 的长度才能获得正确的长度。

显然,人们想要一种方法来计算在段中输入的下划线打字机字体文本的长度,并从下划线段的预设长度中减去它以获得下划线延伸的长度。

最小的工作示例代码应该使这个想法清晰起来。

显然,如果能通过现有的包以更直接的方式实现该结果就更好了,但我已经搜索了好几个小时却一无所获。

\documentclass[10pt, letterpaper]{article}

\usepackage[top=1.00in, bottom=1.00in, left=1.00in, right=1.00in]{geometry}
\usepackage[parfill]{parskip}
\usepackage{ulem} % Set depth of underline
\def\ul#1{\rule[-1.8pt]{#1}{0.4pt}}
\def\ultt#1{\rule[-1.8pt]{0em}{0.4pt}\uline{\texttt{#1}}\rule[-1.8pt]{0em}{0.4pt}}

\begin{document}

\renewcommand{\ULdepth}{1.8pt}

\vspace{3ex}
\noindent\makebox[\linewidth]{\rule{\textwidth}{0.4pt}}  % Guide line
\makebox[\textwidth][l]{\rule{3.125in}{0.4pt}\rule{0.25in}{1pt}\rule{3.125in}{0.4pt}}  % Guide line
\vspace{1ex}
\makebox[\textwidth][l]{Seller \ul{2.75in}, of \ul{3.13in}}
\vspace{1ex}
\makebox[\textwidth][l]{Seller \ultt{Mr. Gargantua}\ul{1.73in}, of \ultt{France}\ul{2.69in}}
\noindent\makebox[\linewidth]{\rule{\textwidth}{0.4pt}}   % Guide line

\end{document}

答案1

有不同的方法可以实现这一点。

您可以\rlap在打字机文本上使用该命令,这样它\ul后面的命令就可以从其开始的位置开始,然后其\ul长度可以与您最初插入的长度相同。(删除打字机文本下方的下划线,因为不再需要它。)

\newcommand{\mytt}[1]{\rlap{\texttt{#1}}}

\makebox[\textwidth][l]{Seller \ul{2.75in}, of \ul{3.13in}}
\vspace{1ex}
\makebox[\textwidth][l]{Seller \mytt{Mr.\ Gargantua}\ul{2.75in}, of \mytt{France}\ul{3.13in}}

(由于您不使用\underline,因此您不需要该ulem包,也不需要重新定义\ULdepth。)

顺便说一句,parskip 的 parfill 选项使得mboxes 成为必需。我会把它去掉。如果没有它,您可以简单地执行以下操作:

Seller \ul{2.75in}, of \ul{3.13in}

\vspace{1ex}
Seller \mytt{Mr.\ Gargantua}\ul{2.75in}, of \mytt{France}\ul{3.13in}

不过,就我个人而言,我会更懒。我会加载包xhfill,然后定义一个命令来自动使空白达到合适的长度以填充行。

\usepackage{xhfill}
\newcommand{\mytt}[1]{\rlap{\texttt{#1}}}
\newcommand{\myulfill}{\xrfill[-1.8pt]{0.4pt}}
...
Seller \myulfill, of \myulfill

\vspace{1ex}
Seller \mytt{Mr.\ Gargantua}\myulfill, of \mytt{France}\myulfill

那么你就不必手动计算任何事物

但是,这会使空白的大小相等。如果您不希望这样,您可能只想将其用于行上的最后一个空白,以确保空白的宽度恰好适合填充行,而不必通过反复试验来获得它。

也可以按照你的建议去做;获取插入的宽度并减去它:

\newlength{\ullength}
\setlength{\ullength}{2.75in}
\newlength{\fieldwidth}
\settowidth{\fieldwidth}{\texttt{Mr.\ Gargantua}}
\addtolength{\ullength}{-\fieldwidth}

\makebox[\textwidth][l]{Seller \ultt{Mr.\ Gargantua}\ul{\ullength} ...}

但我不建议这么做。

相关内容