テーブルベースのデータベース(Excel など)の特別な列のデータと画像を含む PDF

テーブルベースのデータベース(Excel など)の特別な列のデータと画像を含む PDF

私は TEX の初心者ですが、今、次のことを行う必要があります。

  • 同じレイアウトで複数のPDFをコンパイルする(物理的に異なるファイルに分割されている場合や、1 つのファイル内のページとしてのみ分割されている場合はそれほど重要ではありません)
  • テーブルベースのデータベースの1列のデータから(現時点では、英語 + ドイツ語の列、定義、画像を含む Excel シート) (データは他の誰かによって入力され、数か月ごとに変更されます)
  • そして絵と関連した(テキストで説明されている内容なので、両方の列の3列目に同じ画像が表示されます)

ここでの質問を検索したところ、.csv ファイル、photon、luatex で動作するいくつかのソリューションが見つかりました (例:スプレッドシートからLaTeXにデータをインポートし、LaTeXの各行に複数のPDFファイルを作成します。 ) - どれも聞いたことのないものですが、学ぶつもりです。必要に応じて、それらに取り組みます。問題は、どこから始めればよいかわからないことです。さらに、Excel のセルに画像が含まれていないため、画像が問題になるのではないかという気がします。そのため、最初はテーブルにまったく別のツールを使用する必要があります。そうすれば、いずれにしてもまったく別の方法があるでしょう。

私の質問は次のとおりです:

  1. 表を生成するためにどのプログラムを使用すべきか(他の誰かがそれを行うので、彼らにとって複雑すぎたり高価すぎたりしてはいけません。可能であれば、Excel のような簡単で一般的なものがよいでしょう)
  2. そしてもちろん、それを LaTeX に取り込む方法も教えてください。すでに回答されているものを再度提供する必要はありません。ここにある既存の質問と回答を読むことはできますが、数が多すぎて、私の知識が限られているため、どの回答を試せばよいかのヒントが得られれば幸いです。
  3. .tex ファイル内の最終 PDF のレイアウトを変更することはまだ可能であるはずですが、それはどのソリューションでも機能すると思います。

以下は、PDF の 1 つが最終的にどのようになるかを示したスケッチです。カード1 例の表:エクセルシート

私の問題を明確にできたことを願っています。ご協力ありがとうございました!

答え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 が欠落していて、} があり、最後に } が多すぎると表示されますが、その理由がわかりません。また、.tex に \endgroup を記述すると、多すぎると表示されます。つまり、欠落している部分が自動的に追加されるため、このように動作しますが、変更を受け入れるには常に Enter キーを押さなければなりません。おそらく、皆さんの誰かがここで助けてくれるでしょう。

どうもありがとう!

答え2

上記の回答は 1 つの言語に対してのみ有効ですが、ここでは質問で尋ねられたように、レベル オプション付きの 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) を使用して、複数のカード/ページを 1 枚の A4 用紙/シートに印刷しました。

関連情報