我需要循环显示 CSV 文件中的名称列表,并针对每个新名称(行)创建一个使用背景“正面”的页面,并在右侧添加名称,比如距离左侧约 75%。
然后创建一个新页面,仅使用背景“背面”,因为我们将打印为双面纸。
这是我目前所得到的,除了从第 3 页开始,它似乎将前后背景合并到同一页上。
\documentclass[12pt, a5paper,landscape]{memoir} % Use memoir for vplace
\usepackage[utf8]{inputenc} % required for characters like: Î ç etc.
\usepackage{color}
\usepackage{wallpaper} % For background image frame
\usepackage{datatool} % For loading data from file (e.g. from csv)
% Load database 'names' from file 'namelist.csv'
\DTLloaddb[keys={OrderNumber,Date,First,Last,Email,Quantity,Ticket,Order,Total,Fees,Payment,Status,Country,DrupalOrg,Meal,OtherMeal,Job,Company}]{names}{namelist.csv}
\begin{document}
\color{white}
\pagestyle{empty}
% For each record (line) in database 'names'
\DTLforeach{names}
{\firstname=First, \lastname=Last}{
{
\TileWallPaper{\paperwidth}{\paperheight}{A5_Badge_Front_Without_Placeholder}
\begin{vplace}[1.4]
\raggedleft{\bfseries\MakeUppercase{\firstname}} {\bfseries\MakeUppercase{\lastname}}
\end{vplace}
\vspace{\fill}
\leavevmode\thispagestyle{empty}\newpage
\clearpage
}
{
\TileWallPaper{\paperwidth}{\paperheight}{A5_badge_back}
\vspace{\fill}
\leavevmode\thispagestyle{empty}\newpage
\clearpage
\newpage
\cleardoublepage
}
}
\end{document}
结果见:https://www.sharelatex.com/project/58a1eb8f4cd29cd31efc3897
从 CSV 读取数据很方便,添加背景(例如正面和输出)以前也很好,但我需要在中间添加新的第二页作为“背面”背景。我尝试添加\vspace{\fill}
并使用不同的\clearpage
vs变体\newpage
,但第三页(第五页等)的输出仍然很奇怪。
答案1
这是一个可以满足您需求的解决方案。更改如下:
\pagestyle{empty}
序言中\thispagestyle{empty}
的所有内容都会为您节省不少时间。正如您已经发现的,您必须使用
\ThisTileWallPaper
而不是\TileWallPaper
。将名称放入宽度为零的框中,居中。之后,您只需定位此中心,例如使用
\hspace*
,名称就会对称地延伸到两侧。\hspace*{12.1cm}\makebox[0pt]{First Name Second Name}
要垂直定位名称,请在
\vspace*{3cm}
上方添加。
。
\documentclass[12pt,a5paper,landscape]{memoir} % Use memoir for vplace
\usepackage[utf8]{inputenc} % required for characters like: Î ç etc.
\usepackage{color}
\usepackage{wallpaper} % For background image frame
\usepackage{datatool} % For loading data from file (e.g. from csv)
% Load database 'names' from file 'namelist.csv'
\DTLloaddb[keys={OrderNumber,Date,First,Last,Email,Quantity,Ticket,Order,Total,Fees,Payment,Status,Country,DrupalOrg,Meal,OtherMeal,Job,Company}]{names}{namelist.csv}
\pagestyle{empty}
\begin{document}
\color{white}
% For each record (line) in database 'names'
\DTLforeach{names}
{\firstname=First, \lastname=Last}%
{\ThisTileWallPaper{\paperwidth}{\paperheight}{A5_Badge_Front_Without_Placeholder}%
\vspace*{3cm}
\hspace*{12.1cm}\makebox[0pt]{%
\begin{tabular}{c}
\bfseries\MakeUppercase{\firstname} \MakeUppercase{\lastname}\\[3mm]
Some more stuff\\[3mm]
Even more of it
\end{tabular}%
}
\clearpage
\ThisTileWallPaper{\paperwidth}{\paperheight}{A5_badge_back}%
\mbox{}\clearpage
}
\end{document}
答案2
啊,好吧,我似乎已经发现我需要使用\ThisTileWallPaper
而不是\TileWallPaper
- 现在我只需要正确定位文本以使其“居中”在 75% 标记附近(从最左边为 0%... 50% 为默认中心... 等等)\raggedleft
并不能真正解决这个问题,但它帮助目前。
\documentclass[12pt, a5paper,landscape,twoside]{memoir} % Use memoir for vplace
\setlength{\pdfpagewidth}{\paperwidth}
\setlength{\pdfpageheight}{\paperheight}
\usepackage[utf8]{inputenc} % required for characters like: Î ç etc.
\usepackage{color}
\usepackage{wallpaper} % For background image frame
\usepackage{datatool} % For loading data from file (e.g. from csv)
% Load database 'names' from file 'namelist.csv'
\DTLloaddb[keys={OrderNumber,Date,First,Last,Email,Quantity,Ticket,Order,Total,Fees,Payment,Status,Country,DrupalOrg,Meal,OtherMeal,Job,Company}]{names}{namelist.csv}
\begin{document}
\color{white}
\pagestyle{empty}
% For each record (line) in database 'names'
\DTLforeach{names}{\firstname=First, \lastname=Last}{
{
\ThisTileWallPaper{\pdfpagewidth}{\pdfpageheight}{A5_Badge_Front_Without_Placeholder}
\begin{vplace}[1.4]
\raggedleft{\bfseries\MakeUppercase{\firstname}} {\bfseries\MakeUppercase{\lastname}}
\end{vplace}
\clearpage
}
{
\ThisTileWallPaper{\pdfpagewidth}{\pdfpageheight}{A5_badge_back}
\clearpage\mbox{}\clearpage
}
}
\end{document}