gpt4 book ai didi

r - 如何系统地更改 knitr\label{} 行为以添加超链接 anchor

转载 作者:行者123 更新时间:2023-12-01 03:16:55 24 4
gpt4 key购买 nike

我要改knitr创建 figure 时的行为LaTeX 中的环境调用不同的LaTeX命令比 \label{} ,例如 \alabel{}我在哪里定义 \alabel运行 \label{foo}以及 \hypertarget{foo}{}使用 hyperref LaTeX包裹。我这样做是为了在 Web 浏览器中构造一个 URL 以到达 .pdf 中的特定位置。使用 pdflatex 创建的文档,例如http://.../my.pdf#nameddest=foo .

我怎样才能覆盖 \label{}或发出额外的 \hypertarget{same label used by \label{}在数字?

这是在 .Rnw 的上下文中。文件。我希望 anchor 出现在 figure 中环境 for optimal positioning of the cursor when jumping into the .pdf` 文件。

更新

在重新考虑这一点时,我认为最好不要生成 hypertarget anchor ,但写一个R解析 LaTeX 的函数aux文件以检索引用的页码(\newlabel 行)以生成所需的 pdf 的 URL文件。在 .Rnw.Rmd我可以在一个句子中调用这个函数来插入计算的 URL。

更新

毕竟我决定采用@werner 的出色方法,该方法完美无缺。对于任何对 R 感兴趣的人- 不需要使用 hypertarget 的方法,这里是 LaTeX需要为其设置的代码 - 这处理物理页码与逻辑页码不匹配的情况(例如,使用诸如章节号之类的逻辑数字 - 章节内的页面。

% Creates .pag file mapping absolute page numbers to logical page
% numbers; works with R function latexRef

\newwrite\pgfile
\immediate\openout\pgfile=\jobname .pag
\newcounter{abspage}
\setcounter{abspage}{0}

\useackage{everypage}
\AddEverypageHook{%
\addtocounter{abspage}{1}
\immediate\write\pgfile{\thepage, \theabspage}%
}
\AtEndDocument{\clearpage\immediate\closeout\pgfile}

这是 R.aux, .pag 中进行查找的函数文件:
## Create hyperlink to appropriate physical page in a pdf document
## created by pdflatex given the .aux and .pag file. Absolute and
## named page numbers are store in the .pag file created by hslide.sty

latexRef <- function(label, base, name, path='doc/',
blogpath='/home/harrelfe/R/blog/blogdown/static/doc/',
lang=c('markdown', 'latex')) {
lang <- match.arg(lang)
aux <- paste0(blogpath, base, '.aux')
if(! file.exists(aux))
stop(paste('no file named', aux))
path <- paste0(path, base, '.pdf')
pag <- paste0(blogpath, base, '.pag')
pagemap <- NULL
if(file.exists(pag)) {
p <- read.table(pag, sep=',')
pagemap <- trimws(p[[2]])
names(pagemap) <- trimws(p[[1]])
}

r <- readLines(aux)
w <- paste0('\\\\newlabel\\{', label, '\\}')
i <- grepl(w, r)
if(! any(i)) stop(paste('no label =', label))
r <- r[i][1]
r <- gsub('\\{', ',', r)
r <- gsub('\\}', ',', r)
x <- scan(text=r, sep=',', what=character(0), quiet=TRUE)
section <- x[5]
if(section != '') section <- paste0(' Section ', section)
page <- trimws(x[7])
if(length(pagemap)) page <- pagemap[page]
url <- paste0('http://fharrell.com/', path, '#page=', page)
switch(lang,
markdown = paste0('[', name, section, '](', url, ')'),
latex = paste0('\\href{', url, '}{', name, section, '}')
)
}

最佳答案

您可以将以下内容添加到您的 LaTeX 序言中,以全局替换 \label\label 的组合-和- \hypertarget通过以下方式:

---
title: 'A title'
author: 'An author'
date: 'A date'
output:
pdf_document:
keep_tex: true
header-includes:
- \AtBeginDocument{
\let\oldlabel\label
\renewcommand{\label}[1]{\oldlabel{#1}\hypertarget{#1}{}}
}
---

See Figure \ref{fig:figure}.

\begin{figure}
\caption{A figure caption}
\label{fig:figure}
\end{figure}

关于r - 如何系统地更改 knitr\label{} 行为以添加超链接 anchor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48322282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com