summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/csvtools/csvtools.html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/csvtools/csvtools.html')
-rw-r--r--Master/texmf-dist/doc/latex/csvtools/csvtools.html806
1 files changed, 0 insertions, 806 deletions
diff --git a/Master/texmf-dist/doc/latex/csvtools/csvtools.html b/Master/texmf-dist/doc/latex/csvtools/csvtools.html
deleted file mode 100644
index 3e0937c4d80..00000000000
--- a/Master/texmf-dist/doc/latex/csvtools/csvtools.html
+++ /dev/null
@@ -1,806 +0,0 @@
-<html>
-<title>csvtools.sty v 1.1</title>
-<body>
-<a href=http://theoval.cmp.uea.ac.uk/~nlct>Dr Nicola Talbot</a> |
-<a href=http://www.cmp.uea.ac.uk/>School of Computing Sciences</a> |
-<a href=http://www.uea.ac.uk/>University of East Anglia</a>
-
-<h1>csvtools.sty v1.1 : A LaTeX2e Package Providing Access to Data Saved in a CSV File</h1>
-
-<hr>
-<h2>Contents</h2>
-<ul>
-<li><a href=#intro>Introduction</a>
-<li><a href=#mailmerge>Mail Merging and Similar Applications</a>
-<li><a href=#csv2tab>Converting CSV file into a tabular environment</a>
-<li><a href=#longtable>Converting CSV file into a longtable environment</a>
-<li><a href=#counters>Associated Counters</a>
-<li><a href=#crossref>Cross-Referencing</a>
-<li><a href=#save>Saving Entries</a>
-<li><a href=#perl>The csvtools.pl Perl Script</a>
-<li><a href=#drawbacks>Bugs/Drawbacks/``Features''</a>
-</ul>
-
-<h2>Examples</h2>
-<ul>
-<li><a href=#ex:mail>Example 1 (Mail Merging)</a>
-<li><a href=#ex:ps>Example 2 (Multiple Figures)</a>
-<li><a href=#ex:field>Example 3 (Mail Merging using <tt>\field</tt>)</a>
-<li><a href=#ex:tab1>Example 4 (Aligning Data from a CSV file)</a>
-<li><a href=#ex:tab2>Example 5 (Adding Lines)</a>
-<li><a href=#ex:tab3>Example 6 (Added Complexity)</a>
-<li><a href=#ex:longtab>Example 7 (Using a longtable environment)</a>
-<li><a href=#ex:stripy>Example 8 (Stripy Table)</a>
-<li><a href=#ex:mail2>Example 9 (More Mail Merging)</a>
-<li><a href=#ex:ref1>Example 10 (Labelling within <tt>\applyCSVfile</tt>)</a>
-<li><a href=#ex:ref2>Example 11 (Labelling within <tt>\applyCSVfile</tt>)</a>
-<li><a href=#ex:timetogrowth>Example 12 (Labelling within <tt>\CSVtotabular</tt>)</a>
-<li><a href=#ex:t2g2>Example 13 (Labelling within <tt>\CSVtotabular</tt>)</a>
-<li><a href=#ex:index>Example 14 (Saving Entries)</a>
-<li><a href=#ex:perl>Example 15 (csvtools.pl - Aligning Data)</a>
-</ul>
-<hr>
-
-<h2><a name=intro>Introduction</a></h2>
- The <tt>csvtools</tt> package allows you to repeatedly perform
- a set of LaTeX commands on data in each row
- of a comma separated variable (CSV) file.
- This can be used for mail merging, generating
- tables etc.
-
-<h2><a name=mailmerge>Mail Merging and Similar Applications</a></h2>
-
-<tt>\applyCSVfile[</tt><em>n</em><tt>]{</tt><em>filename</em><tt>}{</tt><em>text</em><tt>}</tt>
-<p>
- Letters can be generated using data given in
- each line from <em>filename</em>.
- If the CSV file contains a header row, the
- unstarred version of <tt>\applyCSVfile</tt> should
- be used, otherwise the starred version <tt>\applyCSVfile*</tt>
- should be used. The optional argument <em>n</em>
- specifies on which line the actual data (not header line)
- starts. The unstarred version defaults to line 2
- (the header row is always assumed to be on line 1)
- and the starred version defaults to 1.
-<p>
-With the unstarred version, the entries in the header row
- are used to generate commands of the form
- <tt>\insert</tt><em>identifier</em> (See <a href=#itm:insert>Note 1</a>)
- to access corresponding elements
- in the row currently being processed. For example,
- suppose the first line of the CSV file looks like:
-<pre>
-Name,Address,Time,Date
-</pre>
- then the commands <tt>\insertName</tt>, <tt>\insertAddress</tt>,
- <tt>\insertTime</tt> and <tt>\insertDate</tt> are
- created, allowing you to use the entries in the first,
- second, third and fourth columns of the current row.
- If the header text contains non-alphabetical characters,
- e.g. <tt>Full Name</tt>, then you will need to use
- <tt>\insertbyname{</tt><em>text</em><tt>}</tt>,
- e.g. <tt>\insertbyname{Full Name}</tt>.
-
-<h3><a name=ex:mail>Example 1 (Mail Merging)</a></h3>
- Suppose there is a file called <tt>details.csv</tt> that has the
- following contents:
-<pre>
-Name,Address,Time,Date
-Miss A. Person,1 The Road\\The Town\\AB1 2XY,15.00,4th May 2004
-Mr A. N. Other,2 The Road\\The Town\\AB1 2XY,15.30,11th May 2004
-</pre>
- then the following code can be used to generate a letter for each person
- in the CSV file:
-<pre>
-\applyCSVfile{details.csv}{%
-\begin{letter}{\insertName\\\insertAddress}
-\opening{Dear \insertName}
-
-You are invited to an interview at \insertTime\ on the \insertDate.
-
-\closing{Yours Sincerely}
-\end{letter}}
-</pre>
- Note that you could also use <tt>\insertbyname{Name}</tt> etc instead
- of <tt>\insertName</tt> etc. Also note that you need to specify the
- file extension when specifying the filename.
-
-<h3><a name=ex:ps>Example 2 (Multiple Figures)</a></h3>
-
-Suppose <tt>details.csv</tt> looks like:
-<pre>
-File,Caption
-circle.ps,A Circle
-rectangle.ps,A Rectangle
-triangle.ps,A Triangle
-</pre>
-
- Assuming that the files <tt>circle.ps</tt>, <tt>rectangle.ps</tt>
- and <tt>triangle.ps</tt> exist, then the following code will
- generate a figure for each graphics file (the
- <tt>graphicx</tt> package will be needed):
-<pre>
-\applyCSVfile{sample3.csv}{
-\begin{figure}
-\centerline{\includegraphics{\insertFile}}
-\caption{\insertCaption}
-\end{figure}}
-</pre>
- Note that in this example, you can't use <tt>\insertbyname{File}</tt>.
- (See <a href=#itm:psbyname>Note 3</a>)
-<p>
-<tt>\applyCSVfile*[</tt><em>n</em><tt>]{</tt><em>filename</em><tt>}{</tt><em>text</em><tt>}</tt>
-<p>
-In this case the CSV file has no header row, so
- there are no <tt>\insert</tt><em>identifier</em> or <tt>\insertbyname{</tt><em>label</em><tt>}</tt> commands available,
- instead, the command <tt>\field{</tt><em>col</em><tt>}</tt> should be used,
- where <em>col</em> is the column number.
-
-<h3><a name=ex:field>Example 3 (Mail Merging using <tt>\field</tt>)</a></h3>
-
- Suppose there is a file called <tt>details.csv</tt> that has the
- following contents:
-<pre>
-Miss A. Person,1 The Road\\The Town\\AB1 2XY,15.00,4th May 2004
-Mr A. N. Other,2 The Road\\The Town\\AB1 2XY,15.30,11th May 2004
-</pre>
- then the following code can be used to generate a letter for each person
- in the CSV file:
-<pre>
-\applyCSVfile*{details.csv}{%
-\begin{letter}{\field{1}\\\field{2}}
-\opening{Dear \field{1}}
-
-You are invited to an interview at \field{3}\ on the \field{4}.
-
-\closing{Yours Sincerely}
-\end{letter}}
-</pre>
-
-<h2><a name=csv2tab>Converting CSV file into a tabular environment</a></h2>
-
-<tt>\CSVtotabular{</tt><em>filename</em><tt>}{</tt><em>col-align</em><tt>}{</tt><em>first</em><tt>}{</tt><em>middle</em><tt>}{</tt><em>last</em><tt>}</tt>
-<p>
-<em>filename</em> is the name of the CSV file which must have a header row on line 1,
- <em>col-align</em> is the column alignment argument that gets passed
- to the <tt>tabular</tt> environment, <em>first</em>
- is the code for the first line, <em>middle</em> is the code
- for the middle lines and <em>last</em> is the code for the last line.
- This is best demonstrated with an example.
-
-<h3><a name=ex:tab1>Example 4 (Aligning Data from a CSV file)</a></h3>
-
-Suppose the file <tt>sample.csv</tt> looks like:
-<pre>
-Name,Assignment 1,Assignment 2,Total
-A. Smith,80,70,150
-B. Jones,60,80,140
-J. Doe,85,75,160
-,75,75,150
-</pre>
- then the following code can be used to align the data:
-<pre>
-\CSVtotabular{sample.csv}{lccc}{%
-\bfseries Name &
-\bfseries Assignment 1&
-\bfseries Assignment 2&
-\bfseries Total\\}{%
-\insertName &
-\insertbyname{Assignment 1} &
-\insertbyname{Assignment 2} &
-\insertTotal\\}{%
- &
-\insertbyname{Assignment 1} &
-\insertbyname{Assignment 2} &
-\insertTotal}
-</pre>
- The result of this code is shown in
- <a href=#tab:ex1>Table 1</a>. (Note that <tt>\CSVtotabular</tt> only
- puts the data in a <tt>tabular</tt> environment not in a table).
-<p>
-<table>
-<a name=tab:ex1><caption align=top>Table 1 : Example 4</caption></a>
-<tr><th>Name</th>
-<th>Assignment 1</th>
-<th>Assignment 2</th>
-<th>Total</th></tr>
-<tr><td>A. Smith</td><td>80</td><td>70</td><td>150</td></tr>
-<tr><td>B. Jones</td><td>60</td><td>80</td><td>140</td><tr>
-<tr><td>J. Doe</td><td>85</td><td>75</td><td>160</td></tr>
-<tr><td> </td><td>75</td><td>75</td><td>150</td></tr>
-</table>
-<p>
-<tt>\ifnextrowlast{</tt><em>last-code</em><tt>}{</tt><em>not-last-code</em><tt>}</tt>
-<p>
- The command <tt>\ifnextrowlast</tt> can be used to vary what happens
- on the last but one row. The following example illustrates
- this by placing <tt>\hline\hline</tt> after the penultimate row.
-
-<h3><a name=ex:tab2>Example 5 (Adding Lines)</a></h3>
-<pre>
-\CSVtotabular{sample.csv}{|l|ccc|}{%
-\hline\bfseries Name &
-\bfseries Assignment 1&
-\bfseries Assignment 2&
-\bfseries Total\\\hline\hline}{%
-\insertName &
-\insertbyname{Assignment 1} &
-\insertbyname{Assignment 2} &
-\insertTotal
-\ifnextrowlast{\\\hline\hline}{\\}}{%
- &
-\insertbyname{Assignment 1} &
-\insertbyname{Assignment 2} &
-\insertTotal\\\hline}
-</pre>
-
-<h3><a name=ex:tab3>Example 6 (Added Complexity)</a></h3>
-
- In this example, <tt>\multicolumn</tt> is used to override
- the column specifier for the first column in the
- last row.
-<pre>
-\CSVtotabular{sample2.csv}{|l|ccc|}{%
-\hline\bfseries Name &
-\bfseries Assignment 1 &
-\bfseries Assignment 2 &
-\bfseries Total\\\hline\hline
-}{%
-\insertName &
-\insertbyname{Assignment 1} &
-\insertbyname{Assignment 2} &
-\insertTotal
-\ifnextrowlast{\\\hline\multicolumn{1}{l|}{}}{\\}
-}{%
- &
-\insertbyname{Assignment 1} &
-\insertbyname{Assignment 2} &
-\insertTotal\\\cline{2-4}
-}
-</pre>
- Notice that instead of placing <tt>\multicolumn{1}{l|}{}</tt>
- at the start of the final argument, it is instead
- placed in the first argument to <tt>\ifnextrowlast</tt> (See
- <a href=#itm:noalign>Note 4</a>).
-
-<h2><a name=longtable>Converting CSV file into longtable environment</a></h2>
-
-<tt>\CSVtolongtable{</tt><em>filename</em><tt>}{</tt><em>col-align</em><tt>}{</tt><em>first</em><tt>}{</tt><em>middle</em><tt>}{</tt><em>last</em><tt>}</tt>
-<p>
-The command <tt>\CSVtolongtable</tt> works in the same way as <tt>\CSVtotabular</tt> but
- creates a <tt>longtable</tt> environment instead of a <tt>tabular</tt> environment.
-
-<h3><a name=ex:longtab>Example 7 (Using a longtable environment)</a></h3>
-<p>
-Suppose the CSV file in the previous example, contains, say, 100 entries.
-This will no longer fit onto one page, so it would be better to use
-<tt>\CSVtolongtable</tt> instead. For example:
-<pre>
-\CSVtolongtable{sample.csv}{|l|ccc|}{%
-\caption{Student Marks}\label{tab:students}\\
-\hline
-\bfseries Name &
-\bfseries Assignment 1 &
-\bfseries Assignment 2 &
-\bfseries Total\\\hline
-\endfirsthead
-\caption[]{Student Marks}\\
-\hline
-\bfseries Name &
-\bfseries Assignment 1 &
-\bfseries Assignment 2 &
-\bfseries Total\\\hline
-\endhead
-\hline
-\multicolumn{3}{r}{\em Continued on next page}
-\endfoot
-\hline
-\endlastfoot}{%
-\insertName &
-\insertbyname{Assignment 1} &
-\insertbyname{Assignment 2} &
-\insertTotal
-\ifnextrowlast{\\\hline\hline}{\\}}{%
- & \insertbyname{Assignment 1} &
- \insertbyname{Assignment 2} &
-\insertTotal\\}
-</pre>
-
-<h2><a name=counters>Associated Counters</a></h2>
-
- Within the <tt>\CSVtotabular</tt>, <tt>\CSVtolongtable</tt> and <tt>\applyCSVfile</tt> commands, there are two
- counters, <tt>csvlinenum</tt> and <tt>csvrownumber</tt>.
- The former, <tt>csvlinenum</tt>, is the current line number in the CSV
- file, whereas the latter, <tt>csvrownumber</tt>, is the current
- data row. Of the two counters, <tt>csvrownumber</tt> is likely to be
- the most useful.
-
-<h3><a name=ex:stripy>Example 8 (Stripy Table)</a></h3>
-
- The package <tt>colortbl</tt> defines the command <tt>\rowcolor</tt>
- which enables you to specify the row colour. Suppose
- you want a stripy table this can be achieved as follows (this is designed as an example
- of how to use the package, not incouragement to produce garish tables):
-
-<pre>
-\CSVtotabular{sample2.csv}{lccc}{%
-\rowcolor{green}\bfseries Name &
-\bfseries Assignment 1 &
-\bfseries Assignment 2 &
-\bfseries Total\\\rowcolor{blue}
-}{%
-\insertName &
-\insertbyname{Assignment 1} &
-\insertbyname{Assignment 2} &
-\insertTotal
-\ifthenelse{\isodd{\value{csvrownumber}}}{%
-\\\rowcolor{blue}}{\\\rowcolor{green}}
-}{%
- &
-\insertbyname{Assignment 1} &
-\insertbyname{Assignment 2} &
-\insertTotal
-}
-</pre>
-
-<h3><a name=ex:mail2>Example 9 (More Mail Merging)</a></h3>
-
- This is an example of mail merging where the letter reference
- is generated from <tt>csvrownumber</tt>. The CSV file is
- as used in the <a href=#ex:mail>earlier example</a>.
-<pre>
-\applyCSVfile{details.csv}{%
-\begin{letter}{\insertName\\\insertAddress}
-\opening{Dear \insertName}
-
-\textbf{Ref : } interview.\thecsvrownumber
-
-You are invited to an interview at \insertTime\ on the \insertDate.
-
-\closing{Yours Sincerely}
-\end{letter}}
-</pre>
-
- <h2><a name=crossref>Cross-Referencing</a></h2>
-
- Labels can be generated using the standard
- <tt>\label</tt> command, but you will need some way
- to make each label unique. <a href=#ex:ref1>Example 10</a>
- does this by using <tt>\thecsvrownumber</tt>,
- whereas <a href=#ex:ref2>Example 11</a> uses <tt>\insert</tt><em>identifier</em>.
-
-<h3><a name=ex:ref1>Example 10 (Labelling within <tt>\applyCSVfile</tt>)</a></h3>
-
- <a href=#ex:ps>Example 2</a> can be modified to
- label each figure:
-<pre>
-\applyCSVfile{sample3.csv}{
-\begin{figure}
-\centerline{\includegraphics{\insertFile}}
-\caption{\insertCaption}
-\label{fig:pic\thecsvrownumber}
-\end{figure}}
-</pre>
- This example uses
- <tt>\label{fig:pic\thecsvrownumber}</tt>, so the first figure generated
- by this <tt>\applyCSVfile</tt> command will have the label <tt>fig:pic1</tt>,
- the second <tt>fig:pic2</tt> etc.
-
-<h3><a name=ex:ref2>Example 11 (Labelling within <tt>\applyCSVfile</tt>)</a></h3>
-
- Modifying the previous example, we now have:
-<pre>
-\applyCSVfile{sample3.csv}{
-\begin{figure}
-\centerline{\includegraphics{\insertFile}}
-\caption{\insertCaption}
-\label{fig:\insertFile}
-\end{figure}}
-</pre>
- The labels for each figure are now:
- <tt>fig:circle.ps</tt>, <tt>fig:rectangle.ps</tt>
- and <tt>fig:triangle.ps</tt>, respectively.
-
-<h3><a name=ex:timetogrowth>Example 12 (Labelling within <tt>\CSVtotabular</tt>)</a></h3>
-
- This example is slightly more complicated.
- The CSV file, <tt>data.csv</tt> looks like:
-<pre>
-Incubation Temperature,Incubation Time,Time to Growth
-40,120,40
-40,90,60
-35,180,20
-</pre>
-The following code generates a table using the data
- with an additional column that generates the experiment
- number. (See <a href=#itm:csvrownumber>Note 9</a>.)
-<pre>
-\begin{table}
-\caption{Time to Growth Experiments}
-\label{tab:exp}
-\vspace{10pt}
-\centering
-\CSVtotabular{data.csv}{cccc}{%
-% Header Row
-\bfseries Experiment &
-\bfseries \begin{tabular}{c}Incubation\\Temperature\end{tabular} &
-\bfseries \begin{tabular}{c}Incubation\\Time\end{tabular} &
-\bfseries \begin{tabular}{c}Time\\to\\Growth\end{tabular}\\}{%
-% Middle Rows
-\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
-\thecsvrownumber &
-\insertbyname{Incubation Temperature} &
-\insertbyname{Incubation Time} &
-\insertbyname{Time to Growth} \\}{%
-% Final Row
-\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
-\thecsvrownumber &
-\insertbyname{Incubation Temperature} &
-\insertbyname{Incubation Time} &
-\insertbyname{Time to Growth}}
-\par
-\end{table}
-
-It can be seen from Table~\ref{tab:exp}, that
-Experiment~\ref{exp:35:180} had the shortest time to growth.
-</pre>
-
- In this example, each experiment has the corresponding label
- <tt>exp:</tt><em>Incubation Temperature</em><tt>:</tt><em>Incubation Time</em>
- so the first experiment has label <tt>exp:40:120</tt>, the
- second experiment has the label <tt>exp:40:90</tt> and the
- third experiment has the label <tt>exp:35:180</tt>.
-
- <a href=#tab:t2g>Table 2</a> shows the resulting table for
- this example.
-<p>
-<table>
-<caption align=top><a name=tab:t2g>Time to Growth Experiments</a></caption>
-<tr><th align=center>Experiment </th>
-<th align=center>Incubation<br> Temperature </th>
-<th align=center>Incubation<br> Time </th>
-<th align=center>Time<br> to<br> Growth</th></tr>
-<tr><td align=center> 1 </td><td align=center> 40 </td><td align=center> 120 </td><td align=center> 40 </td></tr>
-<tr><td align=center> 2 </td><td align=center> 40 </td><td align=center> 90 </td><td align=center> 60 </td></tr>
-<tr><td align=center> 3 </td><td align=center> 35 </td><td align=center> 180 </td><td align=center> 20 </td></tr>
-</table>
-
-<p>
- The following example is more refined in that it
- takes advantage of the fact that the time to growth data consists
- of integers only, so the experiment with the maximum growth can be
- determined by LaTeX.
-
-<h3><a name=ex:t2g2>Example 13 (Labelling within <tt>\CSVtotabular</tt>)</a></h3>
-
-<pre>
-\newcounter{maxgrowth}
-\newcounter{incT} % incubation temperature
-\newcounter{inct} % incubation time
-
-\begin{table}
-\caption{Time to Growth Experiments}
-\label{tab:exp}
-\vspace{10pt}
-\centering
-\CSVtotabular{data.csv}{cccc}{%
-% Header row
-\bfseries Experiment &
-\bfseries \begin{tabular}{c}Incubation\\Temperature\end{tabular} &
-\bfseries \begin{tabular}{c}Incubation\\Time\end{tabular} &
-\bfseries \begin{tabular}{c}Time\\to\\Growth\end{tabular}\\}{%
-% Middle rows
-\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
-\thecsvrownumber &
-\insertbyname{Incubation Temperature} &
-\insertbyname{Incubation Time} &
-\insertbyname{Time to Growth}%
-\ifthenelse{\value{maxgrowth}<\insertbyname{Time to Growth}}{%
-\setcounter{maxgrowth}{\insertbyname{Time to Growth}}%
-\setcounter{incT}{\insertbyname{Incubation Temperature}}%
-\setcounter{inct}{\insertbyname{Incubation Time}}}{}%
-\\}{%
-% Last row
-\label{exp:\insertbyname{Incubation Temperature}:\insertbyname{Incubation Time}}
-\thecsvrownumber &
-\insertbyname{Incubation Temperature} &
-\insertbyname{Incubation Time} &
-\insertbyname{Time to Growth}%
-\ifthenelse{\value{maxgrowth}<\insertbyname{Time to Growth}}{%
-\setcounter{maxgrowth}{\insertbyname{Time to Growth}}%
-\setcounter{incT}{\insertbyname{Incubation Temperature}}%
-\setcounter{inct}{\insertbyname{Incubation Time}}}{}%
-}
-\par
-\end{table}
-
-As can be seen from Table~\ref{tab:exp},
-Experiment~\ref{exp:\theincT:\theinct}
-had the maximum time to growth, with
-incubation time \theinct,
-incubation temperature \theincT\ and
-time to growth, \themaxgrowth.
-</pre>
-
-<h2><a name=save>Saving Entries</a></h2>
-
- Entries can be saved using the command:
-<p>
- <tt>\csvSaveEntry[</tt><em>counter</em><tt>]{</tt><em>identifier</em><tt>}</tt>
-<p>
- where <em>counter</em> is a LaTeX counter, by default <tt>csvrownumber</tt>,
- and <em>identifier</em> is the header entry. The entry
- can then be used with the command:<p>
- <tt>\csvGetEntry{</tt><em>counter</em><tt>}{</tt><em>identifier</em><tt>}</tt><p>
- The following example illustrates the use of these commands.
-
-<h3><a name=ex:index>Example 14 (Saving Entries)</a></h3>
-
- This example illustrates how you can use one CSV
- file to access data in other CSV files.
- This example has several CSV files:
-<p>
- File <tt>index.csv</tt>:
-<pre>
-File,Temperature,NaCl,pH
-exp25a.csv,25,4.7,0.5
-exp25b.csv,25,4.8,1.5
-exp30a.csv,30,5.12,4.5
-</pre>
- File <tt>exp25a.csv</tt>:
-<pre>
-Time,Logcount
-0,3.75
-23,3.9
-45,4.0
-</pre>
- File <tt>exp25b.csv</tt>:
-<pre>
-Time,Logcount
-0,3.6
-60,3.8
-120,4.0
-</pre>
- File <tt>exp30a.csv</tt>:
-<pre>
-Time,Logcount
-0,3.73
-23,3.67
-60,4.9
-</pre>
-
- It is not possible to nest <tt>\CSVtotabular</tt>, <tt>\CSVtolongtable</tt> and <tt>\applyCSVfile</tt>,
- so if you need to go through <tt>index.csv</tt> and use each file
- named in there, you can first go through <tt>index.csv</tt> storing
- the information using <tt>\csvSaveEntry</tt> as follows:
-<pre>
-\newcounter{maxexperiments}
-\applyCSVfile{sample5.csv}{%
-\stepcounter{maxexperiments}
-\csvSaveEntry{File}
-\csvSaveEntry{Temperature}
-\csvSaveEntry{NaCl}
-\csvSaveEntry{pH}
-}
-</pre>
- The counter <tt>maxexperiments</tt> simply counts the number of
- entries in <tt>index.csv</tt>.
- The entries can now be used to generate a table for each
- file listed in <tt>index.csv</tt> (the <tt>\whiledo</tt> command is
- defined in the <tt>ifthen</tt> package):
-<pre>
-\newcounter{experiment}
-
-\whiledo{\value{experiment}<\value{maxexperiments}}{%
-\stepcounter{experiment}
-\begin{table}
-\caption{Temperature = \protect\csvGetEntry{experiment}{Temperature},
-NaCl = \protect\csvGetEntry{experiment}{NaCl},
-pH = \protect\csvGetEntry{experiment}{pH}}
-\vspace{10pt}
-\centering
-\CSVtotabular{\csvGetEntry{experiment}{File}}{ll}{%
-Time & Log Count\\}{%
-\insertTime & \insertLogcount\\}{%
-\insertTime & \insertLogcount}
-
-\end{table}
-}
-</pre>
- Note that <tt>\csvGetEntry</tt> needs to be <tt>\protect</tt>ed within
- the <tt>\caption</tt> command.
-
- This example can be modified if, say, you only want the
- tables where the temperature is 25:
-<pre>
-\setcounter{experiment}{0}
-\whiledo{\value{experiment}<\value{maxexperiments}}{%
-\stepcounter{experiment}
-\ifthenelse{\equal{\csvGetEntry{experiment}{Temperature}}{25}}{%
-\begin{table}
-\caption{Temperature = \protect\csvGetEntry{experiment}{Temperature},
-NaCl = \protect\csvGetEntry{experiment}{NaCl},
-pH = \protect\csvGetEntry{experiment}{pH}}
-\vspace{10pt}
-\centering
-\CSVtotabular{\csvGetEntry{experiment}{File}}{ll}{%
-Time & Log Count\\}{%
-\insertTime & \insertLogcount\\}{%
-\insertTime & \insertLogcount}\par
-\end{table}}{}
-}
-</pre>
-
-<h2><a name=perl>The csvtools.pl Perl Script</a></h2>
-
- Suppose you have several large CSV files, and you have included the information into
- your document using <tt>\applyCSVfile</tt>, <tt>\CSVtolongtable</tt> or <tt>\CSVtotabular</tt>, which has made life so much easier for
- you, but you are now required by a journal to submit your source code in a single <tt>.tex</tt> file.
- They don't want all your CSV files, so what do you do? If you have Perl installed on your system
- you can use the <tt>csvtools.pl</tt> Perl script. This has the following syntax:<p>
- <tt>csvtools.pl</tt> <em>in-file</em> <em>out-file</em><p>
- where <em>in-file</em> is the name of your file that contains the <tt>\applyCSVfile</tt>, <tt>\CSVtotabular</tt> etc
- commands, and <em>out-file</em> is a new file which will be created by <tt>csvtools.pl</tt>. This new
- file will be the same as <em>in-file</em> except that all occurances of <tt>\applyCSVfile</tt>, <tt>\CSVtolongtable</tt> and
- <tt>\CSVtotabular</tt> will be replaced by the relevant data extracted from the named CSV files.
-
-<h3><a name=ex:perl>Example 15 (csvtools.pl - Aligning Data)</a></h3>
-
- Suppose the file <tt>mydoc.tex</tt> contains the code given in <a href=#ex:tab1>Example 4</a>, with the associated
- CSV file <tt>sample.csv</tt> also given in that example. Then if you do:
-<pre>
-csvtools.pl mydoc.tex mydocnew.tex
-</pre>
-the file <tt>mydocnew.tex</tt> will be created which will be identical to <tt>mydoc.tex</tt> except the lines
- containing the code <tt>\CSVtotabular{sample.csv}{lccc}{</tt>...<tt>}{</tt>...<tt>}{</tt>...<tt>}</tt> will be replaced
-with the lines:
-<pre>
- % \CSVtotabular{sample.csv}... converted using csvtools.pl
- %>> START INSERT
- \begin{tabular}{lccc}
- \bfseries Name &
- \bfseries Assignment 1 &
- \bfseries Assignment 2 &
- \bfseries Total\\
- A. Smith&80&70&150\\
- B. Jones&60&80&140\\
- J. Doe&85&75&160\\
- &75&75&150
- \end{tabular}%<< END INSERT
-</pre>
-
-Similarly, <tt>csvtools.pl</tt> will substitute all occurrances of <tt>\CSVtolongtable</tt> and <tt>\applyCSVfile</tt>.
-
-<h3>Notes</h3>
-<ol>
-<li> The <tt>csvtools.pl</tt> file is bundled up with the code and documentation in the file
- <tt>csvtools.dtx</tt>. It will be extracted along with the code when you LaTeX the
- installation script <tt>csvtools.ins</tt>. If you are using UNIX or Linux etc, you will need
- to set the permissions so that the file can be executed:
-<pre>
-chmod u+x csvtools.pl
-</pre>
-If perl is located in a directory other than <tt>/usr/bin/</tt> you will need to edit the
-first line of <tt>csvtools.pl</tt> as appropriate. You can find the location using the command:
-<pre>
-which perl
-</pre>
-
-<li>If you can't directly execute a Perl script,
- you can do:<p>
- <tt>perl csvtools.pl</tt> <em>in-file</em> <em>out-file</em>
-<p>
-<li> You must first LaTeX your document before using <tt>csvtools.pl</tt> as it checks the
- log file for any counters that have been defined.
-<p>
-<li> <tt>csvtools.pl</tt> only knows about a very limited set of LaTeX commands. It should
- be able to understand:
-<pre>
-\CSVtotabular{\csvGetEntry{experiment}{File}}{ll}{...
-</pre>
-(see <a href=#ex:index>Example 14</a>), but it won't be able to understand, say,
-<pre>
-\newcommand{\filename}{\csvGetEntry{experiment}{File}}
-\CSVtotabular{\filename}{ll}{...
-</pre>
-It can pick up on <tt>\addtocounter</tt>, <tt>\stepcounter</tt>, <tt>\refstepcounter</tt> and <tt>\setcounter</tt>
- but only if they are used explicitly in the named <tt>.tex</tt> file. (It ignores any files
- that have been included using <tt>\input</tt>, <tt>\include</tt> etc.)
-<p>
-<li> This Perl script has only been tested under Linux, but it ought to work under other
- systems.
-</ol>
-
-<h2><a name=drawbacks>Bugs/Drawbacks/``Features''</a></h2>
-
-<ol>
-<li><a name=itm:insert></a>
- The package doesn't check to see whether <tt>\insert</tt><em>identifier</em>
- exists, otherwise you would not be able to use multiple CSV
- files with the same headers, as in <a href=#ex:index>Example 14</a>. Therefore it is recommended that
- you check to make sure that the command does not already exist.
- For example, the TeX commands <tt>\insert</tt> and <tt>\insertpenalties</tt>
- already exist, so a blank header or a header named <tt>penalties</tt>
- would cause problems. (These two will now cause an error as from version 1.1, but it's something bear in mind.)
-<p>
- <li> Note also that <tt>\insertbyname</tt> doesn't check
- if you've given a valid label, so if no text appears,
- check you've spelt it correctly, checking punctuation, spaces and case.
-<p>
- <li><a name=itm:psbyname></a>
- Note that in <a href=#ex:ps>Example 2</a>, replacing line 3 with:
-<pre>
-\centerline{\includegraphics{\insertbyname{File}}}
-</pre>
- will cause an error, as <tt>\insertbyname{File}</tt> doesn't get
- fully expanded by the time it gets passed to
- <tt>\includegraphics</tt>, and will prevent <tt>\includegraphics</tt> from
- finding the file. It is possible to get around this using
- TeX's <tt>\edef</tt> command:
-<pre>
-\edef\psfilename{\insertbyname{File}}
-\centerline{\includegraphics{\psfilename}}
-</pre>
-
- <li><a name=itm:noalign></a> You can't have commands like <tt>\hline</tt>, <tt>\cline</tt>
- and <tt>\multicolumn</tt> in the first column of the
- <em>middle</em> or <em>last</em> code of <tt>\CSVtotabular</tt> or <tt>\CSVtolongtable</tt>. If you do, it will generate
- a <tt>misplaced \noalign</tt> error, instead you need to put it
- at the end of the <em>first</em> or <em>middle</em> code.
- (See <a href=#ex:tab3>Example 6</a>.)
-<p>
- <li>You can't have nested <tt>\applyCSVfile</tt>, <tt>\CSVtolongtable</tt> and <tt>\CSVtotabular</tt>
- commands. (See <a href=#ex:index>Example 14</a>)
-<p>
- <li> If the CSV file has a header row, it must be on the first line.
-<p>
- <li> It is possible for TeX to run out of memory if you use
- <tt>\csvSaveEntry</tt> on a large file.
-<p>
-<li> Commas within an entry in a CSV file may cause problems. You will need to
-enclose the entry in braces, e.g. <code>{Joe Smith, Jr}</code>.
-<p>
-<li><a name=itm:csvrownumber</a> In version 1.0, there was an inconsistency
-with <tt>csvrownumber</tt> within <code>\applyCSVfile</code> and <code>\CSVtotabular</code>. In the former it excluded the header row, whereas the latter included it. This has been changed in version 1.1 so that with <code>\applyCSVfile</code>, <code>\CSVtotabular</code> and <code>\CSVtolongtable</code>, <tt>csvrownumber</tt> refers to the data row (excluding header row.) I hope this doesn't cause problems, but it makes more sense that they should be consistent. So if you have no blank lines in your CSV file, <tt>csvrownumber</tt> should always be 1 more than <tt>csvlinenumber</tt>.
-</ol>
-
-<hr>
-<h2>Contents</h2>
-<ul>
-<li><a href=#intro>Introduction</a>
-<li><a href=#mailmerge>Mail Merging and Similar Applications</a>
-<li><a href=#csv2tab>Converting CSV file into a tabular environment</a>
-<li><a href=#longtable>Converting CSV file into a longtable environment</a>
-<li><a href=#counters>Associated Counters</a>
-<li><a href=#crossref>Cross-Referencing</a>
-<li><a href=#save>Saving Entries</a>
-<li><a href=#perl>The csvtools.pl Perl Script</a>
-<li><a href=#drawbacks>Bugs/Drawbacks/``Features''</a>
-</ul>
-
-<h2>Examples</h2>
-<ul>
-<li><a href=#ex:mail>Example 1 (Mail Merging)</a>
-<li><a href=#ex:ps>Example 2 (Multiple Figures)</a>
-<li><a href=#ex:field>Example 3 (Mail Merging using <tt>\field</tt>)</a>
-<li><a href=#ex:tab1>Example 4 (Aligning Data from a CSV file)</a>
-<li><a href=#ex:tab2>Example 5 (Adding Lines)</a>
-<li><a href=#ex:tab3>Example 6 (Added Complexity)</a>
-<li><a href=#ex:longtab>Example 7</a>
-<li><a href=#ex:stripy>Example 8 (Stripy Table)</a>
-<li><a href=#ex:mail2>Example 9 (More Mail Merging)</a>
-<li><a href=#ex:ref1>Example 10 (Labelling within <tt>\applyCSVfile</tt>)</a>
-<li><a href=#ex:ref2>Example 11 (Labelling within <tt>\applyCSVfile</tt>)</a>
-<li><a href=#ex:timetogrowth>Example 12 (Labelling within <tt>\CSVtotabular</tt>)</a>
-<li><a href=#ex:t2g2>Example 13 (Labelling within <tt>\CSVtotabular</tt>)</a>
-<li><a href=#ex:index>Example 14 (Saving Entries)</a>
-<li><a href=#ex:perl>Example 15 (csvtools.pl - Aligning Data)</a>
-</ul>
-<hr>
-
-<a href=http://theoval.cmp.uea.ac.uk/~nlct>Dr Nicola Talbot</a> |
-<a href=http://www.cmp.uea.ac.uk/>School of Computing Sciences</a> |
-<a href=http://www.uea.ac.uk/>University of East Anglia</a>
-
-<h5>N.L.C. Talbot. School of Computing Sciences. University of East Anglia. Last Modified: 19 Oct 2004.</h5>
-</html>