From 5e3364c59042be87b704bd1987cb6a19069051a2 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 11 Jun 2009 23:06:40 +0000 Subject: ulqda update (11jun09) git-svn-id: svn://tug.org/texlive/trunk@13716 c570f23f-e606-0410-a88d-b1316a301751 --- .../texk/texlive/linked_scripts/ulqda/ulqda.pl | 63 +++- Master/texmf-dist/doc/latex/ulqda/README | 3 +- Master/texmf-dist/doc/latex/ulqda/ulqda.pdf | Bin 285144 -> 310195 bytes Master/texmf-dist/scripts/ulqda/ulqda.pl | 63 +++- Master/texmf-dist/source/latex/ulqda/ulqda.dtx | 376 ++++++++++++++++++--- Master/texmf-dist/tex/latex/ulqda/ulqda.sty | 49 ++- 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 Binary files a/Master/texmf-dist/doc/latex/ulqda/ulqda.pdf and b/Master/texmf-dist/doc/latex/ulqda/ulqda.pdf 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] % % %<*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. % % \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 || and || 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} % @@ -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} % @@ -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% } % @@ -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} % % @@ -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{}} % -% \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} + }{ +% +% \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} + } + } + } +% +% \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. % % \end{macrocode} % \end{macro} +% \begin{macro}{\ulqdaCloud} +% \begin{macrocode} +%<*package> + \newcommand{\ulqdaCloud}{} +% +% \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} % % \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 -- cgit v1.2.3