尽量减少单独的 pdf 和单个 pdf 版本的工作量;ref 和 url 问题

尽量减少单独的 pdf 和单个 pdf 版本的工作量;ref 和 url 问题

我想创建包含许多部分的 LaTeX 内容。我将任何一个将所有部分排版在一起以获得一个 PDF 或者分别排版。如果它们是一起排版的,那么我希望能够使用标签/引用来创建链接。如果它们是单独排版的,那么我会得到相关 PDF 的链接,而不是相应部分的链接。

我已经启动成功了,但我不确定接下来的步骤。代码如下:

\documentclass{article}
\usepackage{filecontents}
\begin{document}

\begin{filecontents}{a.tex}
\section{a}
\label{a-label}
Text for a
See also \mychoose{(\ref{b-label})}{\url{./only-b.pdf}}
\end{filecontents}

\begin{filecontents}{b.tex}
\section{b}
\label{b-label}
Text for b
See also \mychoose{(\ref{a-label})}{\url{./only-a.pdf}}
\end{filecontents}

\begin{filecontents}{only-a.tex}
\documentclass{article}
\usepackage{hyperref}
\newcommand\mychoose[2]{#2}
\begin{document}
\input a.tex
\end{document}\end
\end{filecontents}

\begin{filecontents}{only-b.tex}
\documentclass{article}
\usepackage{hyperref}
\newcommand\mychoose[2]{#2}
\begin{document}
\input b.tex
\end{document}\end
\end{filecontents}

\begin{filecontents}{together.tex}
\documentclass{article}
\usepackage{url}
\newcommand\mychoose[2]{#1}
\begin{document}
\input a.tex
\input b.tex
\end{document}\end
\end{filecontents}
\end{document}\end

排版一次即可看到文件 a.tex、b.tex、only-a.tex、only-b.tex 和 together.tex。

这样我就可以创建包含两个部分的文档(通过排版 together.tex)。我可以创建仅包含“a”部分的文档(通过排版 only-a.tex)。网址命令不起作用。此外,使用 mychoose 命令需要进行大量输入,如上所示。欢迎提出建议!

笔记:

  1. 文件“a.tex”和“b.tex”相似(并且它们之间的差异很容易看出)。
  2. 文件“together.tex”、“only-a.tex”和“only-b.tex”类似(它们的区别在于输入命令的数量不同以及#1 与 #2)。
  3. 我可以使用计算机程序创建“唯一”文档,因此不必担心重复。

欢迎有更好的想法。

谢谢,马克

答案1

在我看来,外部引用应该用和来制作xr-hyper\href{filename#ext-label}{some-text}其中一些文本与文件名(“url”)相同。

对所有(子)文档使用通用样式文件可以减少打字量,而且在我看来,\mychoose这里不需要命令。

\documentclass{article}
\usepackage{filecontents}

\begin{filecontents}{mycommon.sty}
\usepackage{xr-hyper}
\usepackage{hyperref}
\end{filecontents}

\begin{document}

\begin{filecontents}{a.tex}
\section{a}
\label{a-label}
Text for a
See also \href{only-b.pdf#b-label}{only-b.pdf}
\end{filecontents}

\begin{filecontents}{b.tex}
\section{b}
\label{b-label}
Text for b
See also \href{only-a.pdf#a-label}{only-a.pdf}
\end{filecontents}

\begin{filecontents}{only-a.tex}
\documentclass{article}
\usepackage{mycommon}
\begin{document}
\input a.tex
\end{document}
\end{filecontents}

\begin{filecontents}{only-b.tex}
\documentclass{article}
\usepackage{mycommon}
\begin{document}
\input b.tex
\end{document}\end
\end{filecontents}

\begin{filecontents}{together.tex}
\documentclass{article}
\usepackage{mycommon}
\begin{document}
\input a.tex
\input b.tex
\end{document}
\end{filecontents}
\end{document}

更新:有条件\ifinternalref

\documentclass{article}
\usepackage{filecontents}

\begin{filecontents}{mycommon.sty}
\newif\ifinternalref
\internalreffalse % First disable the internal references
\newcommand{\quickref}[2]{%
  \ifinternalref%
  \cref{#1}%  or just \ref{#1}
  \else
  \href{#2\##1}{#2}%
  \fi%
}%

\usepackage{hyperref}
\usepackage{cleveref} % Last package! 
\end{filecontents}

\usepackage{mycommon}


\begin{document}

\begin{filecontents}{a.tex}
\section{a}
\label{a-label}
Text for a

See also \quickref{b-label}{only-b.pdf} and \quickref{einstein}{only-b.pdf}

\end{filecontents}

\begin{filecontents}{b.tex}
\section{b}
\label{b-label}
Text for b

\begin{equation}
  E = mc^2 \label{einstein}
\end{equation}

See \quickref{a-label}{only-a.pdf} and this internal reference \cref{einstein}
\end{filecontents}

\begin{filecontents}{only-a.tex}
\documentclass{article}
\usepackage{mycommon}
\begin{document}
\input a.tex
\end{document}
\end{filecontents}

\begin{filecontents}{only-b.tex}
\documentclass{article}
\usepackage{mycommon}
\begin{document}
\input b.tex
\end{document}
\end{filecontents}

\begin{filecontents}{together.tex}
\documentclass{article}
\usepackage{mycommon}
\internalreftrue  % Enable the internal references since all is combined
\begin{document}
\input a.tex
\clearpage % Just for testing
\input b.tex
\end{document}
\end{filecontents}
\end{document}

相关内容