![编辑](https://linux22.com/image/360181/%E7%BC%96%E8%BE%91.png)
我想要\q{}
多行,但现在它只设计为一行。例如,取值从 2 到每帧的最大行数。代码基于 Christian 的帖子答案创建可填写的 PDF。
% https://tex.stackexchange.com/a/14845/13173
\documentclass{beamer}
\usetheme{Berkeley}
%https://tex.stackexchange.com/a/14845/13173
\usepackage[latin1]{inputenc}
\newdimen\longline
\longline=\textwidth\advance\longline-4cm
\def\LayoutTextField#1#2{#2} % override default in hyperref
\def\lbl#1{\hbox to 4cm{#1\dotfill\strut}}%
\def\labelline#1#2{\lbl{#1}\vbox{\hbox{\TextField[name=#1,width=#2,bordercolor=white]{\null}}\kern2pt\hrule}} % https://tex.stackexchange.com/a/374712/13173
\def\q#1{\hbox to \hsize{\labelline{#1}{\longline}}\vskip1.4ex}
\begin{document}
\section{Lorem}
\begin{frame}
\begin{Form}
\q{Merkki:} % TODO have here many lines
% \q{}
% \q{}
\end{Form}
\end{frame}
\end{document}
图 1 中的输出
图 1 仅一行的输出
预期输出:输入多行(例如 3 行),并在另一个页面上显示输入
在一个环境中测试 UlrikeFisher 的提案
代码
\documentclass{beamer}
\usepackage[english]{babel}
\usetheme{Berkeley}
%\usepackage[margin=1pt]{geometry}% http://ctan.org/pkg/geometry % Beamer loads geometry already!
% https://tex.stackexchange.com/a/387474/13173
\usepackage{xparse,calc}
\usepackage{eforms}
\begin{document}
\begin{frame}{Henkil\"{o}tiedot}
% #Henkilotiedot https://tex.stackexchange.com/a/387474/13173
\medskip
\textField[
\Ff\FfMultiline
\Ff\FfDoNotSpellCheck
]
{myinput}{\dimexpr\linewidth-10ex}{5\baselineskip}
\end{frame}
% https://tex.stackexchange.com/a/385265/13173
\pdfpagewidth 21cm
\pdfpageheight 29.7cm
%% #Henkilotiedot
\textField[
\Ff\FfMultiline
\Ff\FfDoNotSpellCheck
\Ff\FfReadOnly
\AA{\AACalculate{event.value=getField("myinput").value;}}
]
{myoutput}{\dimexpr\linewidth-10ex}{5\baselineskip}
% https://tex.stackexchange.com/q/385438/13173
\newcommand*{\TableA}{%
% \textcolor{gray}{\rule{.5\linewidth}{10cm}}%
\begin{table}[hpt]
\setlength\tabcolsep{1pt} % default value: 6pt % https://tex.stackexchange.com/a/201117/13173
\begin{tabular}{|p{.2cm}|l|l|l|l|l|l|l|p{.2cm}|}
\hline
\rot{{\tiny\textbf{Avain muuttuja}}}
& \textbf{V2} & \textbf{V1} & \textbf{V0}
& \textbf{TESTI Muuttujat}
& \textbf{P1} & \textbf{P2} & \textbf{P3}
& \rot{{\tiny\textbf{Kriittinen muuttuja}}} \\ \hline
& & & & 1. Sosiaaliset taidot & & & & \\ \hline
& & & & 2. Ihmissuhteet (TS: K/E)* & & & & \\ \hline
& & & & 3. Ammatillinen arvio & & & & \\ \hline
\end{tabular}
\end{table}
}
\newcommand*{\TableB}{%
\textcolor{red}{\rule{.5\linewidth}{3cm}}%
}
\newcommand*{\TableC}{%
\textcolor{green}{\rule{.5\linewidth}{3cm}}%
}
\newcommand*{\TableD}{%
\textcolor{blue}{\rule{.5\linewidth}{3cm}}%
}
% Show summary here from Page 1 and 2
\begingroup
\setbeamertemplate{navigation symbols}{}%remove navigation symbols
\section{Summary}
\begin{frame}[plain]
\vskip 1.5cm
\hspace*{-1.7cm}% to leave 1.0 cm margin
\begin{minipage}{19cm}
\begin{center}
TESTI
\end{center}
% Pisteytyskohta https://tex.stackexchange.com/q/385438/13173
\begin{adjustbox}{max width=\textwidth}
\sbox0{\TableA}%
\noindent
\vtop{%
\kern0pt % Align at the top
\copy0 %
}%
\kern-.2pt %
\vrule
\kern-.2pt %
\vtop to \dimexpr\ht0+\dp0{%
\kern0pt % Align at the top
\hbox{\TableB}%
\vfill
\hbox{\TableC}%
\vfill
\hbox{\TableD}%
}
\end{adjustbox}
\end{minipage}
\end{frame}
% these below eventually are not needed, if this is the last slide of your document
\makeatletter
\pdfpagewidth \beamer@paperwidth
\pdfpageheight \beamer@paperheight
\makeatother
\endgroup
\end{document}
图2 页面设置受环境影响
操作系统:Debian 9
TeXLive:2017
Acrotex 安装:这里
答案1
你说的很多行是什么意思有点不清楚。但如果你想要一个多行文本字段,这里有一个电子表格示例。要将值发送到输出页面,你可以使用相同的字段名称(但你不能给它们不同的“只读”值),或者使用 javascript(这需要一个可以处理的 pdf 查看器):
\documentclass{beamer}
\usetheme{Berkeley}
\usepackage[utf8]{inputenc}
\usepackage{xparse,calc}
\usepackage{eforms}
\begin{document}
\begin{Form}
\begin{frame}{Input}
Question: Say something about ....
\medskip
\textField[
\Ff\FfMultiline
\Ff\FfDoNotSpellCheck
]
{myinput}{\dimexpr\linewidth-10ex}{5\baselineskip}
\end{frame}
\begin{frame}{Output}
\textField[
\Ff\FfMultiline
\Ff\FfDoNotSpellCheck
\Ff\FfReadOnly
\AA{\AACalculate{event.value=getField("myinput").value;}}
]
{myoutput}{\dimexpr\linewidth-10ex}{5\baselineskip}
\end{frame}
\end{Form}
\end{document}
答案2
如果没有 Adobe Reader(或其他兼容的 PDF 查看器),我无法测试这一点。但是,根据通常的行为,这应该可以工作。此外,评论说,即使使用此处的命令包装器,这也能按预期工作。
基本上,如果您为两个文本字段提供相同的内容name
,则填写其中一个字段会填充两个字段。我知道这一点,因为我从来不想要这种行为,有时我会不小心造成这种情况,但在课堂上发现我无法用不同的内容填写两个不同的文本字段。(当我进入第二张具有相同名称的字段的幻灯片时,该字段已预先填充了较早的答案。我可以删除它并写一个新的答案,但这会删除我在较早的幻灯片上输入的内容。)
但是,Okular 似乎不尊重这种行为,所以我无法检查将其包装在宏中是否正常工作。(Adobe 在 Linux 上崩溃得还来不及。嗯,首先它需要几个小时才能启动。然后它冻结了。然后它崩溃得还来不及。一般来说。它并不像人们想象的那样可预测。)
这是我对多个单行字段情况的原始回答。 (有关多个多行字段的情况,请参见下文。)
\documentclass{beamer}
\usetheme{Berkeley}
\usepackage[utf8]{inputenc}
\usepackage{xparse,calc}
\makeatletter
\newlength\textinput@labelwd
\newlength\textinput@fieldwd
\newlength\textinput@ht
\setlength\textinput@labelwd{40mm}
\setlength\textinput@fieldwd{\textwidth-40mm}
\setlength\textinput@ht{12pt}
\def\LayoutTextField#1#2{%
\makebox[\textinput@labelwd]{\strut #1: \dotfill{} }#2%
}
\NewDocumentCommand\textinput{ s o +m }{%
\IfValueTF{#2}{\edef\textinput@tempa{#2}}{\edef\textinput@tempa{#3}}%
\IfBooleanTF{#1}{\edef\textinput@tempb{true}}{\def\textinput@tempb{false}}%
\TextField[charsize={10pt},multiline=false,height=\textinput@ht,width={\textinput@fieldwd},name={\textinput@tempa},bordercolor={1 1 1},readonly=\textinput@tempb]{#3}%
}
\makeatother
\begin{document}
\begin{Form}
\begin{frame}{Input}
\textinput{Merkki}
\textinput[qna]{Qn.~A}
\textinput[qnb]{Qn.~B}
\textinput[merkki2]{Merkki}
\end{frame}
\begin{frame}{Output}
\textinput{Merkki}
\textinput[qna]{Qn.~A}
\textinput[qnb]{Qn.~B}
\textinput[merkki2]{Merkki}
\end{frame}
\end{Form}
\end{document}
请注意,帧出现在同一个 中可能很重要Form
。但是,我从未尝试Form
在 中使用frame
,所以我不能确定这一点。(我只是\begin{document}\begin{Form} ... \end{Form}\end{document}
在 Beamer 演示文稿中一直这样做。)
以下是 Okular 的一张无用截图:
编辑
这是一个多个多行字段的情况,这显然是这里想要的。
\documentclass{beamer}
\usetheme{Berkeley}
\usepackage[utf8]{inputenc}
\usepackage{xparse,calc,xcoffins}
\makeatletter
\newlength\textinput@labelwd
\newlength\textinput@fieldwd
\newlength\textinput@ht
\setlength\textinput@labelwd{40mm}
\setlength\textinput@fieldwd{\textwidth-40mm}
\setlength\textinput@ht{15mm}
\NewCoffin\textinputcoffin
\def\LayoutTextField#1#2{%
\SetVerticalCoffin\textinputcoffin{\textinput@labelwd}{%
\strut #1: \dotfill{} %
}%
\TypesetCoffin\textinputcoffin[t,l](0pt,\textinput@ht)#2%
}
\NewDocumentCommand\textinput{ s o +m }{%
\IfValueTF{#2}{\edef\textinput@tempa{#2}}{\edef\textinput@tempa{#3}}%
\IfBooleanTF{#1}{\edef\textinput@tempb{true}}{\def\textinput@tempb{false}}%
\TextField[charsize={10pt},multiline=true,height=\textinput@ht,width={\textinput@fieldwd},name={\textinput@tempa},bordercolor={1 1 1},readonly=\textinput@tempb]{#3}%
}
\makeatother
\begin{document}
\begin{Form}
\begin{frame}{Input}
\textinput{Merkki}
\textinput[qna]{Qn.~A}
\textinput[qnb]{Qn.~B}
\textinput[merkki2]{Merkki}
\end{frame}
\begin{frame}{Output}
\textinput{Merkki}
\textinput[qna]{Qn.~A}
\textinput[qnb]{Qn.~B}
\textinput[merkki2]{Merkki}
\end{frame}
\end{Form}
\end{document}
Okular 的截图同样没有任何信息量:
请注意,Okular 确实显示了字段,但没有在屏幕截图中显示。