Мне нужно создать настольные листы (этикетки). Для этого есть данные в таблице Excel. Названия столбцов - RollNo, Subject, Venue of Exam (экзаменационный центр).
В настоящее время мы создаем настольные листы с использованием CSVtools
. Этикетка выглядит так -
NAME OF EXAMINATION
Subject : xyz
Roll No. : 000000
Для этого нам нужно создать несколько листов данных csv - место проведения экзамена и предмет. Есть ли способ, чтобы без создания нескольких листов данных csv мы могли создать метки места проведения экзамена и предмета?
МВЭ:
\documentclass[a4paper,12pt]{article}
\usepackage{csvtools}
\usepackage[left=.5cm,right=.5cm,top=.5cm,bottom=.5cm]{geometry}
\usepackage{multicol}
\usepackage{xcolor}
\usepackage{filecontents}
\begin{filecontents*}{data.csv}
RollNo,Subject,Venue
022701,Sociology,Deptt. of Physics
022702,Sociology,Deptt. of Physics
022704,Sociology,Deptt. of Physics
022705,Sociology,Deptt. of Physics
022706,Sociology,Deptt. of Physics
022707,Sociology,Deptt. of Physics
022708,Sociology,Deptt. of Physics
022709,Sociology,Deptt. of Physics
022709,Sociology,Deptt. of Physics
022710,Sociology,Deptt. of Physics
023001,Psychology,Deptt. of Physics
023002,Psychology,Deptt. of Physics
023004,Psychology,Deptt. of Physics
023005,Psychology,Deptt. of Physics
023006,Psychology,Deptt. of Physics
023007,Psychology,Deptt. of Physics
023008,Psychology,Deptt. of Physics
023009,Psychology,Deptt. of Physics
023010,Psychology,Deptt. of Physics
\end{filecontents*}
\begin{document}
\applyCSVfile{data.csv}{% here put the name of the file
%\begin{multicols}{2}
\noindent\fbox{\parbox{6.3cm}{%
{\color{white}.}\\[7pt]
\centering{\LARGE UGC NET - 2014}\\[2pt]
\raggedright
{\Large Subject : \insertSubject}\\[5pt]
{\Large Roll No. : \textbf{0\insertRollNo}}\\[12pt]
}} % This is for parbox
%\end{multicols}
}% This is for CSV file
\end{document}
решение1
Вот код, который должен послужить отправной точкой. Он использует datatool
package. Я добавил столбец с коротким ключом для center
в дополнение к вашим столбцам.
center,RollNo,Subject,Venue
Bangalore,022701,Sociology,Deptt. of Physics
Bangalore,022702,Sociology,Deptt. of Physics
Bangalore,022704,Sociology,Deptt. of Physics
Bangalore,022705,Sociology,Deptt. of Physics
В четвертом столбце вы можете указать полный центр, если хотите.
\documentclass[a4paper,12pt]{article}
\usepackage[left=.5cm,right=.5cm,top=.5cm,bottom=.5cm]{geometry}
\usepackage{xcolor}
\usepackage{filecontents}
\begin{filecontents*}{data.csv}
center,RollNo,Subject,Venue
Bangalore,022701,Sociology,Deptt. of Physics
Bangalore,022702,Sociology,Deptt. of Physics
Bangalore,022704,Sociology,Deptt. of Physics
Bangalore,022705,Sociology,Deptt. of Physics
Bangalore,022706,Sociology,Deptt. of Physics
Bangalore,022707,Sociology,Deptt. of Physics
Bangalore,022708,Sociology,Deptt. of Physics
Bangalore,022709,Sociology,Deptt. of Physics
Bangalore,022709,Sociology,Deptt. of Physics
Bangalore,022710,Sociology,Deptt. of Physics
Mangalore,023001,Psychology,Deptt. of Physics
Mangalore,023002,Psychology,Deptt. of Physics
Mangalore,023004,Psychology,Deptt. of Physics
Mangalore,023005,Psychology,Deptt. of Physics
Mangalore,023006,Psychology,Deptt. of Physics
Mangalore,023007,Psychology,Deptt. of Physics
Mangalore,023008,Psychology,Deptt. of Physics
Mangalore,023009,Psychology,Deptt. of Physics
Mangalore,023010,Psychology,Deptt. of Physics
\end{filecontents*}
\usepackage{datatool}
\DTLloaddb{data}{data.csv}
\begin{document}
This is for Bangalore center
\DTLforeach*[\DTLisopenbetween{\center}{B}{C}]{data}{%
\center=center,\roll=RollNo,\sub=Subject, \venue=Venue}{%
\noindent\fbox{\parbox{6.3cm}{%
{\color{white}.}\\[7pt]
\centering{\LARGE UGC NET - 2014}\\[2pt]
\raggedright
{\Large Subject : \sub}\\[5pt]
{\Large Roll No. : \textbf{\roll}}\\[12pt]
}}\hfill % This is for parbox
}%
\clearpage
This is for Mangalore
\DTLforeach*[\DTLisopenbetween{\center}{M}{N}]{data}{%
\center=center,\roll=RollNo,\sub=Subject, \venue=Venue}{%
\noindent\fbox{\parbox{6.3cm}{%
{\color{white}.}\\[7pt]
\centering{\LARGE UGC NET - 2014}\\[2pt]
\raggedright
{\Large Subject : \sub}\\[5pt]
{\Large Roll No. : \textbf{\roll}}\\[12pt]
}}\hfill % This is for parbox
}%
\clearpage
This is for Sociology
\DTLforeach*[\DTLisopenbetween{\sub}{S}{T}]{data}{%
\center=center,\roll=RollNo,\sub=Subject, \venue=Venue}{%
\noindent\fbox{\parbox{6.3cm}{%
{\color{white}.}\\[7pt]
\centering{\LARGE UGC NET - 2014}\\[2pt]
\raggedright
{\Large Subject : \sub}\\[5pt]
{\Large Roll No. : \textbf{\roll}}\\[12pt]
}}\hfill % This is for parbox
}%
\clearpage
This is for Psychology
\DTLforeach*[\DTLisopenbetween{\sub}{P}{Q}]{data}{%
\center=center,\roll=RollNo,\sub=Subject, \venue=Venue}{%
\noindent\fbox{\parbox{6.3cm}{%
{\color{white}.}\\[7pt]
\centering{\LARGE UGC NET - 2014}\\[2pt]
\raggedright
{\Large Subject : \sub}\\[5pt]
{\Large Roll No. : \textbf{\roll}}\\[12pt]
}}\hfill % This is for parbox
}%
\end{document}
Обратите внимание, что для больших файлов csv это может компилироваться медленно. Это можно исправить в некоторой степени с помощью pgfplotstable
. Здесь большой одиночный файл данных может быть отфильтрован для определенного центра или субъекта, и отдельные файлы csv могут быть созданы на лету. После того, как они будут созданы, вы можете создать метки, используя ваш csvtools
пакетный способ или с помощью datatool
. Вот пример кода, который использует то же самое, data.csv
что и в предыдущем коде.
\documentclass[a4paper,12pt]{article}
\usepackage[left=.5cm,right=.5cm,top=.5cm,bottom=.5cm]{geometry}
\usepackage{xcolor}
\usepackage{pgfplotstable,xstring}
\pgfplotsset{compat=1.11}
\usepackage{datatool}
\pgfplotstableread[col sep=comma]{data.csv}\data
\begin{document}
%%----------------------------------------------------------subjectwise
%% following will filter all Psychology rows and save it as Psychology.csv
\pgfplotstablesave[col sep=comma,
row predicate/.code={%
\pgfplotstablegetelem{#1}{Subject}\of\data%
\IfStrEq{\pgfplotsretval}{Psychology}{%True %% >>imp<< Psychology is case sensitive, psychology won't work
\relax}%
{\pgfplotstableuserowfalse}%False
}%
]
{\data}
{Psychology.csv}
%%----------------------------------------------------------
%% from here use datatool
\DTLloaddb{Psychology}{Psychology.csv}
\DTLforeach{Psychology}{%
\center=center,\roll=RollNo,\sub=Subject, \venue=Venue}{%
\noindent\fbox{\parbox{6.3cm}{%
{\color{white}.}\\[7pt]
\centering{\LARGE UGC NET - 2014}\\[2pt]
\raggedright
{\Large Subject : \sub}\\[5pt]
{\Large Roll No. : \textbf{\roll}}\\[12pt]
}}\hfill % This is for parbox
}%
\clearpage
%%---------------------------------------------------------- centerwise
%% following will filter all Bangalore rows and save it as bangalore.csv
\pgfplotstablesave[col sep=comma,
row predicate/.code={%
\pgfplotstablegetelem{#1}{center}\of\data%
\IfStrEq{\pgfplotsretval}{Bangalore}{%True %% >>imp<< Bangalore is case sensitive
\relax}%
{\pgfplotstableuserowfalse}%False
}%
]
{\data}
{bangalore.csv}
%%----------------------------------------------------------
%% from here use datatool/csvtools
\DTLloaddb{bangalore}{bangalore.csv}
\DTLforeach{bangalore}{%
\center=center,\roll=RollNo,\sub=Subject, \venue=Venue}{%
\noindent\fbox{\parbox{6.3cm}{%
{\color{white}.}\\[7pt]
\centering{\LARGE UGC NET - 2014}\\[2pt]
\raggedright
{\Large Subject : \sub}\\[5pt]
{\Large Roll No. : \textbf{\roll}}\\[12pt]
}}\hfill % This is for parbox
}%
\end{document}