计算超链接表单的 TextField 宽度

计算超链接表单的 TextField 宽度

我正在尝试使用 创建一个表单hyperref。这是我目前得到的结果。(我也会移除边框。但要查看我正在做什么,它仍然在那里。)

在此处输入图片描述

我对当前的解决方案存在以下问题:

  1. 是否有某种方法可以自动计算width文本字段,以便它们填满单元格中的剩余空间。
  2. 当我使用时,为什么行首会有这个小凹痕multicolumn

我目前的想法是这样的:

  • 添加另一个参数,即DefaultTextField当前单元格宽度
  • 计算标签所需的空间(不幸的是,我不知道如何做到这一点)
  • 将宽度参数设置TextFieldwidth=#<paramnr>-/reservedspace
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{hyperref}

\usepackage{multirow}
\usepackage{tabularx}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}

\renewcommand\LayoutTextField[2]{%
    #1 \raisebox{-3.0pt}{#2}%
}
\newcommand{\DefaultTextField}[2][]{%
    \mbox{\TextField[align=1,bordercolor=0 1 1,backgroundcolor={},#1]{#2}}%
}

\renewcommand\LayoutCheckField[2]{%
    \raisebox{-1.0pt}{#2}\hspace*{2mm}#1%
}
\newcommand{\DefaultCheckBox}[2][]{%
    \mbox{\CheckBox[bordercolor=0 0 0,backgroundcolor={},borderwidth=0.4mm,height=3mm,width=3mm,#1]{#2}}%
}

\begin{document}
    \begin{Form}
        \renewcommand{\arraystretch}{1.5}%
        \begin{tabular}{@{}L{0.5\textwidth}L{0.5\textwidth}@{}}
            \DefaultTextField[name=firstname,width=0.25\textwidth]{Firstname} & 
            \DefaultTextField[name=lastname,width=0.25\textwidth]{Lastname}\\ \hline
            
            \DefaultTextField[name=address1,width=0.25\textwidth]{Address} &
            \DefaultTextField[name=address2,,width=0.25\textwidth]{ZIP, City}\\ \hline
            
            \multicolumn{2}{l}{\DefaultTextField[name=mail,width=0.25\textwidth]{E-Mail}}\\ \hline
            
            \multicolumn{2}{l}{\DefaultTextField[name=phone,width=0.25\textwidth]{Phone/Mobile}}\\ \hline
            
            Foo\hfil\DefaultCheckBox[name=bar]{Bar}\hfil & \DefaultTextField[name=something,width=0.25\textwidth]{other} \\ \cline{2-2}
            
            \multicolumn{2}{l}{\DefaultTextField[name=number,width=0.25\textwidth]{Something}}\\ \hline
        \end{tabular}
    \end{Form}
\end{document}

答案1

您可以轻松获取标签的宽度,然后计算长度:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{hyperref}

\usepackage{multirow}
\usepackage{tabularx}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}

\renewcommand\LayoutTextField[2]{%
    #1 \raisebox{-3.0pt}{#2}%
}
\newlength\templength
\newcommand{\DefaultTextField}[2][]{%
    \settowidth\templength{#2 }%
    \mbox{\TextField[align=1,bordercolor=0 1 1,backgroundcolor={},#1,width=\dimexpr\linewidth-\templength]{#2}}%
}

\renewcommand\LayoutCheckField[2]{%
    \raisebox{-1.0pt}{#2}\hspace*{2mm}#1%
}
\newcommand{\DefaultCheckBox}[2][]{%
    \mbox{\CheckBox[bordercolor=0 0 0,backgroundcolor={},borderwidth=0.4mm,height=3mm,width=3mm,#1]{#2}}%
}

\begin{document}
    \begin{Form}
        \renewcommand{\arraystretch}{1.5}%
        \noindent
        \begin{tabular}{@{}L{\dimexpr0.5\textwidth-\tabcolsep}L{\dimexpr0.5\textwidth-\tabcolsep}@{}}
            \DefaultTextField[name=firstname]{Firstname} &
            \DefaultTextField[name=lastname]{Lastname}\\ \hline

            \DefaultTextField[name=address1]{Address} &
            \DefaultTextField[name=address2]{ZIP, City}\\ \hline

            \multicolumn{2}{@{}p{\textwidth}@{}}{\DefaultTextField[name=mail,width=0.25\textwidth]{E-Mail}}\\ \hline

            \multicolumn{2}{@{}p{\textwidth}@{}}{\DefaultTextField[name=phone,width=0.25\textwidth]{Phone/Mobile}}\\ \hline

            Foo\hfil\DefaultCheckBox[name=bar]{Bar}\hfil & \DefaultTextField[name=something,width=0.25\textwidth]{other} \\ \cline{2-2}

            \multicolumn{2}{@{}p{\textwidth}@{}}{\DefaultTextField[name=number,width=0.25\textwidth]{Something}}\\ \hline
        \end{tabular}
    \end{Form}
\end{document}

在此处输入图片描述

相关内容