这是我的 knitr.Rnw
文件:
\documentclass{article}
\usepackage{hyperref}
\hypersetup{}
\begin{document}
\let\ref\autoref
<<plot,fig.cap='try'>>=
if(rnorm(1) > 0) x = rbinom(1, 100, 0.5) else x = 0
big_number = x > 0
if(big_number) plot(1:x)
text=paste('I wish I could use it',x,'times a day!')
@
This LaTeX is fun! \Sexpr{if(big_number) text} \ref{fig:plot}
\end{document}
这是我的问题:当big_number
是时TRUE
,pdf 就会如我喜欢的那样:
另一方面,如果big_number
是FALSE
,则 pdf 将显示损坏,\ref{}
如下所示:
有什么方法可以隐藏丑陋??
或使的调用\ref{fig:plot}
取决于big_number
或存在plot
?
答案1
从 LaTeX 方面,你可以删除??使用etoolbox
的\HyRef@autosetref
:
\documentclass{article}
\usepackage{hyperref,etoolbox}
\AtBeginDocument{\let\ref\autoref}
\makeatletter
% \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\patchcmd{\HyRef@autosetref}{??}{\ignorespaces}{}{}
\makeatother
\begin{document}
\section{A section}\label{sec:section}
See \autoref{sec:section} or \autoref{sec:sections}.
\end{document}
我认为最好以某种方式包含\ref
内部的条件放置\Sexpr
。我对 knitr 不够熟悉,不知道该怎么做(如果可能的话)。