#642 Improved cwl format and latex parser

Tim Hoffmann

The current cwl format definition and the latex parser have some fundamental limitations. This request ist intedend to collect the information which usecases have to be covered by the parser and how an improved cwl format could look like. It's nowhere said that we'll have time to start this anytime soon. It would be a major project because it also needs a new latex parser. However, it's good to collect these information in a single place.

The current limitations are:

  • Only the first argument can have special meaning, all other are ignored.
  • The information from the argument cannot be manipulated.
  • There is only a fixed set of types, which may need extension, a command cannot have multiple types.
  • Keyword arguments are not supported.


Feature Requests: #124
Feature Requests: #402


  • Tim Hoffmann
    Tim Hoffmann


    \import{path}{file}: Should be recognized as \include-like statement path and file should be joined to determine the included file (see also).

    \cref{label1,label2}: Multiple labels should be referenceable. This list definition is currently not supported for references. Note: it is for citations. But it would be necessary to be able to to specify if a command accepts only single entries or list (see also).

    \textcquote{bibid}{text} or \mycite{param}{bibid}: it should be possible to define which of the arguments has a special meaning (see also).

    Keyword arguments lists should be supported. e.g. the ctable package defines the label via a keyword in an optional argument (see also).

    \myfiginsert{label}{file}: It should be possible to have muliple arguments with different meanings in one command.

    Arguments might behave like environments, e.g. the mchem package provides a command \ce{}. Its content is interpreted as math. Same with \ensuremath{}.
    Also related: \path{PATH=$(ROOTSYS)\bin} or redefined verbatim should not treat the contained $ as start of math.

    Last edit: Tim Hoffmann 2014-03-16
  • Tim Hoffmann
    Tim Hoffmann

    Possible formats:

    Assume a hypothetical \citelink{cite}{url} command taking a reference as the first element, a url as the second argument. Additionally it is a rare command.

    Possible formats maintaining the current cwl structure would be:



    Not sure if mixing text and formats is a good idea. There may also be %< %> and %| in there and then it becomes more and more unreadable.

    After # v1:

    \citelink{cite}{url}#*#c#u  // i.e. #<global>#<first_arg>#<second_arg>

    After # v2:

    \citelink{cite}{url}#*1:c2:u  // i.e. #<global>1:<first_arg>2:<second_arg>

    Then, the single chararcter specifiers are hard to remember and read. Why not use whole words?

    It is also possible to bind certain argument names to a meaning, e.g.


    where cite implicitly means a citation and url means a link.

    Advantage: This format is easily readable.
    Drawback: We directly bind the placeholder name to a functionality. The user cannot choose the placeholder name (also one might think of translated cwls, which would not be possible with this approach).

    Sideremark: Another requested feature is

    Moreover, there is also the %<placeholder%> and %| cursor position syntax to be considered. Should it be maintained as is? Is it sufficiently flexible?

  • Tim Hoffmann
    Tim Hoffmann

    additional usecases:

    Multiple arguments with single citations (package biblatex)


    Spellchecking in options of \begin depending on other arguments, e.g. (package beamer). Second argument should be checked if first argument of \begin is frame:

  • most of the usecases can now be handled by the token-system
    argument-types can be defined at an arbitrary position
    reference-lists are not yet supported
    \import needs to be handled specifically as there is no general way of concatenating arguments and defining them as something else