File:  [LON-CAPA] / loncom / html / adm / help / tex / Authoring_Library_Scripts.tex
Revision 1.5: download - view: text, annotated - select for diffs
Thu Jan 19 21:12:45 2017 UTC (7 years, 6 months ago) by damieng
Branches: MAIN
CVS tags: version_2_12_X, version_2_11_X, version_2_11_5_msu, version_2_11_5, version_2_11_4_uiuc, version_2_11_4_msu, version_2_11_4, version_2_11_3_uiuc, version_2_11_3_msu, version_2_11_3, version_2_11_2_uiuc, version_2_11_2_msu, version_2_11_2_educog, version_2_11_2, HEAD
edited sections about XML, comments, algebra, chem, m, script, startouttext, reformatted problem examples, added &input

    1: \label{Authoring_Library_Scripts}
    2: 
    3: A LON-CAPA .library file can contain just a script block, or just
    4: response items, or both.  A LON-CAPA problem can import as many published library 
    5: files as desired. A .library file always starts with a $<$library$>$ tag, and 
    6: always ends with a $<$/library$>$ tag.\index{library}
    7: 
    8: \null
    9: \noindent \textbf{Storing entire scripts}
   10: 
   11: Entire scripts can be stored in a library file. The entire script can then be imported
   12: into a problem file. \index{library}\index{random\_permutation}
   13: 
   14: \null
   15: \noindent Library file:
   16: \begin{verbatim}
   17: <library>
   18:   <script type="loncapa/perl">
   19:     @alpha=('A','B','C','D',);
   20:     $seed=&random(1,1000000,1);
   21:     @alpha=&random_permutation($seed,@alpha); #scramble order
   22:     $letter = $alpha[0]; #select first element
   23:   </script>
   24: </library>
   25: \end{verbatim}
   26: 
   27: \noindent Problem file:
   28: \begin{verbatim}
   29: <problem>
   30:   <import id="15">randomletter.library</import>
   31:   <startouttext />The random letter is $letter.<endouttext />
   32:   <!-- other problem tags could go here -->
   33: </problem>
   34: \end{verbatim}
   35: 
   36: \null
   37: \noindent \textbf{Storing a portion of a script}
   38: 
   39: A portion of a script, such as a large data array can be stored in a library file.
   40: 
   41: \null 
   42: \noindent Library file:
   43: \begin{verbatim}
   44: <library>
   45:   <script type="loncapa/perl">
   46:     @alpha=('A','B','C','D',);
   47:     $seed=&random(1,1000000,1);
   48:     @alpha=&random_permutation($seed,@alpha); #scramble order
   49:   </script>
   50: </library>
   51: \end{verbatim}
   52: 
   53: \noindent Problem file: (note the $<$script$>$ tag is repeated and other
   54: script calculations can be done using variables from the library file.)
   55: \begin{verbatim}
   56: <problem>
   57:   <import id="15">randomletter.library</import>
   58:   <script type="loncapa/perl">
   59:     $letter = $alpha[0];
   60:   </script>
   61:   <startouttext />The random letter is $letter.<endouttext />
   62:   <!-- other problem tags could go here. -->
   63: </problem>
   64: \end{verbatim}
   65: 
   66: \null
   67: \noindent \textbf{Storing a subroutine}
   68: 
   69: Another use of a .library file is to define a subroutine which you plan
   70: to call in a number of instances, e.g., (see notes below about browsing libraries
   71: in the repository to see the contents of this subroutine)
   72: 
   73: \begin{verbatim}
   74: /res/msu/raeburn/cleaneq.library
   75: \end{verbatim}
   76: 
   77: Here is some example XML problem code
   78: which makes a call to the \&cleaneq() routine defined in the library file, passing
   79: some arguments: \$eq,`x',`y',`z' in the call to the routine.
   80: 
   81: \begin{verbatim}
   82: <problem>
   83:   <import id="15">/res/msu/raeburn/cleaneq.library</import>
   84: 
   85:   <script type="loncapa/perl">
   86:     $eq = "1x + 0y +-7z --3";
   87:     $eq2 = &cleaneq($eq,'x','y','z');
   88:   </script>
   89:   <startouttext />Here is an example equation:<br />
   90:   Without cleaneq: $eq<br />
   91:   With cleaneq: $eq2<endouttext />
   92: </problem>
   93: \end{verbatim}
   94: 
   95: \null
   96: \noindent \textbf{Assigning random problems using libraries}
   97: Libraries can be used to store alternative parts of problems which are
   98: selected with the $<$randomlist$>$ tag.\index{randomlist}\index{randomizing parts}
   99: The .library file
  100: hold the all content that would normally appear inside the $<$part$>$ tag.
  101: \begin{verbatim}
  102: <part id="11">
  103:   <randomlist show="1">
  104:     <import id="12">sample1.library</import>
  105:     <import id="13">sample2.library</import>
  106:     <import id="14">sample3.library</import>
  107:   </randomlist>
  108: </part>
  109: <part id="15">
  110:   <randomlist show="1">
  111:     <import id="16">sample4.library</import>
  112:     <import id="17">sample5.library</import>
  113:     <import id="18">sample6.library</import>
  114:   </randomlist>
  115: </part>
  116: \end{verbatim}
  117: 
  118: Note: when using $<$randomlist$>$ as shown above, all students will work
  119: every part of the problem, but the actual problem statements will be different. Another
  120: option is to wrap multiple $<$part$>$ tags but then not all students will work
  121: all parts unless the value of `show' equals the total parts wrapped. For more
  122: information see section \ref{Authoring_Scripting_Tags}.
  123: 
  124: \null 
  125: \noindent \textbf{Viewing the text contents of a library script block}
  126: 
  127: If you click on a .library file when browsing the shared content
  128: repository, and the .library file contains just a script block, then
  129: nothing will be displayed in the pop-up window.
  130: 
  131: The code is viewable if the author has enabled access to the source
  132: XML when publishing a .library item that is pure script block.  If that
  133: is done, then when a user checks the ``Source Available'' checkbox when
  134: browsing the shared content pool, a link will be displayed for items
  135: with available source code. Clicking the ``Source Code'' link for
  136: any such items will open a pop-up which displays the content of the library
  137: file. It is good practice to enable access to the source code when publishing any 
  138: library that will be shared. Otherwise, users cannot see it.
  139: 
  140: \null
  141: \noindent \textbf{Viewing variables from a library script during testing}
  142: 
  143: When viewing a problem in the problem testing mode of Authoring Space, 
  144: you will see a separate
  145: Script Vars link at the bottom of the testing area for each script block 
  146: (either a block included directly
  147: within the file, or a block included within a library file imported into
  148: a problem). By clicking the respective link, you can view variable values from
  149: the respective script.\index{script variables, viewing}
  150: 
  151: \null
  152: \noindent \textbf{Accessing submissions from a problem part loaded from a library}
  153: 
  154: When *response items (e.g., *response is a wildcard such as optionresponce, 
  155: stringresponse, numericalresponse, etc.)\index{*response} are defined in a
  156: .library file, this results in an extra id item in the identifier
  157: required in \&EXT() \index{\&EXT}functions, e.g., if a problem contains two parts with
  158: ids of a and b respectively, and the id of the $<$import$>$ for the .library is 15, 
  159: and the *response items have ids of 11 and 12 respectively, the
  160: most recent submissions could be retrieved with the following \&EXT() calls.\index{\&EXT}
  161: 
  162: \texttt{\&EXT(\char`\"{}user.resource.resource.a.15\_11.submission\char`\"{});}
  163: 
  164: \texttt{\&EXT(\char`\"{}user.resource.resource.b.15\_12.submission\char`\"{});}
  165: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>