diff --git a/src/cite.cpp b/src/cite.cpp
index d934d0a3..06a36fec 100644
--- a/src/cite.cpp
+++ b/src/cite.cpp
@@ -296,3 +296,92 @@ void CiteDict::generatePage() const
   thisDir.rmdir(bibOutputDir);
 }
 
+
+
+
+
+TexRefDict::TexRefDict(int size) : m_entries(size, FALSE)
+{
+  m_entries.setAutoDelete(TRUE);
+}
+
+void TexRefDict::insert(const char *label)
+{
+  m_entries.insert(label,new TexRefInfo(label));
+}
+
+TexRefInfo *TexRefDict::find(const char *label) const
+{
+  return label ? m_entries.find(label) : 0;
+}
+
+void TexRefDict::clear()
+{
+  m_entries.clear();
+}
+
+void TexRefDict::resolveReferences() const
+{
+  if (m_entries.isEmpty()) return; // nothing to resolve
+
+  QStrList &texrefDataList = Config_getList(LATEX_AUX_FILES);
+  const char *texrefdata = texrefDataList.first();
+  int i = 0;
+  while (texrefdata)
+  {
+    QCString texrefFile = texrefdata;
+    if (!texrefFile.isEmpty() && texrefFile.right(4)!=".aux") texrefFile+=".aux";
+    QFileInfo fi(texrefFile);
+    if (fi.exists())
+    {
+      if (!texrefFile.isEmpty())
+      {
+        ++i;
+        printf("Reading file %s\n", texrefdata);
+        QFile f;
+        f.setName(texrefFile);
+        if (!f.open(IO_ReadOnly))
+        {
+          err("could not open file %s for reading\n",texrefFile.data());
+        }
+        QCString input(fi.size()+1);
+        f.readBlock(input.rawData(),fi.size());
+        f.close();
+        input.at(fi.size())='\0';
+        int p=0,s;
+        //printf("input=[%s]\n",input.data());
+        while ((s=input.find('\n',p))!=-1)
+        {
+          QCString line = input.mid(p,s-p);
+          //printf("p=%d s=%d line=[%s]\n",p,s,line.data());
+          p=s+1;
+
+          if (line.find("\\newlabel")!=0)
+          {
+            continue;
+          }
+          printf("handling: %s\n",line.data());
+          int j=line.find("}{");
+          int k=line.find("}",j+1);
+          if (j!=-1 && k!=-1)
+          {
+            QCString label = line.mid(10,j-10);
+            QCString text = line.mid(j+3,k-(j+3));
+            TexRefInfo *ci = m_entries.find(label);
+            printf("label='%s' number='%s'\n",label.data(),text.data(),ci);
+            if (ci)
+            {
+              ci->text = text;
+            }
+          }
+        }
+      }
+    }
+    else
+    {
+      err("file %s not found!\n",texrefFile.data());
+    }
+    texrefdata = texrefDataList.next();
+  }
+}
+
diff --git a/src/cite.h b/src/cite.h
index 1c595539..52e7e03e 100644
--- a/src/cite.h
+++ b/src/cite.h
@@ -95,4 +95,50 @@ class CiteDict
     QCString m_baseFileName;
 };
 
+
+/// Data that describes a label of an external LaTeX document
+struct TexRefInfo
+{
+  TexRefInfo(const char *label_, const char *text_=0, const char *fullText_=0,
+      const char *ref_=0) :
+    label(label_), text(text_), ref(ref_)
+  { }
+
+  TexRefInfo(const TexRefInfo &o)
+  { label=o.label.copy(); text=o.text.copy(); ref=o.ref.copy(); }
+
+  QCString label;
+  QCString text;
+  QCString ref;
+
+};
+
+/**
+ * @brief TexRef database access class.
+ * @details This class provides access do the database of external references
+ * that are retrieved from the LaTeX .aux files that are specified in the
+ * LATEX_AUX_FILES configuration option.
+ */
+class TexRefDict
+{
+  public:
+    /** Create the database, with an expected maximum of \a size entries */
+    TexRefDict(int size);
+
+    /** Insert a citation identified by \a label into the database */
+    void insert(const char *label);
+
+    /** Return the citation info for a given \a label */
+    TexRefInfo *find(const char *label) const;
+
+    /** Generate the citations page */
+    void resolveReferences() const;
+
+    /** clears the database */
+    void clear();
+
+  private:
+    QDict<TexRefInfo> m_entries;
+};
+
 #endif
diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp
index 2c8effcb..a50a8817 100644
--- a/src/cmdmapper.cpp
+++ b/src/cmdmapper.cpp
@@ -100,6 +100,7 @@ CommandMap cmdMap[] =
   { "skipline",      CMD_SKIPLINE },
   { "xmlonly",       CMD_XMLONLY },
   { "xrefitem",      CMD_XREFITEM },
+  { "texref",        CMD_TEXREF },
   { "throw",         CMD_EXCEPTION },
   { "until",         CMD_UNTIL },
   { "verbatim",      CMD_VERBATIM },
diff --git a/src/cmdmapper.h b/src/cmdmapper.h
index 8cb529d5..c417f446 100644
--- a/src/cmdmapper.h
+++ b/src/cmdmapper.h
@@ -136,7 +136,8 @@ enum CommandType
   CMD_MINUS        = 106,
   CMD_INCLUDEDOC   = 107,
   CMD_SNIPPETDOC   = 108,
-  CMD_SNIPWITHLINES= 109
+  CMD_SNIPWITHLINES= 109,
+  CMD_TEXREF       = 110
 };
 
 enum HtmlTagType
diff --git a/src/commentscan.l b/src/commentscan.l
index f26cabdd..9794d157 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -92,6 +92,7 @@ static bool handleRefItem(const QCString &);
 static bool handleSection(const QCString &);
 static bool handleAnchor(const QCString &);
 static bool handleCite(const QCString &);
+static bool handleTexRef(const QCString &);
 static bool handleFormatBlock(const QCString &);
 static bool handleAddIndex(const QCString &);
 static bool handleIf(const QCString &);
@@ -183,6 +184,7 @@ static DocCmdMap docCmdMap[] =
   { "endparblock",     &handleEndParBlock,      TRUE  },
   { "refitem",         &handleRefItem,          TRUE  },
   { "cite",            &handleCite,             FALSE },
+  { "texref",          &handleTexRef,           FALSE },
   { "subpage",         &handleSubpage,          TRUE  },
   { "section",         &handleSection,          TRUE  },
   { "subsection",      &handleSection,          TRUE  },
@@ -707,6 +709,13 @@ static void addCite()
 
 //-----------------------------------------------------------------------------
 
+static void addTexRef()
+{
+  Doxygen::texrefDict->insert(yytext);
+}
+
+//-----------------------------------------------------------------------------
+
 // strip trailing whitespace (excluding newlines) from string s
 static void stripTrailingWhiteSpace(QCString &s)
 {
@@ -952,6 +961,7 @@ LABELID   [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
 CITESCHAR [a-z_A-Z0-9\x80-\xFF]
 CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]*
 CITEID    {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)*
+TEXREFID  {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)*
 SCOPEID   {ID}({ID}*{BN}*"::"{BN}*)*({ID}?)
 SCOPENAME "$"?(({ID}?{BN}*("::"|"."){BN}*)*)((~{BN}*)?{ID})
 TMPLSPEC  "<"{BN}*[^>]+{BN}*">"
@@ -1001,6 +1011,7 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 %x      HtmlComment
 %x      SkipLang
 %x	CiteLabel
+%x	TexRefLabel
 %x	CopyDoc
 %x      GuardExpr
 
@@ -2241,6 +2252,28 @@ RCSTAG    "$"{ID}":"[^\n$]+"$"
 					  BEGIN(Comment);
   					}
 
+  /* ----- handle arguments of the texref command ------- */
+
+<TexRefLabel>{TEXREFID}			{ // found argyment
+					  addTexRef();
+					  addOutput(yytext);
+					  BEGIN(Comment);
+					}
+<TexRefLabel>{DOCNL}			{ // missing argument
+					  warn(yyFileName,yyLineNr,
+					      "\\texref command has no label"
+					      );
+					  if (*yytext=='\n') yyLineNr++;
+					  addOutput('\n');
+					  BEGIN( Comment );
+					}
+<TexRefLabel>.				{ // invalid character for texref label
+					  warn(yyFileName,yyLineNr,
+					      "Invalid or missing texref label"
+					      );
+					  BEGIN(Comment);
+					}
+
   /* ----- handle argument of the copydoc command ------- */
 
 <CopyDoc><<EOF>>			|
@@ -2632,6 +2665,18 @@ static bool handleCite(const QCString &s)
   return FALSE;
 }
 
+static bool handleTexRef(const QCString &s)
+{
+  if (!g_spaceBeforeCmd.isEmpty())
+  {
+    addOutput(g_spaceBeforeCmd);
+    g_spaceBeforeCmd.resize(0);
+  }
+  addOutput("@"+s+" ");
+  BEGIN(TexRefLabel);
+  return FALSE;
+}
+
 static bool handleFormatBlock(const QCString &s)
 {
   addOutput("@"+s+" ");
diff --git a/src/config.xml b/src/config.xml
index 6cd79977..535e8483 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -1180,6 +1180,17 @@ FILE_VERSION_INFO = "cleartool desc -fmt \%Vn"
 ]]>
       </docs>
     </option>
+    <option type='list' id='LATEX_AUX_FILES' format='file'>
+      <docs>
+<![CDATA[
+ The \c LATEX_AUX_FILES tag can be used to specify one or more LaTeX \c aux files
+ containing the reference definitions. This must be a list of <code>.aux</code> files. The
+ <code>.aux</code> extension is automatically appended if omitted.
+ See also \ref cmdcite "\\texref" for info how to create references to
+ chapters, sections, tables, figures etc. of external \f$\mbox{\LaTeX}\f$ documents.
+]]>
+      </docs>
+    </option>
   </group>
   <group name='Messages' docs='Configuration options related to warning and progress messages'>
     <option type='bool' id='QUIET' defval='0'>
diff --git a/src/docbookvisitor.h b/src/docbookvisitor.h
index 6c7976ca..0ba1e67e 100644
--- a/src/docbookvisitor.h
+++ b/src/docbookvisitor.h
@@ -50,6 +50,7 @@ class DocbookDocVisitor : public DocVisitor
     void visit(DocIndexEntry *);
     void visit(DocSimpleSectSep *);
     void visit(DocCite *);
+    void visit(DocTexRef *){}
     //--------------------------------------
     // visitor functions for compound nodes
     //--------------------------------------
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 5bb28ea7..742744c8 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -2651,6 +2651,42 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont
 
 //---------------------------------------------------------------------------
 
+DocTexRef::DocTexRef(DocNode *parent,const QCString &target,const QCString &) //context)
+{
+  static uint numAuxFiles = Config_getList(LATEX_AUX_FILES).count();
+  m_parent = parent;
+  //printf("DocTexRef::DocTexRef(target=%s)\n",target.data());
+  ASSERT(!target.isEmpty());
+  TexRefInfo *texref = Doxygen::texrefDict->find(target);
+  //printf("texref=%p text='%s' numAuxFiles=%d\n",texref,texref?texref->text.data():"<null>",numAuxFiles);
+  if (numAuxFiles>0 && texref && !texref->text.isEmpty())
+  {
+    m_text         = texref->text;
+    m_ref          = texref->ref;
+    m_label        = texref->label;
+    //printf("TEXREF ==> m_label=%s,m_text=%s,m_ref=%s\n",
+    //    m_label.data(),m_text.data(),m_ref.data());
+    return;
+  }
+  m_text = target;
+  if (numAuxFiles==0)
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"\\texref command found but no aux files specified via LATEX_AUX_FILES!");
+  }
+  else if (texref==0)
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unable to resolve reference to `%s' for \\texref command",
+             qPrint(target));
+  }
+  else
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"\\texref command to '%s' does not have an associated number",
+             qPrint(target));
+  }
+}
+
+//---------------------------------------------------------------------------
+
 DocLink::DocLink(DocNode *parent,const QCString &target) 
 {
   m_parent = parent;
@@ -4937,6 +4973,38 @@ void DocPara::handleCite()
   doctokenizerYYsetStatePara();
 }
 
+void DocPara::handleTexRef()
+{
+  // get the argument of the texref command.
+  int tok=doctokenizerYYlex();
+  if (tok!=TK_WHITESPACE)
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"expected whitespace after %s command",
+        qPrint("texref"));
+    return;
+  }
+  doctokenizerYYsetStateTexRef();
+  tok=doctokenizerYYlex();
+  if (tok==0)
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected end of comment block while parsing the "
+        "argument of command %s\n", qPrint("texref"));
+    return;
+  }
+  else if (tok!=TK_WORD && tok!=TK_LNKWORD)
+  {
+    warn_doc_error(g_fileName,doctokenizerYYlineno,"unexpected token %s as the argument of %s",
+        tokToString(tok),qPrint("texref"));
+    return;
+  }
+  g_token->sectionId = g_token->name;
+  DocTexRef *texref = new DocTexRef(this,g_token->name,g_context);
+  m_children.append(texref);
+  //cite->parse();
+
+  doctokenizerYYsetStatePara();
+}
+
 int DocPara::handleXRefItem()
 {
   int retval=doctokenizerYYlex();
@@ -5747,6 +5815,9 @@ int DocPara::handleCommand(const QCString &cmdName)
     case CMD_CITE:
       handleCite();
       break;
+    case CMD_TEXREF:
+      handleTexRef();
+      break;
     case CMD_REF: // fall through
     case CMD_SUBPAGE:
       handleRef(cmdName);
diff --git a/src/docparser.h b/src/docparser.h
index f5167dc8..6fa5f1ef 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -305,6 +305,24 @@ class DocCite : public DocNode
 };
 
 
+/** Node representing a reference to an external LaTeX document */
+class DocTexRef : public DocNode
+{
+  public:
+    DocTexRef(DocNode *parent,const QCString &target,const QCString &context);
+    Kind kind() const            { return Kind_Ref; }
+    QCString ref() const         { return m_ref; }
+    QCString text() const        { return m_text; }
+    QCString label() const       { return m_label; }
+    void accept(DocVisitor *v) { v->visit(this); }
+
+  private:
+    QCString   m_ref;
+    QCString   m_text;
+    QCString   m_label;
+};
+
+
 /** Node representing a style change */
 class DocStyleChange : public DocNode
 {
@@ -1139,6 +1157,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode
     void handleInclude(const QCString &cmdName,DocInclude::Type t);
     void handleLink(const QCString &cmdName,bool isJavaLink);
     void handleCite();
+    void handleTexRef();
     void handleRef(const QCString &cmdName);
     void handleSection(const QCString &cmdName);
     void handleInheritDoc();
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index eb399067..e016ac05 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -150,6 +150,7 @@ void doctokenizerYYsetStateFile();
 void doctokenizerYYsetStatePattern();
 void doctokenizerYYsetStateLink();
 void doctokenizerYYsetStateCite();
+void doctokenizerYYsetStateTexRef();
 void doctokenizerYYsetStateRef();
 void doctokenizerYYsetStateInternalRef();
 void doctokenizerYYsetStateText();
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 7545cbaf..b15bd04e 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -338,6 +338,7 @@ PHPTYPE   [\\:a-z_A-Z0-9\x80-\xFF\-]+
 CITESCHAR [a-z_A-Z0-9\x80-\xFF]
 CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]*
 CITEID    {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)*
+TEXREFID  {CITESCHAR}{CITEECHAR}*("."{CITESCHAR}{CITEECHAR}*)*
 MAILADR   ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
 OPTSTARS  ("//"{BLANK}*)?"*"*{BLANK}*
 LISTITEM  {BLANK}*[-]("#")?{WS}
@@ -436,6 +437,7 @@ REFWORD_NOCV   {LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV}
 %x St_Pattern
 %x St_Link
 %x St_Cite
+%x St_TexRef
 %x St_Ref
 %x St_Ref2
 %x St_IntRef
@@ -1003,6 +1005,10 @@ REFWORD_NOCV   {LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV}
   			 g_token->name=yytext;
 			 return TK_WORD;
   		       }
+<St_TexRef>{TEXREFID}  { // label to refer to
+  			 g_token->name=yytext;
+			 return TK_WORD;
+  		       }
 <St_Cite>{BLANK}       { // white space
   			 unput(' ');
   			 return 0;
@@ -1470,6 +1476,11 @@ void doctokenizerYYsetStateCite()
   BEGIN(St_Cite);
 }
 
+void doctokenizerYYsetStateTexRef()
+{
+  BEGIN(St_TexRef);
+}
+
 void doctokenizerYYsetStateRef()
 {
   BEGIN(St_Ref);
diff --git a/src/docvisitor.h b/src/docvisitor.h
index 18fb7436..0856b7b2 100644
--- a/src/docvisitor.h
+++ b/src/docvisitor.h
@@ -70,6 +70,7 @@ class DocMscFile;
 class DocDiaFile;
 class DocLink;
 class DocCite;
+class DocTexRef;
 class DocRef;
 class DocFormula;
 class DocSecRefItem;
@@ -114,6 +115,7 @@ class DocVisitor
     virtual void visit(DocIndexEntry *) = 0;
     virtual void visit(DocSimpleSectSep *) = 0;
     virtual void visit(DocCite *) = 0;
+    virtual void visit(DocTexRef *) = 0;
     /*! @} */
 
     /*! @name Visitor functions for internal nodes 
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index d3554cff..52152de2 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -131,6 +131,7 @@ PageSDict       *Doxygen::pageSDict = 0;
 PageSDict       *Doxygen::exampleSDict = 0;
 SectionDict     *Doxygen::sectionDict = 0;        // all page sections
 CiteDict        *Doxygen::citeDict=0;              // database of bibliographic references
+TexRefDict      *Doxygen::texrefDict=0;            // database of external latex references
 StringDict       Doxygen::aliasDict(257);          // aliases
 QDict<void>      Doxygen::inputPaths(1009);
 FileNameDict    *Doxygen::includeNameDict = 0;     // include names
@@ -207,6 +208,7 @@ void clearAll()
   Doxygen::formulaNameDict->clear();
   Doxygen::tagDestinationDict.clear();
   delete Doxygen::citeDict;
+  delete Doxygen::texrefDict;
   delete Doxygen::mainPage; Doxygen::mainPage=0;
 }
 
@@ -10042,6 +10044,7 @@ void initDoxygen()
   Doxygen::tagDestinationDict.setAutoDelete(TRUE);
   Doxygen::dirRelations.setAutoDelete(TRUE);
   Doxygen::citeDict = new CiteDict(257);
+  Doxygen::texrefDict = new TexRefDict(1000);
   Doxygen::genericsDict = new GenericsSDict;
   Doxygen::indexList = new IndexList;
   Doxygen::formulaList = new FormulaList;
@@ -11362,6 +11365,10 @@ void parseInput()
   Doxygen::citeDict->generatePage();
   g_s.end();
 
+  g_s.begin("Resolving texref references...\n");
+  Doxygen::texrefDict->resolveReferences();
+  g_s.end();
+
   g_s.begin("Counting data structures...\n");
   countDataStructures();
   g_s.end();
diff --git a/src/doxygen.h b/src/doxygen.h
index b3467c13..29b39254 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -39,6 +39,7 @@ class Store;
 class QFileInfo;
 class BufStr;
 class CiteDict;
+class TexRefDict;
 class MemberDef;
 class GroupDef;
 class GroupSDict;
@@ -141,6 +142,7 @@ class Doxygen
     static QCString                  objDBFileName;
     static QCString                  entryDBFileName;
     static CiteDict                 *citeDict;
+    static TexRefDict               *texrefDict;
     static bool                      gatherDefines;
     static bool                      userComments;
     static IndexList                *indexList;
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index d1fb06c1..bc56bd8b 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -755,6 +755,13 @@ void HtmlDocVisitor::visit(DocCite *cite)
   }
 }
 
+void HtmlDocVisitor::visit(DocTexRef *texref)
+{
+  if (m_hide) return;
+  //m_t << "TEXREF: ";
+  filter(texref->text());
+}
+
 
 //--------------------------------------
 // visitor functions for compound nodes
diff --git a/src/htmldocvisitor.h b/src/htmldocvisitor.h
index 2ff9f75e..1fe01105 100644
--- a/src/htmldocvisitor.h
+++ b/src/htmldocvisitor.h
@@ -55,6 +55,7 @@ class HtmlDocVisitor : public DocVisitor
     void visit(DocIndexEntry *);
     void visit(DocSimpleSectSep *);
     void visit(DocCite *);
+    void visit(DocTexRef *);
 
     //--------------------------------------
     // visitor functions for compound nodes
diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h
index 24f74ce7..65724979 100644
--- a/src/latexdocvisitor.h
+++ b/src/latexdocvisitor.h
@@ -55,6 +55,7 @@ class LatexDocVisitor : public DocVisitor
     void visit(DocIndexEntry *);
     void visit(DocSimpleSectSep *);
     void visit(DocCite *);
+    void visit(DocTexRef *){}
 
     //--------------------------------------
     // visitor functions for compound nodes
diff --git a/src/mandocvisitor.h b/src/mandocvisitor.h
index d248c873..f9f146f5 100644
--- a/src/mandocvisitor.h
+++ b/src/mandocvisitor.h
@@ -52,6 +52,7 @@ class ManDocVisitor : public DocVisitor
     void visit(DocIndexEntry *);
     void visit(DocSimpleSectSep *);
     void visit(DocCite *);
+    void visit(DocTexRef *){}
 
     //--------------------------------------
     // visitor functions for compound nodes
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index ef5cbc22..9f31293c 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -311,6 +311,7 @@ public:
   void visit(DocIndexEntry *);
   void visit(DocSimpleSectSep *);
   void visit(DocCite *);
+  void visit(DocTexRef *){}
 
   //--------------------------------------
   // visitor functions for compound nodes
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index d1dbb742..3a0938e4 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -217,6 +217,13 @@ class PrintDocVisitor : public DocVisitor
              cite->ref().data(),cite->file().data(),cite->anchor().data(),
              cite->text().data());
     }
+    void visit(DocTexRef *texref)
+    {
+      indent_leaf();
+      printf("<texref ref=\"%s\" text=\"%s\" />\n",
+             texref->ref().data(),
+             texref->text().data());
+    }
 
     //--------------------------------------
     
diff --git a/src/rtfdocvisitor.h b/src/rtfdocvisitor.h
index 1e927e7e..d19dce4d 100644
--- a/src/rtfdocvisitor.h
+++ b/src/rtfdocvisitor.h
@@ -52,6 +52,7 @@ class RTFDocVisitor : public DocVisitor
     void visit(DocIndexEntry *);
     void visit(DocSimpleSectSep *);
     void visit(DocCite *);
+    void visit(DocTexRef *){}
 
     //--------------------------------------
     // visitor functions for compound nodes
diff --git a/src/textdocvisitor.h b/src/textdocvisitor.h
index 1bbc3574..b003bf8a 100644
--- a/src/textdocvisitor.h
+++ b/src/textdocvisitor.h
@@ -52,6 +52,7 @@ class TextDocVisitor : public DocVisitor
     void visit(DocIndexEntry *)   {}
     void visit(DocSimpleSectSep *){}
     void visit(DocCite *)         {}
+    void visit(DocTexRef *)       {}
 
     //--------------------------------------
     // visitor functions for compound nodes
diff --git a/src/xmldocvisitor.h b/src/xmldocvisitor.h
index c65688ff..b83a67c8 100644
--- a/src/xmldocvisitor.h
+++ b/src/xmldocvisitor.h
@@ -53,6 +53,7 @@ class XmlDocVisitor : public DocVisitor
     void visit(DocIndexEntry *);
     void visit(DocSimpleSectSep *);
     void visit(DocCite *);
+    void visit(DocTexRef *){}
 
     //--------------------------------------
     // visitor functions for compound nodes
