filecontents: выберите строки группы для отображения

filecontents: выберите строки группы для отображения

У меня есть файл, содержащий 1000 строк данных о продуктах. Я хочу выбрать только определенный тип продукта для печати в моем документе.

Минимальный код в main.tex:

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{product.tex}

%Type =1,2...10
No.,Type ,Name , Description
1, 1, A1,D1
….
30, 1, A1, D30
31, 2, A2, D31
131,2, A2, D131
132,3,A3,D132
….
249,4,A4,D249
1.000,10, A10,D1000

\end{filecontents*}

\begin{document}
%Need command can CHOOSE Type = 1 and/or 2, and/or 3, ...10
%i choose type = 1 & 3
\include{run.tex}
\end{document}

Типы продуктов варьируются от 1, 2, ..., 10. А также в run.tex:

%Display like:

Name[i] & Description[j]

main.pdfрезультат:

Тип = 1

А1 - Д1


А1 - Д30

Тип = 3

А3 - Д132


А3 - Д248

решение1

Использоватьdatatoolдля этого:

введите описание изображения здесь

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents*}{product.tex}
%Type =1,2...10
No,Type,Name,Description
1,1,A1,D1
2,1,A1,D2
3,1,A1,D3
30,1,A1,D30
31,2,A2,D31
131,2,A2,D131
132,3,A3,D132
133,3,A3,D133
134,3,A3,D134
249,4,A4,D249
1000,10,A10,D1000
\end{filecontents*}

\usepackage{datatool}

\DTLloaddb[autokeys=false]{products}{product.tex}

\newcommand{\printtype}[1]{%
  \par
  \section*{Type #1}
  \DTLforeach*
    [\DTLiseq{\Type}{#1}]% Condition
    {products}% Database
    {\No=No,\Type=Type,\Name=Name,\Description=Description}{%
    \noindent\Name \quad \Description\par
  }% 
}

\begin{document}

Here is some text.

\printtype{1}

Some breaking text here.

\printtype{3}

And then some final text.

\end{document}

Команда \printtype{<type>}использует \DTLforeachцикл по productsбазе данных и печатает только те элементы, где \Typeравно <type>. Вы можете отформатировать презентацию так, как вам хочется.

решение2

Этот ответ в значительной степени основан наэтот ответ. Главное здесь — отметить, что вам нужно сделать \pgfplotsinvokeforeachдля того, чтобы перебрать типы, которые вы хотите набрать, а не \foreach.

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{product.dat}
No.,Type,Name,Description
1, 1, A1,D1
2, 1, A1,D2
30, 1, A1, D30
31, 2, A2, D31
131,2, A2, D131
132,3,A3,D132
249,4,A4,D249
1.000,10, A10,D1000
\end{filecontents*}
\usepackage{amsmath,amssymb}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.16}
\begin{document}
\pgfplotstableread[col sep=comma]{product.dat}{\data}
\pgfplotsinvokeforeach{1,3}{
\subsection*{\boldmath$\text{Type}=#1$}
\pgfplotstabletypeset[string type,
row predicate/.code={%
  \pgfplotstablegetelem{##1}{Type}\of{\data}
  \ifnum\pgfplotsretval=#1\relax
  \else\pgfplotstableuserowfalse\fi}
]{\data}
}
\end{document}

введите описание изображения здесь

Связанный контент