
Ich möchte einfache Textdokumente erstellen, in denen Zeilen und Absätze Unterstreichungssegmente (\rule{}{}) mit unterschiedlichen voreingestellten Längen enthalten können. Wenn ich das Dokument nur mit den Unterstreichungssegmenten zusammenstelle und es ausdrucke, erhalte ich ein Papierdokument, das von Hand oder mit der Schreibmaschine ausgefüllt werden kann.
Ich möchte außerdem Dokumente erstellen, die aussehen, als wären sie mit der Schreibmaschine ausgefüllt worden, tatsächlich aber durch die Eingabe von Text in Schreibmaschinenschrift in den LaTeX-Quellcode erstellt wurden.
Das minimale funktionierende Beispiel erreicht den gewünschten Effekt, allerdings nur durch unpraktisches manuelles Herumfummeln bei der Bestimmung der Länge des Unterstrichs \ul{}, der dem unterstrichenen Text \ultt{} folgt, der erforderlich ist, um die richtige Länge zu erhalten.
Man möchte offensichtlich eine Möglichkeit haben, die Länge des in einem Segment eingegebenen unterstrichenen Textes in Schreibmaschinenschrift zu berechnen und diese von der voreingestellten Länge des Unterstreichungssegments abzuziehen, um die Länge der Unterstreichungserweiterung zu erhalten.
Der minimal funktionierende Beispielcode sollte die Idee klar machen.
Natürlich wäre es auch schön, wenn es eine direktere Möglichkeit gäbe, das Ergebnis mit einem vorhandenen Paket zu erreichen, aber ich habe mehrmals stundenlang gesucht, ohne etwas zu finden.
\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}
Antwort1
Dies kann auf verschiedene Weise erreicht werden.
Sie können den \rlap
Befehl auf den Schreibmaschinentext anwenden, sodass der \ul
darauffolgende Befehl dort beginnt, wo er beginnt, und \ul
dann dieselbe Länge haben kann wie die ursprünglich eingegebene Länge. (Entfernen Sie die Unterstreichung unter dem Schreibmaschinentext, da diese nicht mehr benötigt wird.)
\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}}
(Da Sie nicht verwenden , brauchen Sie das Paket dann \underline
nicht und müssen es auch nicht neu definieren .)ulem
\ULdepth
Übrigens ist es die Parfill-Option für Parskip, die das mbox
es notwendig macht. Ich würde das rausnehmen. Ohne sie könnte man einfach Folgendes tun:
Seller \ul{2.75in}, of \ul{3.13in}
\vspace{1ex}
Seller \mytt{Mr.\ Gargantua}\ul{2.75in}, of \mytt{France}\ul{3.13in}
Persönlich würde ich es allerdings noch bequemer angehen. Ich würde das xhfill
Paket laden und einfach einen Befehl definieren, der die Leerzeichen automatisch auf die richtige Länge bringt, um die Zeile auszufüllen.
\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
Dann müssen Sie nicht manuell berechnenirgendetwas.
Dadurch werden die Leerzeichen jedoch gleich groß. Wenn Sie das nicht möchten, können Sie es nur für das letzte Leerzeichen in der Zeile verwenden, um sicherzustellen, dass das Leerzeichen genau die richtige Breite hat, um die Zeile auszufüllen, ohne es durch Ausprobieren erreichen zu müssen.
Es ist auch möglich, das zu tun, was Sie vorgeschlagen haben; die Breite der Einfügung ermitteln und abziehen:
\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} ...}
Aber ich würde diesen Weg nicht empfehlen.