LINUX.ORG.RU

Где в LaTeX for?

 ,


1

2

Всем привет. Взялся я тут сделать в LaTeX листки с заданиями студентам: одна фамилия, один набор значений в задачке — один лист в pdf-ке на выходе. Но как сделать цикл по этим наборам? Под руку попался только \foreach из TikZ, хотя странно его подключать при том, что ничего не собираешься рисовать.

\documentclass[a4paper, 12pt, oneside]{scrartcl}

\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian,english]{babel}

\usepackage{soulutf8}

\usepackage{pgfplots}
\pgfplotsset{compat=1.5}

\newcommand{\ulfill}[1]{\ul{\mbox{~~~#1~~~}}}
\newcommand{\groupnumber}{1111}

\begin{document}
	\pagestyle{empty}
	
	\foreach \studentname / \mat / \dp / \ap / \A in {
		{Иванов И. И.} / {зачернённая алюминиевая} / {10} / {1} / {1},
		{Петров Е. Е.} / {зачернённая медная} / {10} / {1} / {1}
		} {
		\begin{center}
			
			\vspace{3ex}
			ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ ПО ПРАКТИЧЕСКИМ ЗАНЯТИЯМ №\ulfill{3} 
			
			\vspace{3ex}
			\textbf{МОДЕЛИРОВАНИЕ ПЕРЕХОДНЫХ ПРОЦЕССОВ В ПРИЁМНИКАХ ИЗЛУЧЕНИЯ}
		\end{center}
		
		Исходные данные:
		\begin{enumerate}
			\item Приёмная площадка: \ulfill{\mat} фольга толщиной \ulfill{\dp} мкм, площадью 
				\(A_p =\) \ulfill{\ap} \(\text{см}^2\), с неселективным коэффициентом поглощения 
				\(A =\) \ulfill{\A}.
		\end{enumerate}
		

		Студент гр. \ulfill{\groupnumber} \ulfill{\studentname}

		\clearpage
		}
\end{document}

Да и то — этот код начинает сыпать невразумительными ошибками типа Undefined control sequence.} на предпоследней строчке, если я оставляю три и больше параметра в наборе. Если закомментировать все, кроме \studentname и \mat, а также \clearpage, то собирается с грехом пополам.

P.S. Запоздало врубился, что везде на автомате ставил \usepackage{pgfplots} вместо \usepackage{tikz} напрямую, но второе зависит от первого, так что разница, вроде, невелика.

★★★

Последнее исправление: al_exquemelin (всего исправлений: 1)

Я вместо tikz просто подключил pgffor как в статье выше, убрал использование \text подключив пакет mathtext и всё собирается нормально если не использовать ни \clearpage ни \newpage.

ados ★★★★★
()
Ответ на: комментарий от ados

2-я ссылка в запросе к гуглу

Раз вторая, то я точно туда заглядывал. Вот только вот это:

It can be used independently of PGF, but it works particularly well together with PGF and TikZ.

меня озадачило: а что, до появления TikZ никто не запарился с пакетной обработкой всякого?

ados

если не использовать ни \clearpage ни \newpage

А чем начинать новую страницу? \text пробрался в код, пока я пытался отловить причину сбоя, в предыдущих двух заданиях всё нормально подставлялось.

Evgueni, спасибо, посмотрю вечером.

al_exquemelin ★★★
() автор топика
Ответ на: комментарий от al_exquemelin

А чем начинать новую страницу?

Я думаю у pgffor какие-то проблемы с новой страницей. Не знаю как такое решить.

ados ★★★★★
()

В общем. После долгой камасутры вчера вечером я нашёл практически то что нужно — csvsimple называется. Чтение csv, перенос содержимого в таблицы, циклы и так далее. В мануале есть даже очень близкий пример, сборка писем по шаблону для списка адресатов. Только с кириллицей у меня не сработало, пришлось поля заключать в {}, не то всё содержимое файла собиралось в одну длинную строчку. Вот это типа 3.csv:

name,givenname,initials,material,dp,ap,a,cooling,flux
{Иванов},{Иван},{И. А.},{зачернённая алюминиевая},{10},{1},{1},{\(G_t = G_\text{и}\)},{0,123}
{Петров},{Пётр},{П. Б.},{зачернённая медная},{10},{1},{1},{\(G_t = G_\text{и}\)},{0,123}

А вот это типа код 3.tex (лишнее выброшено):

\documentclass[a4paper, 12pt, oneside]{scrartcl}

\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian,english]{babel}

\usepackage{soulutf8}

\usepackage{csvsimple}

\usepackage{siunitx} %не удержался и притащил ради пары мест с единицами измерения
\sisetup{output-decimal-marker = {,},
	list-final-separator = {, },
	list-separator = {, },
	inter-unit-product = \cdot,
	range-phrase = \ensuremath{{} \ldots {}},
	range-units = single,
	list-units = single,
	exponent-product = \cdot}
\DeclareSIUnit\metre{\text{м}}
\DeclareSIUnit\watt{\text{Вт}}
\DeclareSIPrefix\centi{\text{с}}{-2}
\DeclareSIPrefix\milli{\text{м}}{-3}
\DeclareSIPrefix\micro{\text{мк}}{-6}

\newcommand{\ulfill}[1]{\ul{\mbox{~~~#1~~~}}}
\newcommand{\groupnumber}{1111}

\begin{document}
	\pagestyle{empty}
	\csvreader[head to column names]{3.csv}{}{%
		\begin{center}
			Университет
			
			Кафедра
			
			\vspace{3ex}
			Дисциплина
			
			\vspace{3ex}
			ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ ПО ПРАКТИЧЕСКИМ ЗАНЯТИЯМ №\ulfill{3} 
			
			\vspace{3ex}
			\textbf{МОДЕЛИРОВАНИЕ ПЕРЕХОДНЫХ ПРОЦЕССОВ В ПРИЁМНИКАХ ИЗЛУЧЕНИЯ}
		\end{center}
		
		Исходные данные:
		\begin{enumerate}
			\item Приёмная площадка: \ulfill{\material} фольга толщиной \ulfill{\dp} \si{\um}, 
				площадью \(A_p =\) \ulfill{\ap}\si{\cm^2}, с неселективным коэффициентом поглощения 
				\(A =\) \ulfill{\a}.
			\item Охлаждение приёмной площадки: \ulfill{\cooling}.
			\item Теплоёмкость приёмника \(C\) равна теплоёмкости приёмной площадки.
			\item Падающий поток излучения \(\Phi = \) \ulfill{\flux} \si{\milli\W}.
		\end{enumerate}
		
		Студент гр. \ulfill{\groupnumber} \ulfill{\name~\givenname}
		
		Преподаватель: \ulfill{\qquad \qquad \qquad \qquad \qquad \qquad} (Сидоров Н. Н.)
		
		\vspace{3ex}
		Студент: \ulfill{\qquad \qquad \qquad \qquad \qquad \qquad} (\name~\initials)
		
		\clearpage
	}
\end{document}

Так вот. Свой pdf на выходе я получил, хотя в логе были ошибки типа illegal unit и undefined control sequence с указанием в конец файла. И откуда-то появились цифры из csv и левые символы в углу каждого листа. Но хотя бы на каждом листе присутствует всё требуемое, так что на этом я временно умываю руки, спасибо за внимание.

al_exquemelin ★★★
() автор топика
Ответ на: комментарий от al_exquemelin

Вместо P.S.

А ещё \csvreader[head to column names]{file.csv}, оказывается, выдаст пустой pdf, если в file.csv будут необозначенные столбцы. И что гораздо хуже, ничего не занесёт в лог, будь он неладен.

al_exquemelin ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.