Documentos de texto con segmentos subrayados de longitud fija que se pueden rellenar a mano, con máquina de escribir o introduciendo cadenas de caracteres en fuente LaTeX.

Documentos de texto con segmentos subrayados de longitud fija que se pueden rellenar a mano, con máquina de escribir o introduciendo cadenas de caracteres en fuente LaTeX.

Me gustaría crear documentos de texto simples en los que las líneas y párrafos puedan contener segmentos subrayados (\rule{}{}) de varias longitudes preestablecidas. Al compilar el documento únicamente con los segmentos subrayados e imprimirlo, se obtiene un documento en papel que se puede completar a mano o con máquina de escribir.

También me gustaría producir documentos que parezcan haber sido completados con una máquina de escribir, pero que en realidad se producen ingresando texto en fuente de máquina de escribir en la fuente LaTeX.

El ejemplo de trabajo mínimo logra el efecto deseado, pero solo mediante una manipulación manual poco práctica para determinar la longitud del subrayado \ul{} que sigue al texto subrayado \ultt{} necesario para obtener la longitud correcta.

Obviamente, uno quiere una forma de calcular la longitud del texto de fuente de máquina de escribir subrayado ingresado en un segmento y restarlo de la longitud preestablecida del segmento subrayado para obtener la longitud de la extensión del subrayado.

El código de ejemplo mínimo de trabajo debería aclarar la idea.

Obviamente también sería bueno tener alguna forma más directa de lograr el resultado con un paquete existente, pero he buscado durante horas en varias ocasiones sin encontrar nada.

\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}

Respuesta1

Hay diferentes maneras de lograrlo.

Puede usar el \rlapcomando en el texto de la máquina de escribir, de modo que el \ulcomando que viene después comience donde comienza, y \ulluego pueda tener la misma longitud que la que insertó originalmente. (Elimine el subrayado debajo del texto de la máquina de escribir, ya que ya no es necesario).

\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}}

(Como no está utilizando \underline, no necesita el ulempaquete ni redefinirlo \ULdepth).

Por cierto, es la opción parfill de parskip la que hace que mboxes sea necesario. Yo lo quitaría. Sin él, simplemente podrías hacer:

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

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

Personalmente, sin embargo, sería aún más vago. Cargaría el xhfillpaquete y simplemente definiría un comando para que automáticamente los espacios en blanco tengan la longitud correcta para completar la línea.

\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

Entonces no tienes que calcular manualmentecualquier cosa.

Sin embargo, esto hará que los espacios en blanco sean del mismo tamaño. Si no desea eso, es posible que solo desee usarlo para el último espacio en blanco de la línea, para asegurarse de que el espacio en blanco tenga exactamente el ancho correcto para llenar la línea sin tener que obtenerlo mediante prueba y error.

También es posible hacer lo que sugeriste; obtenga el ancho de la inserción y réstelo:

\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} ...}

Pero no recomendaría ir por ese camino.

información relacionada