我正在引用另一个文档 (requirements.tex) 中枚举列表中的项目。我可以这样做,但我得到了无法删除的无关信息。
要求.tex:
\documentclass{article}
\usepackage{graphicx}
\usepackage{mathtools}
\usepackage{hyperref}
\usepackage{enumerate}
\begin{document}
\section{Engineering Requirements}
\begin{enumerate}
\item The system shall turn trees into money. \label{Req:treesToMoney}
\item The system must be able to process five trees per second. \label{Req:treeRate}
\end{enumerate}
\end{document}
设计.tex:
\documentclass[hidelinks]{article}
\usepackage{graphicx}
\usepackage{geometry}
\usepackage{fancyhdr}
\usepackage{amsmath, amsthm ,amssymb}
\usepackage{graphicx}
\usepackage{xr}
\externaldocument{../requirements/Requirements}
\begin{document}
Requirement \ref{Req:treesToMoney} is a functional requirement.
\end{document}
design.tex 的输出如下:
要求 1工程要求项目 1 是功能要求。
这个输出看起来很糟糕。我不仅得到了多余的部分名称和 Item.#,而且这些信息没有用空格分隔。
有没有办法格式化 \ref 的输出?可能要排除无关信息,但至少要用空格分隔不同的信息。
答案1
这个包xr
是在很久之前编写的hyperref
。这个包改变了标签在文件中的存储方式.aux
,因此xr
可以找到不合适的值并尽其所能。
hyperref
如果在文件中使用Requirements.tex
,那么您也应该在中使用它,design.tex
并使用xr-hyper
而不是xr
。
如果你真的不想hyperref
在 中使用design.tex
,你可以修改 的工作原理,xr
以便\newlabel
调用正确的方法。design.tex
修改 的内部宏的示例xr
:
\documentclass{article}
\usepackage{xr}
\makeatletter
\long\def\XR@test#1#2#3#4\XR@{%
\ifx#1\newlabel
\mod@newlabel{\XR@prefix#2}#3{}{}\@nil% changed line
\else\ifx#1\@input
\edef\XR@list{\XR@list#2\relax}%
\fi\fi
\ifeof\@inputcheck\expandafter\XR@aux
\else\expandafter\XR@read\fi}
% new macro
\def\mod@newlabel#1#2#3#4\@nil{\newlabel{#1}{{#2}{#3}}}
\makeatother
\externaldocument{Requirements}
\begin{document}
Requirement \ref{Req:treesToMoney} is a functional requirement.
\end{document}
答案2
文档Requirements.tex
加载包nameref
(通过包hyperref
),该包会更改文件中标签数据的布局.aux
。文档design.tex
不使用nameref
并且包xr
不知道nameref
。有时xr-hyper
可以使用。在包中,zref-xr
我重写了算法以支持从 导入标签zref
和将 LaTeX 标签导入zref
和/或支持包nameref
/ hyperref
、titleref
和 的LaTeX 标签ntheorem
。
示例文件design.tex
:
\documentclass{article}
\usepackage{graphicx}
\usepackage{geometry}
\usepackage{fancyhdr}
\usepackage{amsmath, amsthm ,amssymb}
\usepackage{graphicx}
\usepackage{zref-xr}
\zxrsetup{%
tozreflabel=false, % not needed, since `zref` is not used otherwise
toltxlabel=true, % classical LaTeX labels that can be referenced with \ref, \pageref
}
\zexternaldocument*{Requirements}% star form: only LaTeX labels are imported
\begin{document}
Requirement \ref{Req:treesToMoney} is a functional requirement.
\end{document}