我的目标是创建一个函数,以交互方式将包(、等)Emacs Lisp
提供的宏转换为标准 LaTeX:cleveref
\cref
\Cref
例如:
\cref{sec:1} --> section~\ref{sec:1}.
为了实现这个结果,我考虑以这种方式重新定义 cleveref 提供的宏:
\documentclass{article}
\usepackage{hyperref}
\usepackage{cleveref}
\NewCommandCopy{\oldcref}{\cref}
\RenewDocumentCommand{\cref}{ m }{%
\typeout{\oldcref{#1}}
\oldcref{#1}}
\begin{document}
\section{First section\label{sec:1}}
\cref{sec:1}
\section{Second section\label{sec:2}}
\cref{sec:1,sec:2}
\end{document}
这将打印在日志文件中:
\oldcref {sec:1}
我需要打印它:
\cref{sec:1} --> section~\ref{sec:1}
更重要的是:\cref{sec:1,sec:2}
应该纳入文件
\cref{sec:1,sec:2} --> sections~\ref{sec:1} and \ref{sec:2}
中.log
。
像这样的输出也可能是合适的(也许更容易获得):
\cref{sec:1,sec:2} --> sections 1 and 2
这是可行的吗?它是否是一个足够强大的解决方案,可用于科学文档编辑工作流程?
我开始考虑这样的解决方案,因为在很多情况下,软件包poorman
提供的选项cleveref
不起作用(Cleveref 的 poorman 选项不适用于 hyperref)。
在文件中(或专用的辅助文件中)拥有这样的列表.log
将允许它用于将定义的宏转换为cleveref
标准LaTeX
,我相信它对很多人都有用。
就目前而言,只需扩展\cref
和\Cref
宏对我来说就足够了。
(最终目标可能是一个宏,它将要扩展的宏作为参数,然后逐一进行适当的重新定义:
\expandCleverefs{\cref,\Cref, etc.}
但以防万一,我会提出另一个问题。)
笔记。我尝试提供所有必要的信息以“帮助您帮助我”。在寻求帮助之前,我尝试使用我掌握的所有资源(Google、手册、AI......)来解决问题,但我有局限性。我非常尊重您为帮助我而投入的时间,并对此心怀感激。
已添加注释。我的工作是编辑科学家撰写的科学论文,每个科学家的用法LaTeX
都不同。我的任务是将它们标准化,以符合我们出版的期刊的风格。从实用角度来说,我不需要做 选项所做的所有事情cleveref
,poorman
而是重新定义\cref
和\Cref
,它们是包的主要宏。由于我可以使宏转换具有交互性,因此在识别潜在错误时应该不会遇到任何问题。从生成辅助文件的编译过渡到包含文件中宏的使用与它们在 中的“效果”LaTeX
之间的关联列表的方法是我想到的最简单的想法,并且与“poorman”选项的方法非常相似。.tex
.pdf