我想创建包含许多部分的 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 命令需要进行大量输入,如上所示。欢迎提出建议!
笔记:
- 文件“a.tex”和“b.tex”相似(并且它们之间的差异很容易看出)。
- 文件“together.tex”、“only-a.tex”和“only-b.tex”类似(它们的区别在于输入命令的数量不同以及#1 与 #2)。
- 我可以使用计算机程序创建“唯一”文档,因此不必担心重复。
欢迎有更好的想法。
谢谢,马克
答案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}