
我想建立簡單的文字文檔,其中行和段落可能包含各種預設長度的下劃線段(\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 選項使得mbox
es 變得必要。我會把它拿出來。沒有它你可以簡單地做:
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} ...}
但我不建議這樣做。