\usepackage{listings}
\newtoggle{showanswers}
\toggletrue{showanswers}
\input{prob-verb.dbtex}
\begin{document}
\begin{enumerate}
\DTLforeach*{problems}{\Question=Question,\Answer=Answer}%
{%
\item \Question
\iftoggle{showanswers}{Answer: \Answer}{}
}
\end{enumerate}
\end{document}
See also:
• ShufflingtheData
• SortingandShuffling
• ImportprobsolnData
1.4 Null Values
Empty entries aren’t the same as null entries. If you want a null entry, set the entry
to \@dtlnovalue. A convenient way to do this is to select the cell and use Edit→Set
Cell to Null. Alternatively, you can set all entries in a selected column to null with
Edit→Column→Nullify Column and similiarly for a selected row with Edit→Row→Nullify
Row.
In your L
A
T
E
Xdocument, you can check for null values using datatool’s \DTLifnull
command. To check for empty values you can use one of etoolbox’s commands, such as
\ifdefempty.
11
Pdf reverse page order preview - rotate PDF page permanently in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Users to Change the Rotation Angle of PDF File Page Using C#
rotate individual pages in pdf reader; how to save a pdf after rotating pages
Pdf reverse page order preview - VB.NET PDF Page Rotate Library: rotate PDF page permanently in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
PDF Document Page Rotation in Visual Basic .NET Class Application
pdf expert rotate page; save pdf after rotating pages
2 Graphical Mode
To run datatooltk in graphical mode you must invoke it with either datatooltk-gui
or datatooltk --gui. The main window is shown inFigure2.1. Each database is in
atabbedpane, withthe name of the database inthe tab. Notethat the name corresponds
to the database’s identifying label, as used in commands like \DTLnewdb. This is not
necessarily the same as the filename (see section1.2). Since this name is used as a
label, it shouldn’t contain any of T
E
X’s special characters or any other active characters
that could cause problems. An asterisk * following the label in the tab indicates that
the database has been modified. If you move the mouse over the tab, you will see the
filename appear in a tooltip, if the database has been saved to a datatool file.
Figure 2.1: Main Window
You can use the File menu to create a new database, load an existing database or
import data (seechapter4). To load an existing database, use File→Open. These data-
base files contain LAT
E
Xcode in a specific format. The datatooltk application assumes
a.dbtex file extension (seesection1.2). You can load these files into a LAT
E
Xdocument
using \input or \DTLloaddbtex, but remember to specify the .dbtex extension. (Also
remember to load the datatool package.)
12
C# PDF Page Move Library: re-order PDF pages in C#.net, ASP.NET
page. Enable C# users to move, sort and reorder all PDF page in preview. Support to reverse page order in PDF document. RasterEdge
rotate pages in pdf permanently; pdf rotate pages separately
VB.NET PDF Page Move Library: re-order PDF pages in vb.net, ASP.
Support to reverse page order in adobe PDF document in both .NET WinForms application and ASP.NET webpage. Enable move, sort and reorder PDF page in preview.
pdf rotate page and save; rotate pages in pdf online
Each column has a corresponding data type: string, integer, real or currency. The
type is automatically detected from the column data, but can be changed, as described
insection2.2.
Non-string entries can be edited by double-clicking on the relevant cell, or you can
select the relevant cell and use Edit→Edit Cell. In the first case, a cursor will appear in
the cell and you can edit the numerical value and press “Enter” to finish editing. In the
second case, the cell editor dialog box will open, seesection2.1.
Only the first few lines of a string entry are visible in the main window. If
an entry has more than that number of lines, you will need to use the cell
editor dialog box to view the entire contents of that cell. The default row height
can be changed in the Preferences dialog box (seechapter6). Columns set to integer or
real data types have single-lined cells with no line wrap. Columns set to currency data
type may wrap, but using “Enter” will finish editing the cell (unless you’re using the cell
editor dialog box). If you insert a newline character in the cell edit dialog box (for any
data type), the type for that column will be converted to “string”.
To edit or view an entry in a column with the “string” data type, double-click on the
relevant cell or select the cell and use Edit→Edit Cell to open the cell editor dialog box
(seesection2.1). You can now scroll through the cell contents.
2.1 Cell Editor
To open the cell editor dialog box (see Figure 2.2) double-click on the required cell,
which must be in a column with a string data type. Alternatively, select the cell (of any
type) and use Edit→Edit Cell.
Remember that the contents of the cell should be LAT
E
Xcode, so be careful if you use
any of T
E
X’s special characters. Also, see the section on verbatim text (section1.3) if
you haven’t already read it. Once you have made your edits, click on Okay to update
the database. To discard the edits, click Cancel.
If you’ve used datatool, you will probably know that if you want a paragraph break in
your cell entries you need to use \DTLpar, but with datatooltk you don’t need to worry
about it as blank lines in an entry will automatically be converted behind the scenes.
Note that redundant blank lines will be removed.
Important: if you use datatool’s \DTLsaverawdb or \DTLprotectedsaverawdb com-
mands to overwrite your file, you will lose any pretty-printing spaces or comments in
your code.
2.2 Header Dialog
Each column has a title, a uniquely identifying label and an associated type. The type
can be one of: String, Integer, Real or Currency. The type is automatically detected
from the column data, but can be changed using the Edit→Column→Edit Header menu
item or by double-clicking on the column header which opens the header dialog box (see
Figure 2.3).Thelabelcorrespondstothelabelusedtoidentifythecolumnincommands
13
Figure 2.2: Cell Editor Dialog
such as \DTLforeach. The title is used in commands like \DTLdisplaydb. Seechapter6
for currency mappings.
Figure 2.3: Header Dialog
InGUImode, column headers show the title. If you move the mouse over the column
header, you will see the label and type displayed in a tooltip (seeFigure2.4).
14
Figure 2.4: Header Details Shown in Tooltip
15
3 Tools
There are currently two tools available: sort (seesection3.1) and shuffle (seesection3.2).
These both reorder the rows of the database and can be invoked either from the Tools
menu or from the command line (as long as you have also loaded a database using --in
or one of the import options). If you use both --sort and --shuffle in the command
line invocation, sort will always be performed first, regardless of the option order.
3.1 Sorting the Data
Although you can sort data in datatool using \DTLsort, it’s far more efficient to sort it
in datatooltk.
1
So instead of doing, say,
\input{mydata.dbtex}% loads database labelled ‘data’ from file ‘mydata.dbtex’
\DTLsortdb{Surname}{data}% sort data on ‘Title’ field
% Later in the document:
\DTLdisplaydb{data}% display data in tabular environment
It’s better to run, say,
datatooltk --in mydata.dbtex --sort Surname --output mydata-sorted.dbtex
Then in the document, just load mydata-sorted.dbtex:
\input{mydata-sorted.dbtex}
% Later in the document:
\DTLdisplaydb{data}% display data in tabular environment
or, if you have shell escape enabled you can used T
E
X’s \write18 mechanism:
\immediate\write18{datatooltk --in mydata.dbtex --sort Surname
--output mydata-sorted.dbtex}
\input{mydata-sorted.dbtex}
% Later in the document:
\DTLdisplaydb{data}% display data in tabular environment
1
If the original data is in an SQL database, it’s even more efficient to do the sorting in the SELECT
statement when you import the data (seesection4.3).
16
Adatabase can be sorted according to a particular column in either ascending or
descending order. In batch mode, this is done with the --sort option, as shown above,
where the sort column is identified by the column’s unique label. If the label is pre-
ceded by - then descending order is used (for example, --sort -Surname). If the label
is preceded by + (or has no prefix) then ascending order is used. For alphabetical
comparisons you can also use --sort-case-sensitive for case-sensitive comparisons
and --sort-case-insensitive for case-insensitive comparisons. The default is case-
insensitive.
InGUImode, sorting is done using the Tools→Sort menu item which opens the Sort
Database dialog box (seeFigure3.1).
Figure 3.1: Sort Dialog
Select the column you wish to sort by from the drop-down list of column titles, and
check the appropriate radio button for ascending or descending sort. If the column has
the string data type, you also need to specify whether or not you want to use case-
sensitive comparisons by checking or unchecking the Case sensitive box. If the column
type has a numerical type, the entries will be sorted via a numerical comparison (10 is
greater than 2) and the case-sensitive option is ignored. If the column type is a string
type, the entries will be sorted via an alphabetical comparison (“10” comes before “2”).
Example 2.
Consider the data shown inFigure3.2and reproduced inTable3.1.
Table 3.1: Original Data
Book
\pounds5.99
Video Game \euro20.00
Pen
\pounds3.00
The first column has a string data type and the second has a currency data type.
Sorting in ascending order on the second column, will sort numerically on just the
number. The currency symbol is ignored (see Table 3.2). If the type of the second
column is changed from currency to string, and the sort is redone, the order is now
based on a string comparison that includes the currency symbol (seeTable3.3).
17
Figure 3.2: Original Data
Table 3.2: Data Sorted on Second Column (Currency Comparison)
Pen
\pounds3.00
Book
\pounds5.99
Video Game \euro20.00
Table 3.3: Data Sorted on Second Column (String Comparison)
Video Game \euro20.00
Pen
\pounds3.00
Book
\pounds5.99
18
3.2 Shuffling the Data
Data can be reorderedby randomly swapping pairs of rows. By default, this random row
swapping is done 100times, but this number can be changedvia the --shuffle-iterations
command line option or the Shuffle Iterations field in the Preferences dialog box.
Data shuffling can be performed either by the --shuffle command line option or the
Tools→Shuffle menu item.
Example 3.
Consider the database shown inFigure 3.3. This database has three columns. The
first is a question, the second is the corresponding answer (optional) and the third is
anumber indicating the question level. For example, 1 could correspond to easy and 2
could correspond to medium difficulty.
Figure 3.3: Shuffle Example
19
Now suppose I want to write an assignment sheet that has one randomly selected
question of level 1 and two randomly selected questions of level 2. Let’s suppose the file
name is data.dbtex and the database label is “problems”. Then I can run datatooltk
in batch mode using:
datatooltk --shuffle --in data.dbtex --output data-shuffled.dbtex
Remember to use --seed if you don’t want a different ordering every time you run that
command. For example:
datatooltk --seed 2013 --shuffle --in data.dbtex --output data-shuffled.dbtex
This shuffled database can now be loaded in my document:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{datatool}
% Used by some of the questions:
\usepackage{paralist}
\usepackage{tikz}
\newtoggle{showanswers}
\toggletrue{showanswers}
\input{data-shuffled.dbtex}
% Number to select from level 1
\newcounter{maxleveli}
\setcounter{maxleveli}{1}
% Number to select from level 2
\newcounter{maxlevelii}
\setcounter{maxlevelii}{2}
% Counter to keep track of level 1 questions
\newcounter{leveli}
% Counter to keep track of level 2 questions
\newcounter{levelii}
\begin{document}
20
Documents you may be interested
Documents you may be interested