summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-06-11 23:06:40 +0000
committerKarl Berry <karl@freefriends.org>2009-06-11 23:06:40 +0000
commit5e3364c59042be87b704bd1987cb6a19069051a2 (patch)
tree278840ab01d29f0c55048e4589ab0a4b13a17ba5
parentc09766e27de6513283bdd791e2a19e2e959ab5ec (diff)
ulqda update (11jun09)
git-svn-id: svn://tug.org/texlive/trunk@13716 c570f23f-e606-0410-a88d-b1316a301751
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/ulqda/ulqda.pl63
-rw-r--r--Master/texmf-dist/doc/latex/ulqda/README3
-rw-r--r--Master/texmf-dist/doc/latex/ulqda/ulqda.pdfbin285144 -> 310195 bytes
-rwxr-xr-xMaster/texmf-dist/scripts/ulqda/ulqda.pl63
-rw-r--r--Master/texmf-dist/source/latex/ulqda/ulqda.dtx376
-rw-r--r--Master/texmf-dist/tex/latex/ulqda/ulqda.sty49
6 files changed, 481 insertions, 73 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/ulqda/ulqda.pl b/Build/source/texk/texlive/linked_scripts/ulqda/ulqda.pl
index 9590ac8368e..036c1f2a7dd 100755
--- a/Build/source/texk/texlive/linked_scripts/ulqda/ulqda.pl
+++ b/Build/source/texk/texlive/linked_scripts/ulqda/ulqda.pl
@@ -21,19 +21,21 @@ use Digest::SHA1 qw(sha1 sha1_hex sha1_base64);
sub Display_Version()
{
- print "Version: ulqda.pl [2009/05/15 v1.0 Qualitative Data Analysis package]\n\n";
+ print "Version: ulqda.pl [2009/06/11 v1.1 Qualitative Data Analysis package]\n\n";
exit;
}
sub Display_Usage()
{
print<<"EOF";
-Usage: $0 <--list>|<--graphflat>|<--graphnet>|<--help>|<--version> \\
- [<--filter section>] [<--number-->] infile.csv outfile
+Usage: $0 \\
+ <--list>|<--graphflat>|<--graphnet>|<--cloud>|<--help>|<--version> \\
+ [<--filter section>] [<--number-->] infile.csv outfile
--filter: filter based on document section label
--graphflat: Generate GraphViz .dot output of codes (unconnected)
--graphnet: Generate GraphViz .dot output of codes (connected)
+--cloud: Generate Cloud output of codes
--help: Print this help and exit
--list: Generate LaTeX table of codes (labelled as table:qda_codes)
--number: Output quantity details
@@ -46,10 +48,15 @@ sub sort_codes_hashvalue_descending {
$codes{$b} <=> $codes{$a};
}
+sub sort_codes_alphabetic {
+ $a cmp $b;
+}
+
@colors = ("#d40000", "#e35a24", "#f67c00", "#faa800", "#ffc000", "#ffde00", "#aae900", "#62dc68", "#bbcced", "#a3bbe0", "#8aaad4", "#7299c7", "#5676b5", "#4554a3", "#2e3191", "#000472");
$result = GetOptions("number" => \$options{'n'},
"list" => \$options{'l'},
+ "cloud" => \$options{'c'},
"graphflat" => \$options{'g'},
"filter=s" => \$options{'f'},
"graphnet" => \$options{'G'},
@@ -61,9 +68,9 @@ $result = GetOptions("number" => \$options{'n'},
&Display_Version() if $options{'v'};
-if (!($options{'l'} || $options{'g'} || $options{'G'}))
+if (!($options{'c'} || $options{'l'} || $options{'g'} || $options{'G'}))
{
- print "Requires one of --list, --graphflat, --graphnet, --version or --help\n\n";
+ print "Requires one of --cloud, --list, --graphflat, --graphnet, --version or --help\n\n";
&Display_Usage()
}
@@ -88,6 +95,15 @@ if ($options{'l'})
\\label{table:qda_codes}
EOF
}
+elsif ($options{'c'})
+{
+ #
+ print FILEOUT << "EOF";
+{
+\\begin{center}
+\\noindent%
+EOF
+}
elsif ($options{'g'} || $options{'G'})
{
print FILEOUT << "EOF";
@@ -139,6 +155,15 @@ close(FILEIN);
$iterationCount = 0; $nodeCount = 0;
$maxConnections = 0; $minConnections=65535;
+if ($options{'c'})
+{
+ @key_list = (sort sort_codes_alphabetic keys %codes);
+}
+else
+{
+ @key_list = (sort sort_codes_hashvalue_descending keys %codes);
+}
+
LOOP: foreach $i (sort sort_codes_hashvalue_descending keys %codes)
{
if ($codes{$i} > $maxConnections) { $maxConnections = $codes{$i} }
@@ -148,7 +173,7 @@ LOOP: foreach $i (sort sort_codes_hashvalue_descending keys %codes)
#
# For each code, output it as requested
#
-foreach $i (sort sort_codes_hashvalue_descending keys %codes)
+foreach $i (@key_list)
{
$digest = sha1_hex($i);
@@ -156,6 +181,15 @@ foreach $i (sort sort_codes_hashvalue_descending keys %codes)
{
print FILEOUT "\\\\\n";
}
+ elsif ($options{'c'})
+ {
+ my $base = int(7 + ($codes{$i}/3));
+ my $lead = $base + 3;
+ my $raisept = int(($base - 7)/4);
+
+ if ($raisept) { print FILEOUT "\\raisebox{-${raisept}pt}";}
+ print FILEOUT "{\\fontsize{$base}{$lead}\\selectfont ";
+ }
elsif ($options{'g'} || $options{'G'})
{
$nodeCount++;
@@ -165,17 +199,20 @@ foreach $i (sort sort_codes_hashvalue_descending keys %codes)
$i =~ s/!/:/g;
print FILEOUT "$i";
- if ($options{'n'})
+ if ($options{'c'})
+ {
+ print FILEOUT "}\n";
+ }
+ elsif ($options{'n'})
{
print FILEOUT "{\\textcolor{red}{" if ($options{'l'});
print FILEOUT "($codes{$i})";
print FILEOUT "}}" if ($options{'l'});
}
- $fontSize = 15 + ((60 * $codes{$i})/$maxConnections);
-
if ($options{'g'} || $options{'G'})
{
+ $fontSize = 15 + ((60 * $codes{$i})/$maxConnections);
print FILEOUT "\", fontsize=$fontSize";
#if ($iterationCount <= 5)
{
@@ -187,7 +224,7 @@ foreach $i (sort sort_codes_hashvalue_descending keys %codes)
}
print FILEOUT "]\n";
}
- elsif (! $options{'l'} )
+ elsif (! ($options{'l'} || $options{'c'}) )
{
print FILEOUT "\n";
}
@@ -246,6 +283,12 @@ if ($options{'l'})
\\hrule
EOF
}
+elsif ($options{'c'})
+{
+ print FILEOUT << "EOF";
+\\end{center}
+EOF
+}
print FILEOUT "\n}\n";
diff --git a/Master/texmf-dist/doc/latex/ulqda/README b/Master/texmf-dist/doc/latex/ulqda/README
index fc4939e5d0a..a03eed9ad27 100644
--- a/Master/texmf-dist/doc/latex/ulqda/README
+++ b/Master/texmf-dist/doc/latex/ulqda/README
@@ -1,4 +1,5 @@
ulqda - A LaTeX package supporting Qualitative Data Analysis
+ [2009/06/12 v1.1]
Copyright (C) 2009 by Ivan Griffin (ivan.griffin@ul.ie)
@@ -28,7 +29,7 @@ available on http://www.ctan.org/ are needed by the ulqda
package:
* soul.sty
* color.sty
- * multicols.sty
+ * multicol.sty
* PGF/TikZ
* dot2texi.sty
diff --git a/Master/texmf-dist/doc/latex/ulqda/ulqda.pdf b/Master/texmf-dist/doc/latex/ulqda/ulqda.pdf
index 33d100a42f1..a8b713d4794 100644
--- a/Master/texmf-dist/doc/latex/ulqda/ulqda.pdf
+++ b/Master/texmf-dist/doc/latex/ulqda/ulqda.pdf
Binary files differ
diff --git a/Master/texmf-dist/scripts/ulqda/ulqda.pl b/Master/texmf-dist/scripts/ulqda/ulqda.pl
index 9590ac8368e..036c1f2a7dd 100755
--- a/Master/texmf-dist/scripts/ulqda/ulqda.pl
+++ b/Master/texmf-dist/scripts/ulqda/ulqda.pl
@@ -21,19 +21,21 @@ use Digest::SHA1 qw(sha1 sha1_hex sha1_base64);
sub Display_Version()
{
- print "Version: ulqda.pl [2009/05/15 v1.0 Qualitative Data Analysis package]\n\n";
+ print "Version: ulqda.pl [2009/06/11 v1.1 Qualitative Data Analysis package]\n\n";
exit;
}
sub Display_Usage()
{
print<<"EOF";
-Usage: $0 <--list>|<--graphflat>|<--graphnet>|<--help>|<--version> \\
- [<--filter section>] [<--number-->] infile.csv outfile
+Usage: $0 \\
+ <--list>|<--graphflat>|<--graphnet>|<--cloud>|<--help>|<--version> \\
+ [<--filter section>] [<--number-->] infile.csv outfile
--filter: filter based on document section label
--graphflat: Generate GraphViz .dot output of codes (unconnected)
--graphnet: Generate GraphViz .dot output of codes (connected)
+--cloud: Generate Cloud output of codes
--help: Print this help and exit
--list: Generate LaTeX table of codes (labelled as table:qda_codes)
--number: Output quantity details
@@ -46,10 +48,15 @@ sub sort_codes_hashvalue_descending {
$codes{$b} <=> $codes{$a};
}
+sub sort_codes_alphabetic {
+ $a cmp $b;
+}
+
@colors = ("#d40000", "#e35a24", "#f67c00", "#faa800", "#ffc000", "#ffde00", "#aae900", "#62dc68", "#bbcced", "#a3bbe0", "#8aaad4", "#7299c7", "#5676b5", "#4554a3", "#2e3191", "#000472");
$result = GetOptions("number" => \$options{'n'},
"list" => \$options{'l'},
+ "cloud" => \$options{'c'},
"graphflat" => \$options{'g'},
"filter=s" => \$options{'f'},
"graphnet" => \$options{'G'},
@@ -61,9 +68,9 @@ $result = GetOptions("number" => \$options{'n'},
&Display_Version() if $options{'v'};
-if (!($options{'l'} || $options{'g'} || $options{'G'}))
+if (!($options{'c'} || $options{'l'} || $options{'g'} || $options{'G'}))
{
- print "Requires one of --list, --graphflat, --graphnet, --version or --help\n\n";
+ print "Requires one of --cloud, --list, --graphflat, --graphnet, --version or --help\n\n";
&Display_Usage()
}
@@ -88,6 +95,15 @@ if ($options{'l'})
\\label{table:qda_codes}
EOF
}
+elsif ($options{'c'})
+{
+ #
+ print FILEOUT << "EOF";
+{
+\\begin{center}
+\\noindent%
+EOF
+}
elsif ($options{'g'} || $options{'G'})
{
print FILEOUT << "EOF";
@@ -139,6 +155,15 @@ close(FILEIN);
$iterationCount = 0; $nodeCount = 0;
$maxConnections = 0; $minConnections=65535;
+if ($options{'c'})
+{
+ @key_list = (sort sort_codes_alphabetic keys %codes);
+}
+else
+{
+ @key_list = (sort sort_codes_hashvalue_descending keys %codes);
+}
+
LOOP: foreach $i (sort sort_codes_hashvalue_descending keys %codes)
{
if ($codes{$i} > $maxConnections) { $maxConnections = $codes{$i} }
@@ -148,7 +173,7 @@ LOOP: foreach $i (sort sort_codes_hashvalue_descending keys %codes)
#
# For each code, output it as requested
#
-foreach $i (sort sort_codes_hashvalue_descending keys %codes)
+foreach $i (@key_list)
{
$digest = sha1_hex($i);
@@ -156,6 +181,15 @@ foreach $i (sort sort_codes_hashvalue_descending keys %codes)
{
print FILEOUT "\\\\\n";
}
+ elsif ($options{'c'})
+ {
+ my $base = int(7 + ($codes{$i}/3));
+ my $lead = $base + 3;
+ my $raisept = int(($base - 7)/4);
+
+ if ($raisept) { print FILEOUT "\\raisebox{-${raisept}pt}";}
+ print FILEOUT "{\\fontsize{$base}{$lead}\\selectfont ";
+ }
elsif ($options{'g'} || $options{'G'})
{
$nodeCount++;
@@ -165,17 +199,20 @@ foreach $i (sort sort_codes_hashvalue_descending keys %codes)
$i =~ s/!/:/g;
print FILEOUT "$i";
- if ($options{'n'})
+ if ($options{'c'})
+ {
+ print FILEOUT "}\n";
+ }
+ elsif ($options{'n'})
{
print FILEOUT "{\\textcolor{red}{" if ($options{'l'});
print FILEOUT "($codes{$i})";
print FILEOUT "}}" if ($options{'l'});
}
- $fontSize = 15 + ((60 * $codes{$i})/$maxConnections);
-
if ($options{'g'} || $options{'G'})
{
+ $fontSize = 15 + ((60 * $codes{$i})/$maxConnections);
print FILEOUT "\", fontsize=$fontSize";
#if ($iterationCount <= 5)
{
@@ -187,7 +224,7 @@ foreach $i (sort sort_codes_hashvalue_descending keys %codes)
}
print FILEOUT "]\n";
}
- elsif (! $options{'l'} )
+ elsif (! ($options{'l'} || $options{'c'}) )
{
print FILEOUT "\n";
}
@@ -246,6 +283,12 @@ if ($options{'l'})
\\hrule
EOF
}
+elsif ($options{'c'})
+{
+ print FILEOUT << "EOF";
+\\end{center}
+EOF
+}
print FILEOUT "\n}\n";
diff --git a/Master/texmf-dist/source/latex/ulqda/ulqda.dtx b/Master/texmf-dist/source/latex/ulqda/ulqda.dtx
index 741f79c42ea..596e6838ce6 100644
--- a/Master/texmf-dist/source/latex/ulqda/ulqda.dtx
+++ b/Master/texmf-dist/source/latex/ulqda/ulqda.dtx
@@ -46,17 +46,16 @@ LaTeX version 1999/12/01 or later.
%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{ulqda}
- [2009/05/15 v1.0 Qualitative Data Analysis package]
+ [2009/06/11 v1.1 Qualitative Data Analysis package]
%
%</package>
%<*driver>
\documentclass{ltxdoc}
\usepackage{color}
\usepackage{soul}
-\definecolor{UlQda@lightblue}{rgb}{0.80,0.85,1}
-\sethlcolor{UlQda@lightblue}
\usepackage{tikz}
\usetikzlibrary{backgrounds,shapes,arrows,positioning}
+\definecolor[named]{UlQda@lightblue}{rgb}{0.80,0.85,1}
\usepackage{alltt}
\usepackage{ulqda}
\usepackage{hyperref}
@@ -86,8 +85,9 @@ LaTeX version 1999/12/01 or later.
%</driver>
% \fi
%
-% \CheckSum{363}
-% \changes{v1.0}{2009/05/15}{Initial Version}
+% \CheckSum{0}
+% \changes{v1.0}{2009/05/15}{Initial Version.}
+% \changes{v1.1}{2009/06/11}{Changes to support xcolor, multicol, and to fix some typos and bugs. dot2texi.sty in CTAN doesn't currently support cache option. Also added |\ulqdaCloud| macro.}
% \GetFileInfo{ulqda.sty}
%
% \title{\ulQda: A \LaTeX\ package supporting Qualitative Data Analysis}
@@ -155,7 +155,7 @@ LaTeX version 1999/12/01 or later.
% themes from the data in a consistent and reliably manner, and to
% support visualisation of these themes.
%
-% In order words, the package lets the computer do the grunt work, and
+% In other words, this package lets the computer do the grunt work, and
% the researcher focus on recognising and comprehending the
% emerging theories from the work.
%
@@ -179,9 +179,13 @@ LaTeX version 1999/12/01 or later.
% \href{https://listserv.heanet.ie/cgi-bin/wa?A0=ITALIC-L}%
% {Irish \TeX{} and \LaTeX{} In-Print Community}
% for their assistance in creating the \LaTeX\ macro to perform the coding.
-% Thanks also to Kjell Magne Fauskes for the excellent \texttt{dot2tex} and
+%
+% Thanks to Kjell Magne Fauskes for the excellent \texttt{dot2tex} and
% \texttt{dot2texi.sty} packages.
%
+% And finally, a special shout out to Matthias Noe for pointing out
+% some issues with an earlier version of this package.
+%
% \subsection{Legal Mumbo-Jumbo}
%
% This document and the \ulQda\ package are copyright \copyright~2009
@@ -202,9 +206,9 @@ LaTeX version 1999/12/01 or later.
% available on \href{http://www.ctan.org/}{CTAN}, are needed by the \ulQda\
% package:
% \begin{itemize}
-% \item soul.sty - provides letter-spacing and underlining;
% \item color.sty - provides \LaTeX\ support for colour;
-% \item multicols.sty - defines an environment for typesetting text in
+% \item soul.sty - provides support for highlighting text;
+% \item multicol.sty - defines an environment for typesetting text in
% multiple columns;
% \item \href{http://sourceforge.net/projects/pgf/}{PGF/\TikZ} - macro
% package for the creation of graphics in \TeX;
@@ -225,6 +229,35 @@ LaTeX version 1999/12/01 or later.
% are used to automate the conversion of coded output to Dot language.
% \end{itemize}
%
+% \section{Known Limitations and Issues}
+%
+% For some reason, the underlining trick provided by soul.sty and used by
+% this package fails to work when a color model option is passed to
+% xcolor.sty. The trouble seems to be with soul.sty's |\texthl{}| macro.
+%
+% A rather unsatisfactory workaround is to redefine |\ulqdaHighlight| to
+% something % like the following, somewhere in your own document after you
+% have used
+% |\usepackage[cmyk]{xcolor}| and |\usepackage{ulqda}|:
+% \\
+% |\renewcommand{\ulqdaHighlight}[2]{%| \\
+% | \colorbox{UlQda@lightblue}{\mbox{#2}}| \\
+% | \marginpar%| \\
+% | {\raggedright\hbadness=10000\tiny\it\colorbox{UlQda@lightblue}{#1}\par}%| \\
+% |}|
+%
+% Note however that this is not without its own typesetting abberations.
+%
+% \subsection{docstrip woes - in this very document!}
+%
+% As I am using a single |.dtx| file to produce both |ulqda.sty| and |ulqda.pl|,
+% I used mechanisms to separate each - notably |<package>| and |<perl>| filters established
+% with the docstrip |\generate| macro. However, for some reason these filters are
+% being output in the typeset source listings for the \LaTeX\ macros in this document.
+% Unfortunately, the docstrip documentation is suitable terse and has not as of yet
+% enlightened me as to how to fix this issue. Please ignore them - or better, suggest
+% the fix!
+%
% \section{Why use \LaTeX\ for QDA Automation?}
%
% An obvious question at this point is why use \LaTeX\ for QDA work flow
@@ -466,6 +499,14 @@ LaTeX version 1999/12/01 or later.
% \verb+\ulqdaTable+
% \end{UsageEnv}
%
+% \DescribeMacro{\ulqdaCloud}
+% |\ulqdaCloud| is a macro which invokes processing of the
+% generated CSV file to create a \LaTeX\ cloud
+% (see table~\ref{table:cloud}). \\
+% \begin{UsageEnv}
+% \verb+\ulqdaCloud+
+% \end{UsageEnv}
+%
% \DescribeMacro{\ulqdaSetSectFilter}
% |\ulqdaSetSectFilter| establishes a filter for the next |\ulqdaGraph|
% or |\ulqdaTable| macro. If interviews are logically structured in a
@@ -593,15 +634,179 @@ LaTeX version 1999/12/01 or later.
% }
% \end{table}
%
+% \subsubsection{Visualisation as a Cloud}
+%
+% Table~\ref{table:qda_codes} illustrates the output from |\ulqdaCloud|.
+%
+% \begin{table}[h]
+% \centering
+% \caption{List of QDA Codes}
+% {
+% \vspace{0.1in}
+% \hrule
+%
+% \label{table:cloud}
+% {
+% \begin{center}
+% \noindent%
+% {\fontsize{7}{10}\selectfont FPGA}
+% {\fontsize{7}{10}\selectfont HW}
+% {\fontsize{7}{10}\selectfont HW attitude to risk}
+% {\fontsize{7}{10}\selectfont HW bias}
+% \raisebox{-1pt}{\fontsize{12}{15}\selectfont HW fear of risk}
+% {\fontsize{7}{10}\selectfont HW focus}
+% {\fontsize{7}{10}\selectfont HW is fixed}
+% {\fontsize{7}{10}\selectfont HW reluctance to design change}
+% \raisebox{-4pt}{\fontsize{24}{27}\selectfont HW vs SW}
+% {\fontsize{7}{10}\selectfont IM}
+% {\fontsize{9}{12}\selectfont IP}
+% {\fontsize{8}{11}\selectfont SQA}
+% {\fontsize{7}{10}\selectfont SW focus}
+% {\fontsize{7}{10}\selectfont SW influence on System Arch}
+% {\fontsize{7}{10}\selectfont SW is changeable}
+% {\fontsize{7}{10}\selectfont SW models}
+% {\fontsize{8}{11}\selectfont SW workarounds}
+% {\fontsize{7}{10}\selectfont adherence to process}
+% {\fontsize{7}{10}\selectfont adverse}
+% {\fontsize{8}{11}\selectfont aggressive schedules}
+% {\fontsize{7}{10}\selectfont agile methods}
+% {\fontsize{7}{10}\selectfont algorithmic software}
+% {\fontsize{7}{10}\selectfont ambition}
+% {\fontsize{7}{10}\selectfont approach to test}
+% {\fontsize{7}{10}\selectfont bring in software expertise early}
+% \raisebox{-5pt}{\fontsize{29}{32}\selectfont business model}
+% \raisebox{-1pt}{\fontsize{11}{14}\selectfont changeability of SW}
+% {\fontsize{8}{11}\selectfont changing market requirements}
+% {\fontsize{8}{11}\selectfont co-location}
+% \raisebox{-1pt}{\fontsize{11}{14}\selectfont communication}
+% {\fontsize{7}{10}\selectfont communications difficulties}
+% {\fontsize{7}{10}\selectfont competitive analysis}
+% \raisebox{-1pt}{\fontsize{12}{15}\selectfont competitiveness}
+% \raisebox{-2pt}{\fontsize{16}{19}\selectfont complexity}
+% {\fontsize{7}{10}\selectfont complexity in SW control code}
+% {\fontsize{8}{11}\selectfont complexity risk}
+% {\fontsize{7}{10}\selectfont confidence}
+% {\fontsize{7}{10}\selectfont constraints}
+% {\fontsize{7}{10}\selectfont consumer electronics}
+% {\fontsize{7}{10}\selectfont control software}
+% {\fontsize{9}{12}\selectfont cost of changing HW}
+% {\fontsize{8}{11}\selectfont cost of test}
+% {\fontsize{8}{11}\selectfont cost of wrong HW}
+% {\fontsize{8}{11}\selectfont cost-benefit of process}
+% {\fontsize{7}{10}\selectfont cross-functional}
+% \raisebox{-5pt}{\fontsize{28}{31}\selectfont culture}
+% {\fontsize{7}{10}\selectfont design modelling}
+% {\fontsize{7}{10}\selectfont dimensioning HW}
+% {\fontsize{7}{10}\selectfont early prototype}
+% {\fontsize{7}{10}\selectfont engineers over-simplify}
+% {\fontsize{9}{12}\selectfont experience}
+% {\fontsize{9}{12}\selectfont fabless}
+% {\fontsize{7}{10}\selectfont face to face}
+% {\fontsize{7}{10}\selectfont false perception}
+% {\fontsize{7}{10}\selectfont fluid specifications}
+% {\fontsize{7}{10}\selectfont focus}
+% {\fontsize{7}{10}\selectfont freedom to innovate}
+% {\fontsize{8}{11}\selectfont friction}
+% \raisebox{-4pt}{\fontsize{23}{26}\selectfont geographical}
+% {\fontsize{9}{12}\selectfont geographical mitigation}
+% {\fontsize{7}{10}\selectfont geographical more impact than technical}
+% {\fontsize{7}{10}\selectfont greatest impact}
+% {\fontsize{8}{11}\selectfont gsd}
+% {\fontsize{7}{10}\selectfont gsd mitigation}
+% {\fontsize{9}{12}\selectfont hardware}
+% {\fontsize{7}{10}\selectfont implementation}
+% {\fontsize{7}{10}\selectfont importance of cross-functional skills}
+% {\fontsize{10}{13}\selectfont importance of face to face}
+% {\fontsize{7}{10}\selectfont inadequate testing}
+% {\fontsize{7}{10}\selectfont incidental is most important}
+% {\fontsize{7}{10}\selectfont incidental knowledge}
+% {\fontsize{7}{10}\selectfont informal chats}
+% {\fontsize{9}{12}\selectfont information sharing}
+% {\fontsize{7}{10}\selectfont internalising}
+% {\fontsize{7}{10}\selectfont keep SW model in sync with HW}
+% {\fontsize{8}{11}\selectfont lack of mixed design skills}
+% {\fontsize{7}{10}\selectfont learning curve}
+% {\fontsize{7}{10}\selectfont limitations of SW models}
+% {\fontsize{7}{10}\selectfont management}
+% {\fontsize{7}{10}\selectfont market analysis}
+% {\fontsize{7}{10}\selectfont market change}
+% {\fontsize{7}{10}\selectfont market risk}
+% \raisebox{-1pt}{\fontsize{11}{14}\selectfont market window}
+% {\fontsize{8}{11}\selectfont methodology}
+% \raisebox{-1pt}{\fontsize{13}{16}\selectfont mindset gap}
+% {\fontsize{9}{12}\selectfont mitigation}
+% {\fontsize{7}{10}\selectfont moving SW into HW}
+% {\fontsize{7}{10}\selectfont moving schedule}
+% {\fontsize{7}{10}\selectfont moving software into hardware}
+% {\fontsize{7}{10}\selectfont multi-disciplinary}
+% {\fontsize{7}{10}\selectfont new platform}
+% {\fontsize{7}{10}\selectfont opportunity for HW change}
+% {\fontsize{7}{10}\selectfont opportunity to change}
+% {\fontsize{7}{10}\selectfont organisation}
+% {\fontsize{7}{10}\selectfont overconfidence}
+% {\fontsize{7}{10}\selectfont perception of other discipline}
+% {\fontsize{9}{12}\selectfont process}
+% {\fontsize{9}{12}\selectfont product specification}
+% {\fontsize{9}{12}\selectfont project inception}
+% {\fontsize{7}{10}\selectfont realtime missing from SW model}
+% {\fontsize{7}{10}\selectfont reluctance to change}
+% {\fontsize{7}{10}\selectfont requires hardware focus}
+% {\fontsize{7}{10}\selectfont resource requirements}
+% {\fontsize{7}{10}\selectfont resource usage analysis}
+% \raisebox{-10pt}{\fontsize{48}{51}\selectfont risk}
+% \raisebox{-1pt}{\fontsize{12}{15}\selectfont risk mitigation}
+% {\fontsize{9}{12}\selectfont schedule}
+% {\fontsize{7}{10}\selectfont schedule impact}
+% \raisebox{-2pt}{\fontsize{17}{20}\selectfont social}
+% {\fontsize{8}{11}\selectfont social familiarity}
+% {\fontsize{7}{10}\selectfont social risk}
+% {\fontsize{8}{11}\selectfont social tools}
+% {\fontsize{10}{13}\selectfont software}
+% {\fontsize{8}{11}\selectfont specialisation}
+% {\fontsize{7}{10}\selectfont specifying HW resources}
+% {\fontsize{7}{10}\selectfont system resources}
+% {\fontsize{8}{11}\selectfont system understanding}
+% {\fontsize{7}{10}\selectfont tapeout set by hardware}
+% {\fontsize{7}{10}\selectfont team building}
+% \raisebox{-2pt}{\fontsize{16}{19}\selectfont technical}
+% {\fontsize{8}{11}\selectfont technical determinism}
+% {\fontsize{8}{11}\selectfont technical language barrier}
+% {\fontsize{8}{11}\selectfont techno-geographical split}
+% {\fontsize{8}{11}\selectfont telecoms}
+% {\fontsize{7}{10}\selectfont test code sharing}
+% {\fontsize{7}{10}\selectfont testing HW without final SW}
+% {\fontsize{7}{10}\selectfont time to market}
+% {\fontsize{7}{10}\selectfont tool problems}
+% {\fontsize{7}{10}\selectfont tools}
+% {\fontsize{7}{10}\selectfont underestimate learning curve}
+% {\fontsize{7}{10}\selectfont unedited}
+% {\fontsize{8}{11}\selectfont validation}
+% {\fontsize{7}{10}\selectfont value in test bench}
+% {\fontsize{7}{10}\selectfont value of SW models}
+% {\fontsize{7}{10}\selectfont value of reference platforms}
+% \raisebox{-1pt}{\fontsize{14}{17}\selectfont verification}
+% {\fontsize{7}{10}\selectfont verification risk}
+% {\fontsize{7}{10}\selectfont verify SW without HW}
+% {\fontsize{7}{10}\selectfont visibility}
+% {\fontsize{7}{10}\selectfont weight of HW risk}
+% {\fontsize{7}{10}\selectfont workaround}
+% \end{center}
+%
+% }
+% \hrule
+% }
+% \end{table}
+%
+%
% \subsubsection{Visualisation as Graphs}
% Figure~\ref{figure:viz} shows the visualisation output possible from \ulQda:
% \begin{itemize}
% \item figure~\ref{figure:viz:flat} shows the image created using\\
-% |\ulqdaGraph{net}{neato,mathmode,|\\
-% | options={--graphstyle "scale=0.5,transform shape"}}|.
-% \item figure~\ref{figure:viz:net} shows the image created using\\
% |\ulqdaGraph{flat}{neato,mathmode,|\\
% | options={--graphstyle "scale=0.5,transform shape"}}|
+% \item figure~\ref{figure:viz:net} shows the image created using\\
+% |\ulqdaGraph{net}{neato,mathmode,|\\
+% | options={--graphstyle "scale=0.5,transform shape"}}|.
% \end{itemize}
%
% \newsavebox{\tikzPicSaveBoxA}
@@ -924,11 +1129,14 @@ LaTeX version 1999/12/01 or later.
%
% \begin{macrocode}
%<*package>
-\RequirePackage{soul}
-\RequirePackage{color}
-\RequirePackage{multicols}
+\RequirePackage{multicol}
\RequirePackage{tikz}
-\RequirePackage[cache]{dot2texi}
+% \iffalse
+%% dot2texi.sty in CTAN doesn't support the cache option yet
+%% The SVN version does.
+% \RequirePackage[cache]{dot2texi}
+% \fi
+\RequirePackage{dot2texi}
\usetikzlibrary{backgrounds,shapes,arrows,positioning}
%</package>
@@ -940,7 +1148,9 @@ LaTeX version 1999/12/01 or later.
% |\ulqdaHighlight|.
% \begin{macrocode}
%<*package>
-\definecolor{UlQda@lightblue}{rgb}{0.80,0.85,1}
+
+\definecolor[named]{UlQda@lightblue}{rgb}{0.80,0.85,1}
+\RequirePackage{soul}
\sethlcolor{UlQda@lightblue}
%</package>
@@ -1016,10 +1226,12 @@ LaTeX version 1999/12/01 or later.
% \begin{macrocode}
%<*package>
\newcommand{\ulqdaHighlight}[2]{%
- \hl{\protect\ul{#2}}%
- \marginpar%
- {\raggedright\hbadness=10000\tiny\it \hl{#1}\par}%
- \par%
+ \hl{\protect\ul{#2}}%
+ \marginpar%
+ {\raggedright\hbadness=10000\tiny\it%
+ \hl{#1}
+ \par}%
+ %\par%
}
%</package>
@@ -1058,11 +1270,11 @@ LaTeX version 1999/12/01 or later.
% conditional code to decide if caching is enabled, and if so, if the cache is
% present or not.
% \begin{macrocode}
+%<*package>
%
%
-%<*package>
\AtBeginDocument{%
- \typeout{ulqda: Loaded - 2009/05/15 v1.0 Qualitative Data Analysis package}
+ \typeout{ulqda: Loaded - 2009/06/11 v1.1 Qualitative Data Analysis package}
% \end{macrocode}
%</package>
%
@@ -1098,8 +1310,9 @@ LaTeX version 1999/12/01 or later.
% Without caching enabled, the~.csv file will be generated every run.
%
% If a cache file is detected and shell escape is enabled, the~.csv cache
-% will be processed on demand by |\ulqdaGraph| to generate GraphViz~.dot
-% file outputs, and by |\ulqdaTable| to generate a multicolumn list of codes.
+% will be processed on demand: by |\ulqdaGraph| to generate GraphViz~.dot
+% file outputs, by |\ulqdaCloud| to generate tag cloud style maps,
+% and by |\ulqdaTable| to generate a multicolumn list of codes.
%
% In this case, the |\ulqdaCode| macro will not cause the cache file to
% update, but instead will only perform a typesetting function.
@@ -1153,7 +1366,7 @@ LaTeX version 1999/12/01 or later.
\def\eatthesquarebracket]{} % Gobble the square bracket.
%
% Coding macro
- \newcommand{\ulqdaCode}[2]{\ulqdaHighlight{#1}{#2} \UlQda@ListIt{#2}[#1,]} %
+ \newcommand{\ulqdaCode}[2]{\ulqdaHighlight{#1}{#2}\UlQda@ListIt{#2}[#1,]} %
\fi
} % end of \AtBeginDocument
@@ -1207,11 +1420,11 @@ LaTeX version 1999/12/01 or later.
% We also need to be able to clear any previously configured filter, and
% this is what the following macro does for us.
%
-% \begin{macrocode}
+% \begin{macrocode}
%<*package>
\newcommand{\ulqdaClearSectFilter}{\def\UlQda@filter{}}
%</package>
-% \end{macrocode}
+% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ulqdaGraph}
@@ -1359,6 +1572,41 @@ LaTeX version 1999/12/01 or later.
% \end{macro}
%
%
+% Next, we create a |\ulqdaCloud| macro -- a command to process the table of
+% codes and create a tag cloud style visualisation.
+%
+% \begin{macro}{\ulqdaCloud}
+% \begin{macrocode}
+%<*package>
+ \newcommand{\ulqdaCloud}{
+ \IfFileExists{\jobname_cloud.tex}{
+ \input{\jobname_cloud.tex}
+ }{
+%</package>
+% \end{macrocode}
+% If a cache file is detected and shell escape is enabled, the~.csv cache
+% will be processed on demand by |\ulqdaCloud| to generate the cloud.
+% \begin{macrocode}
+%<*package>
+ \ifUlQda@cachepresent
+ \ifUlQda@shellescape
+ \ifUlQda@debug
+ \typeout{ulqda: Converting .csv to TeX cloud}
+ \fi
+ \immediate\write18{ulqda.pl --cloud \UlQda@filter \UlQda@counts
+ -- \jobname.csv \jobname_cloud.tex}
+ \fi
+ \fi
+ \IfFileExists{\jobname_cloud.tex}{
+ \input{\jobname_cloud.tex}
+ }
+ }
+ }
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
+%
% \subsection{Inactive Macro Stubs}
% If the package is not intended to be active, we need to create
% stub definitions for the macros that the package provides, so that
@@ -1376,6 +1624,13 @@ LaTeX version 1999/12/01 or later.
%</package>
% \end{macrocode}
% \end{macro}
+% \begin{macro}{\ulqdaCloud}
+% \begin{macrocode}
+%<*package>
+ \newcommand{\ulqdaCloud}{}
+%</package>
+% \end{macrocode}
+% \end{macro}
% \begin{macro}{\ulqdaGraph}
% \begin{macrocode}
%<*package>
@@ -1386,7 +1641,7 @@ LaTeX version 1999/12/01 or later.
% \begin{macro}{\ulqdaCode}
% \begin{macrocode}
%<*package>
- \newcommand{\ulqdaCode}[2]{}
+ \newcommand{\ulqdaCode}[2]{#2}
%</package>
% \end{macrocode}
% \end{macro}
@@ -1486,19 +1741,21 @@ use Digest::SHA1 qw(sha1 sha1_hex sha1_base64);
sub Display_Version()
{
- print "Version: ulqda.pl [2009/05/15 v1.0 Qualitative Data Analysis package]\n\n";
+ print "Version: ulqda.pl [2009/06/11 v1.1 Qualitative Data Analysis package]\n\n";
exit;
}
sub Display_Usage()
{
print<<"EOF";
-Usage: $0 <--list>|<--graphflat>|<--graphnet>|<--help>|<--version> \\
- [<--filter section>] [<--number-->] infile.csv outfile
+Usage: $0 \\
+ <--list>|<--graphflat>|<--graphnet>|<--cloud>|<--help>|<--version> \\
+ [<--filter section>] [<--number-->] infile.csv outfile
--filter: filter based on document section label
--graphflat: Generate GraphViz .dot output of codes (unconnected)
--graphnet: Generate GraphViz .dot output of codes (connected)
+--cloud: Generate Cloud output of codes
--help: Print this help and exit
--list: Generate LaTeX table of codes (labelled as table:qda_codes)
--number: Output quantity details
@@ -1511,10 +1768,15 @@ sub sort_codes_hashvalue_descending {
$codes{$b} <=> $codes{$a};
}
+sub sort_codes_alphabetic {
+ $a cmp $b;
+}
+
@colors = ("#d40000", "#e35a24", "#f67c00", "#faa800", "#ffc000", "#ffde00", "#aae900", "#62dc68", "#bbcced", "#a3bbe0", "#8aaad4", "#7299c7", "#5676b5", "#4554a3", "#2e3191", "#000472");
$result = GetOptions("number" => \$options{'n'},
"list" => \$options{'l'},
+ "cloud" => \$options{'c'},
"graphflat" => \$options{'g'},
"filter=s" => \$options{'f'},
"graphnet" => \$options{'G'},
@@ -1526,9 +1788,9 @@ $result = GetOptions("number" => \$options{'n'},
&Display_Version() if $options{'v'};
-if (!($options{'l'} || $options{'g'} || $options{'G'}))
+if (!($options{'c'} || $options{'l'} || $options{'g'} || $options{'G'}))
{
- print "Requires one of --list, --graphflat, --graphnet, --version or --help\n\n";
+ print "Requires one of --cloud, --list, --graphflat, --graphnet, --version or --help\n\n";
&Display_Usage()
}
@@ -1555,6 +1817,15 @@ if ($options{'l'})
\\label{table:qda_codes}
EOF
}
+elsif ($options{'c'})
+{
+ #
+ print FILEOUT << "EOF";
+{
+\\begin{center}
+\\noindent%
+EOF
+}
elsif ($options{'g'} || $options{'G'})
{
print FILEOUT << "EOF";
@@ -1608,6 +1879,15 @@ close(FILEIN);
$iterationCount = 0; $nodeCount = 0;
$maxConnections = 0; $minConnections=65535;
+if ($options{'c'})
+{
+ @key_list = (sort sort_codes_alphabetic keys %codes);
+}
+else
+{
+ @key_list = (sort sort_codes_hashvalue_descending keys %codes);
+}
+
LOOP: foreach $i (sort sort_codes_hashvalue_descending keys %codes)
{
if ($codes{$i} > $maxConnections) { $maxConnections = $codes{$i} }
@@ -1617,7 +1897,7 @@ LOOP: foreach $i (sort sort_codes_hashvalue_descending keys %codes)
#
# For each code, output it as requested
#
-foreach $i (sort sort_codes_hashvalue_descending keys %codes)
+foreach $i (@key_list)
{
$digest = sha1_hex($i);
@@ -1625,6 +1905,15 @@ foreach $i (sort sort_codes_hashvalue_descending keys %codes)
{
print FILEOUT "\\\\\n";
}
+ elsif ($options{'c'})
+ {
+ my $base = int(7 + ($codes{$i}/3));
+ my $lead = $base + 3;
+ my $raisept = int(($base - 7)/4);
+
+ if ($raisept) { print FILEOUT "\\raisebox{-${raisept}pt}";}
+ print FILEOUT "{\\fontsize{$base}{$lead}\\selectfont ";
+ }
elsif ($options{'g'} || $options{'G'})
{
$nodeCount++;
@@ -1634,17 +1923,20 @@ foreach $i (sort sort_codes_hashvalue_descending keys %codes)
$i =~ s/!/:/g;
print FILEOUT "$i";
- if ($options{'n'})
+ if ($options{'c'})
+ {
+ print FILEOUT "}\n";
+ }
+ elsif ($options{'n'})
{
print FILEOUT "{\\textcolor{red}{" if ($options{'l'});
print FILEOUT "($codes{$i})";
print FILEOUT "}}" if ($options{'l'});
}
- $fontSize = 15 + ((60 * $codes{$i})/$maxConnections);
-
if ($options{'g'} || $options{'G'})
{
+ $fontSize = 15 + ((60 * $codes{$i})/$maxConnections);
print FILEOUT "\", fontsize=$fontSize";
#if ($iterationCount <= 5)
{
@@ -1656,7 +1948,7 @@ foreach $i (sort sort_codes_hashvalue_descending keys %codes)
}
print FILEOUT "]\n";
}
- elsif (! $options{'l'} )
+ elsif (! ($options{'l'} || $options{'c'}) )
{
print FILEOUT "\n";
}
@@ -1715,6 +2007,12 @@ if ($options{'l'})
\\hrule
EOF
}
+elsif ($options{'c'})
+{
+ print FILEOUT << "EOF";
+\\end{center}
+EOF
+}
print FILEOUT "\n}\n";
diff --git a/Master/texmf-dist/tex/latex/ulqda/ulqda.sty b/Master/texmf-dist/tex/latex/ulqda/ulqda.sty
index da0f8ccc5c8..027d7cc32f0 100644
--- a/Master/texmf-dist/tex/latex/ulqda/ulqda.sty
+++ b/Master/texmf-dist/tex/latex/ulqda/ulqda.sty
@@ -22,15 +22,17 @@
%%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{ulqda}
- [2009/05/15 v1.0 Qualitative Data Analysis package]
-\RequirePackage{soul}
-\RequirePackage{color}
-\RequirePackage{multicols}
+ [2009/06/11 v1.1 Qualitative Data Analysis package]
+\RequirePackage{multicol}
\RequirePackage{tikz}
-\RequirePackage[cache]{dot2texi}
+%% dot2texi.sty in CTAN doesn't support the cache option yet
+%% The SVN version does.
+\RequirePackage{dot2texi}
\usetikzlibrary{backgrounds,shapes,arrows,positioning}
-\definecolor{UlQda@lightblue}{rgb}{0.80,0.85,1}
+
+\definecolor[named]{UlQda@lightblue}{rgb}{0.80,0.85,1}
+\RequirePackage{soul}
\sethlcolor{UlQda@lightblue}
\newif\ifUlQda@debug \UlQda@debugfalse
@@ -83,17 +85,19 @@
\fi
\newcommand{\ulqdaHighlight}[2]{%
- \hl{\protect\ul{#2}}%
- \marginpar%
- {\raggedright\hbadness=10000\tiny\it \hl{#1}\par}%
- \par%
+ \hl{\protect\ul{#2}}%
+ \marginpar%
+ {\raggedright\hbadness=10000\tiny\it%
+ \hl{#1}
+ \par}%
+ %\par%
}
\newcommand{\ulQda}{\textsf{ul\kern -.075em\lower .3ex\hbox {\protect\emph{q}}da}}
\ifUlQda@active
\AtBeginDocument{%
- \typeout{ulqda: Loaded - 2009/05/15 v1.0 Qualitative Data Analysis package}
+ \typeout{ulqda: Loaded - 2009/06/11 v1.1 Qualitative Data Analysis package}
\ifUlQda@cache
\IfFileExists{\jobname.csv} %
{
@@ -139,7 +143,7 @@
\def\eatthesquarebracket]{} % Gobble the square bracket.
%
% Coding macro
- \newcommand{\ulqdaCode}[2]{\ulqdaHighlight{#1}{#2} \UlQda@ListIt{#2}[#1,]} %
+ \newcommand{\ulqdaCode}[2]{\ulqdaHighlight{#1}{#2}\UlQda@ListIt{#2}[#1,]} %
\fi
} % end of \AtBeginDocument
@@ -233,10 +237,29 @@
}
}
}
+ \newcommand{\ulqdaCloud}{
+ \IfFileExists{\jobname_cloud.tex}{
+ \input{\jobname_cloud.tex}
+ }{
+ \ifUlQda@cachepresent
+ \ifUlQda@shellescape
+ \ifUlQda@debug
+ \typeout{ulqda: Converting .csv to TeX cloud}
+ \fi
+ \immediate\write18{ulqda.pl --cloud \UlQda@filter \UlQda@counts
+ -- \jobname.csv \jobname_cloud.tex}
+ \fi
+ \fi
+ \IfFileExists{\jobname_cloud.tex}{
+ \input{\jobname_cloud.tex}
+ }
+ }
+ }
\else % UlQda@activefalse
\newcommand{\ulqdaTable}{}
+ \newcommand{\ulqdaCloud}{}
\newcommand{\ulqdaGraph}[2]{}
- \newcommand{\ulqdaCode}[2]{}
+ \newcommand{\ulqdaCode}[2]{#2}
\newcommand{\ulqdaSetSectFilter}[1]{}
\newcommand{\ulqdaClearSectFilter}{}
\fi