![Как нарисовать несколько заполняемых PDF-форм внутри прямоугольника с помощью среды `tikzpicture`](https://rvso.com/image/391728/%D0%9A%D0%B0%D0%BA%20%D0%BD%D0%B0%D1%80%D0%B8%D1%81%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%B7%D0%B0%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D0%B5%D0%BC%D1%8B%D1%85%20PDF-%D1%84%D0%BE%D1%80%D0%BC%20%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8%20%D0%BF%D1%80%D1%8F%D0%BC%D0%BE%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%D0%B0%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20%D1%81%D1%80%D0%B5%D0%B4%D1%8B%20%60tikzpicture%60.png)
Я хотел бы нарисовать две разные картинки. Одна из них состоит из двух прямоугольников, один с текстом, а другой (под первым) с заполняемым текстом, как показано ниже:
Here is text of this length
это просто обычный текст, а заполняемый текст состоит из TextField
трехhyperref
пакет, разделенный знаком /
, как и дата DD/MM/YYYY
.
Другая картинка очень похожа, но единственное отличие в том, что заполняемый текст удален:
Однако мне не удаётся объединить два прямоугольника в один (так, чтобы нижний был по центру) с помощью tikzset
.
МВЭ:
\documentclass{article}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usetikzlibrary{shapes.multipart}
\tikzset{pics/fillable subject/.style n args={1}{code={\node[draw,text height=1.5ex,text width=5em,rounded corners] (#1) {\TextField[name=day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~/~\TextField[name=month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1 1}]~/~\TextField[name=year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1 1}]\\};}}}
\begin{document}
\begin{Form}
\begin{tikzpicture}
\pic at (0,0) {fillable subject={Geography}};
\end{tikzpicture}
\end{Form}
\end{document}
Требования
- Есть две картинки:
fillable subject
иnon-fillable subject
. fillable subject
должен иметь один аргумент: название предмета (математика, история и т. д.).non-fillable subject
не должен иметь аргументов.- Каждая картинка имеет определенный размер, он не меняется в зависимости от длины текста.
- В одной среде их очень много
tikzpicture
, поэтому код должен быть максимально простым, поскольку мы можем добавлять несколько картинок одну за другой. - Мы должны иметь возможность создать стрелку между двумя картинками, соединяющую верхние прямоугольники.
Примечание
Цвет фона команды TextField
не имеет значения.
Вот чего я хочу:
Спасибо!!
решение1
Это усовершенствованное предложение.
\documentclass{article}
\usepackage[showframe,margin=1in]{geometry}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{tikz}
%\usetikzlibrary{calc}
\tikzset{text field/.style={text height=1.5ex,align=center,rounded corners},
title field/.style={text height=2ex,text depth=0.3em,anchor=south,text
width=11em,align=center,font=\sffamily},
pics/fillable subject/.style={code={%
\node[text field] (-TF)
{\hspace*{-0.5em}\TextField[name=#1-day,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1
1}]~~/\hspace*{-0.15em}\TextField[name=#1-month,width=1em,charsize=7pt,maxlen=2,bordercolor={1 1
1}]~~/\hspace*{-0em}\TextField[name=#1-year,width=2em,charsize=7pt,maxlen=4,bordercolor={1 1
1}]{}~};
%\path let \p1=($(-TF.east)-(-TF.west)$) in \pgfextra{\typeout{\x1}};
\node[title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
pics/nonfillable subject/.style={code={%
\node[text field] (-TF)
{\hspace{1.55em}~/~\hspace{1.6em}~/~\hspace{1.55em}{}};
\node[title field] (-Title)
at ([yshift=0.4em]-TF.north) {#1};
%\path let \p1=($(-TF.east)-(-TF.west)$) in \pgfextra{\typeout{\x1}};
\draw[rounded corners] (-TF.south west) |- (-Title.south west)
|- (-Title.north east) -- (-Title.south east) -| (-TF.south east)
-- cycle;
\draw ([xshift=4pt]-Title.south west) -- ([xshift=-4pt]-Title.south east);
}},
}
\begin{document}
\begin{Form}
\begin{tikzpicture}
\path (0,0) pic (Geo) {fillable subject={Geography}}
(5,0) pic (Whatever) {nonfillable subject={Whatever}}
(10,0) pic[draw=red] (Math) {fillable subject={Math}};
\draw[-latex] (Geo-Title) -- (Whatever-Title);
\draw[-latex] (Whatever-Title) -- (Math-Title);
\end{tikzpicture}
\end{Form}
\end{document}
Я также загрузил пакет геометрии, чтобы увеличить ширину страницы, showframe
только чтобы показать, что фигура помещается.