%20%2B%20%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F.png)
Я совсем новичок в тексе, но теперь мне предстоит:
- скомпилировать несколько PDF-файлов с одинаковым макетом(не столь важно, если они физически разделены на разные файлы или просто как страницы в одном файле)
- из 1 столбца данных табличной базы данных(на данный момент таблица Excel с тремя столбцами: английский + немецкий, содержащая определения, + изображение) (данные заполняются кем-то другим и меняются каждые несколько месяцев)
- исвязанный с изображением(того, что объяснено в тексте, поэтому обе колонки с одинаковой картинкой в третьей колонке)
Просматривая вопросы здесь, я нашел несколько решений, работающих с файлами .csv, photon и luatex (например:Импортируйте данные из электронной таблицы в LaTeX и создавайте несколько файлов PDF для каждой строки в LaTeX. ) - все это я никогда не слышал ;) но я готов учиться. И я буду проходить это по мере необходимости. Проблема в том, что я не знаю, с чего начать. И, кроме того, у меня есть ощущение, что картинка будет проблемой, так как картинки не включены в ячейки в Excel, поэтому они никак не будут прочитаны. Так что, вероятно, мне придется использовать совершенно другой инструмент для таблицы в первую очередь. И тогда в любом случае будет совершенно другой способ.
Итак, мои вопросы:
- какую программу следует использовать для создания таблицы (это сделает кто-то другой, поэтому для него это не должно быть слишком сложным или дорогим; если возможно, лучше использовать что-то простое и распространенное, например Excel)
- и, конечно, как начать переносить это в латекс - вам не нужно снова давать мне уже данный ответ, я готов прочитать уже существующие здесь вопросы и ответы, но их так много, и с моими ограниченными знаниями обо всем этом было бы здорово получить подсказку, какой из данных ответов попробовать.
- и изменить макет окончательного PDF-файла в файле .tex все еще возможно, но я полагаю, что это будет работать с любым решением.
Вот набросок того, как один из PDF-файлов может выглядеть в конечном итоге:
пример таблицы:
Надеюсь, я смог прояснить свои проблемы. Большое спасибо за помощь!
решение1
нашел решение с помощью пакета datatool. Пока не идеально, но, возможно, у вас есть идеи по улучшению?
У меня все фотографии в папке и я использую
ls /b *.jpeg >pix.csv
для создания .csv всех изображений. (работает на Mac)
Затем я загружаю его и столбец, который хочу использовать (ранее сохраненный как .csv), в свой .tex и объединяю их.
Наконец, я запускаю tikzpicture для каждой строки, чтобы сгенерировать отдельные карточки.
\documentclass{standalone}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage{datatool}
\DTLloaddb[
noheader,
keys={name}
]{pix}{pix.csv}
\DTLloaddb[
noheader,
keys={title}
]{text}{text.csv}
\begin{document}
\newcount\rowIdx
\dtlforcolumn{\secondC}{text}{title}%\dtlforcolumn{?cs?}{?db?}{?key?}{?body?}
{
% iterate through each entry in the `title' column of the text database
\advance\rowIdx by 1\relax
% get corresponding row of pix database
\dtlgetrow{pix}{\rowIdx}%
% append to current row (this new column is assigned the key `title')
\dtlappendentrytocurrentrow{title}{\secondC}%\dtlappendentrytocurrentrow{?key?}{?value?}
% update first database
\dtlrecombine
}
\DTLforeach*%\DTLforeach*[?condition?]{?db name?}{?assign list?}{?text?}
[\not\DTLiseq{\Name}{main.tex}]
{pix}{\Name=name,\Title=title}{
\newpage
\begin{tikzpicture}[remember picture,overlay]
\node[anchor=south,inner sep=0pt] (icon) at (7.4,-8.5){\includegraphics[height=5cm]{\Name}}; %inserting the picture according to name
\node[inner sep=0,text width=\paperwidth,align=flush center] (text) at (7.4,-9){\Title};
\end{tikzpicture}
}
\end{document}
есть несколько ошибок, в строке \end{tikzpicture} отсутствует \endgroup и }, а затем в конце говорится, что их слишком много }, но я не понимаю, почему? И если я пишу \endgroup в своем .tex, он говорит, что их слишком много. Так что это работает так, поскольку отсутствующие части добавляются автоматически, но мне всегда приходится нажимать Enter, чтобы принять изменения. Возможно, кто-то из вас может помочь здесь.
большое спасибо!
решение2
ответ выше отлично работает только для одного языка, но вот мое решение для двух языков (с субтитрами), как и в вопросе, и вариант уровня. Человек, создающий таблицу, должен написать в последнем столбце имя файла изображения вместо того, чтобы вставлять само изображение, и тогда все работает отлично.
\documentclass[english]{article}
\usepackage[paperwidth=11cm, paperheight=10.4cm]{geometry}
\usepackage{graphicx}
\usepackage{tikz}
\graphicspath{{../pix/}}
\usepackage{datatool}
\usepackage{etoolbox}
\newbool{GER}
%\booltrue{GER} % if german version activate
\newcommand{\Levelgew}{1} % say which level (if you say level 2 it will print level1+2)
\DTLsetseparator{;}
\DTLloaddb[keys={level,eng,engunderline,ger,gerunderline,name}]{cards}{_scrumflowcards.csv} %\DTLloadrawdb[?options?]{?db name?}{?filename?}
\begin{document}
\ifbool{GER}
{
\DTLforeach*%\DTLforeach*[?condition?]{?db name?}{?assign list?}{?text?}
[\not\DTLisgt{\Level}{\Levelgew}]
{cards}{\Level=level,\Title=ger,\Underline=gerunderline,\Name=name}
{
\clearpage%start a new page for each row
\thispagestyle{empty}%get rid of the pagenumbers
\begin{tikzpicture}[remember picture,overlay]
\node[yshift=-2.2cm,anchor=south] (icon) at (current page.center) {\includegraphics[height=6cm]{\Name}};
\node[yshift=-3.5cm,text width=8cm,align=flush center] (text) at (current page.center){\huge\bfseries\sffamily\Title\\[15pt]
\LARGE \Underline};
\end{tikzpicture}
}
}{
\DTLforeach*%\DTLforeach*[?condition?]{?db name?}{?assign list?}{?text?}
[\not\DTLisgt{\Level}{\Levelgew}]
{cards}{\Level=level,\Title=eng,\Underline=engunderline,\Name=name}
{
\clearpage%start a new page for each row
\thispagestyle{empty}%get rid of the pagenumbers
\begin{tikzpicture}[remember picture,overlay]
\node[yshift=-2.2cm,anchor=south] (icon) at (current page.center) {\includegraphics[height=6cm]{\Name}};
\node[yshift=-3.5cm,text width=8cm,align=flush center] (text) at (current page.center){\huge\bfseries\sffamily\Title\\[15pt]
\LARGE \Underline};
\end{tikzpicture}
}
}
\end{document}
в конце я использовал pgfpackage (\pgfpagesphysicalpageoptions и \pgfpageslogicalpageoptions), чтобы напечатать несколько карточек/страниц на одном листе бумаги формата А4.