在 Lyx 中使用 autoref 更改 refname 时出现问题

在 Lyx 中使用 autoref 更改 refname 时出现问题

更新 1 - @Andrew 提供了非常有用的部分答案。如果在 latex 版本中将 \renewcommands 放在 begin document 之后,它们就会起作用。所以真正的问题是为什么 lyx 版本中的序言不这样做。看来 \AtBeginDocument 不能正常工作。

更新 2-包含最小示例。

更新 3 - 看来升级到 LyX 2.06 是解决此问题的最佳方法。默认论文模板中的错误已在该版本中修复。感谢 @scottkosty 指出这一点。


我在 Lyx 2.02 中使用默认论文模板,但交叉引用存在问题。在 Lyx 生成的 PDF 中,我看到交叉引用为“subsubsection 1.3.2.3”,但我想要“sec. 1.3.2.3”。我相信我只是从 Latex 序言中更改了以下代码中的名称,但我尝试了许多不同的方法来执行此操作,生成的 PDF 中忽略了对名称的任何更改(请参阅下面的最小示例)。您知道我做错了什么吗?

前导码是

\AtBeginDocument{%
\addto\extrasenglish{
\renewcommand{\equationautorefname}{\hspace{-\abc}}
\renewcommand{\sectionautorefname}{sec.\negthinspace}
\renewcommand{\subsectionautorefname}{sec.\negthinspace}
\renewcommand{\subsubsectionautorefname}{sec.\negthinspace}
\renewcommand{\figureautorefname}{Fig.\negthinspace}
\renewcommand{\tableautorefname}{Tab.\negthinspace}
}
}

作为一个最小示例,我复制了默认的论文模板前言并将其粘贴到一个空的新文档中。我添加了一个子小节及其引用。它应该显示为“sec. 0.0.0.1”,但显示为“subsubsection 0.0.0.1”。Lyx 代码是

#LyX 2.0 created this file. For more info see http://www.lyx.org/
\lyxformat 413
\begin_document
\begin_header
\textclass scrbook
\begin_preamble
% increase link area for cross-references and autoname them
\AtBeginDocument{\renewcommand{\ref}[1]{\mbox{\autoref{#1}}}}
\newlength{\abc}
\settowidth{\abc}{\space}
\AtBeginDocument{%
\addto\extrasenglish{
 \renewcommand{\equationautorefname}{\hspace{-\abc}}
 \renewcommand{\sectionautorefname}{sec.\negthinspace}
 \renewcommand{\subsectionautorefname}{sec.\negthinspace}
 \renewcommand{\subsubsectionautorefname}{sec.\negthinspace}
 \renewcommand{\figureautorefname}{Fig.\negthinspace}
 \renewcommand{\tableautorefname}{Tab.\negthinspace}
}
}
\end_preamble
\use_default_options true
\maintain_unincluded_children false
\language british
\language_package default
\inputencoding auto
\fontencoding global
\font_roman default
\font_sans default
\font_typewriter default
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100
\font_tt_scale 100

\graphics default
\default_output_format default
\output_sync 0
\bibtex_command default
\index_command default
\paperfontsize default
\spacing single
\use_hyperref true
\pdf_bookmarks true
\pdf_bookmarksnumbered false
\pdf_bookmarksopen false
\pdf_bookmarksopenlevel 1
\pdf_breaklinks false
\pdf_pdfborder false
\pdf_colorlinks false
\pdf_backref false
\pdf_pdfusetitle true
\papersize default
\use_geometry false
\use_amsmath 1
\use_esint 1
\use_mhchem 1
\use_mathdots 1
\cite_engine basic
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\use_refstyle 0
\index Index
\shortcut idx
\color #008000
\end_index
\secnumdepth 3
\tocdepth 3
\paragraph_separation skip
\defskip smallskip
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header

\begin_body

\begin_layout Standard
Minimal example of autoref problem.
 Here is a reference to a subsubsection - 
\begin_inset CommandInset ref
LatexCommand ref
reference "sub:Test-subsubsection"

\end_inset


\end_layout

\begin_layout Subsubsection
\begin_inset CommandInset label
LatexCommand label
name "sub:Test-subsubsection"

\end_inset

Test subsubsection
\end_layout

\end_body
\end_document

导出的 latex 代码如下:

%% LyX 2.0.2 created this file.  For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[oneside,british]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\setcounter{secnumdepth}{3}
\setcounter{tocdepth}{3}
\setlength{\parskip}{\smallskipamount}
\setlength{\parindent}{0pt}
\usepackage{babel}
\usepackage[unicode=true,pdfusetitle,
 bookmarks=true,bookmarksnumbered=false,bookmarksopen=false,
 breaklinks=false,pdfborder={0 0 1},backref=false,colorlinks=false]
 {hyperref}

\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
% increase link area for cross-references and autoname them
\AtBeginDocument{\renewcommand{\ref}[1]{\mbox{\autoref{#1}}}}
\newlength{\abc}
\settowidth{\abc}{\space}
\AtBeginDocument{%
\addto\extrasenglish{
 \renewcommand{\equationautorefname}{\hspace{-\abc}}
 \renewcommand{\sectionautorefname}{sec.\negthinspace}
 \renewcommand{\subsectionautorefname}{sec.\negthinspace}
 \renewcommand{\subsubsectionautorefname}{sec.\negthinspace}
 \renewcommand{\figureautorefname}{Fig.\negthinspace}
 \renewcommand{\tableautorefname}{Tab.\negthinspace}
}
}

\makeatother

\begin{document}
Minimal example of autoref problem. Here is a reference to a subsubsection
- \ref{sub:Test-subsubsection}


\subsubsection{\label{sub:Test-subsubsection}Test subsubsection}
\end{document}

答案1

似乎没有必要使用两个AtBeginDocument命令(而且可能有问题)。在 LyX 的 LaTeX 序言中使用以下内容对我来说是可行的:

\newlength{\abc}
\settowidth{\abc}{\space}
\AtBeginDocument{%
\renewcommand{\ref}[1]{\mbox{\autoref{#1}}}
\renewcommand{\equationautorefname}{\hspace{-\abc}}
\renewcommand{\sectionautorefname}{sec.\negthinspace}
\renewcommand{\subsectionautorefname}{sec.\negthinspace}
\renewcommand{\subsubsectionautorefname}{sec.\negthinspace}
\renewcommand{\figureautorefname}{Fig.\negthinspace}
\renewcommand{\tableautorefname}{Tab.\negthinspace}
}

答案2

您所拥有的对我来说很好用,尽管我使用的\autoref是而不是,\ref而且我只是使用该类,article因为我没有LyX安装。

我怀疑你的问题可能是 lyx 覆盖了你对\sectionautorefname等的新定义。我建议将你的 renewcommands 放在后面\begin{document},看看是否能解决问题。

\begin{document}
    \renewcommand{\equationautorefname}{\hspace{-\abc}
    \renewcommand{\sectionautorefname}{fred.\negthinspace}
    \renewcommand{\subsectionautorefname}{sec.\negthinspace}
    \renewcommand{\subsubsectionautorefname}{sec.\negthinspace}
    \renewcommand{\figureautorefname}{Fig.\negthinspace}
    \renewcommand{\tableautorefname}{Tab.\negthinspace} }

    \section{1 section}\label{sec1}
    \section{2 section}\label{sec2}

    See \autoref{sec1} and \autoref{sec2}.
\end{document}

相关内容