从 `\cite[p.~11]{kim2011}` 输出中隐藏附加引用参数“p. 11”

从 `\cite[p.~11]{kim2011}` 输出中隐藏附加引用参数“p. 11”

我使用引用中的附加字段(例如\cite[§3.3]{Knu86})链接到我所引用的书籍/论文的特定部分。但是,我不能将这种格式用于我的论文。

是否可以在输出中隐藏附加文本(例如 §3.3),同时将其保留在实际引用中?例如,通过\cite某种方式重新定义?

平均能量损失

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
  @book{Knu86,
    author = {Knuth, Donald E.},
    year = {1986},
    title = {The \TeX book},
  }
\end{filecontents}

\begin{document}

\section{Introduction}

This works, yeah! \cite[p. 83]{Knu86}

\bibliographystyle{alpha}
\bibliography{\jobname}
\end{document}

答案1

是的,你可以!以下两行代码可以解决问题。

\let\oldcite\cite
\renewcommand{\cite}[2][]{\oldcite{#2}}

第一行将 -macro 的定义复制\cite到宏\oldcite。使用相同数量的参数(两个)和一个可选值更新命令,同时仅将第二个参数(引用键)解析为原始cite-macro,而忽略第一个参数,基本上用 替换了\cite[...]{bib-key}所有\cite{bib-key}

完整的文件如下所示。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
  @book{Knu86,
    author = {Knuth, Donald E.},
    year = {1986},
    title = {The \TeX book}
  }
\end{filecontents}
\let\oldcite\cite
\renewcommand{\cite}[2][]{\oldcite{#2}}

\begin{document}

\section{Introduction}

This works, yeah! \cite[p. 83]{Knu86}

\bibliographystyle{alpha}
\bibliography{\jobname}
\end{document}

我还从标题的 bib-entry-line 中删除了逗号,因为它阻止 BiBTeX 在我的系统中正确解析文件。

答案2

如果您不使用额外的引用包,因此使用内核中的定义,您可以重新定义放置引用和后注的内部宏,以简单地删除后注

\documentclass{article}
\usepackage[utf8]{inputenc}

\makeatletter
\def\@cite#1#2{[{#1}]}
\makeatother

\begin{filecontents}{\jobname.bib}
@book{Knu86,
  author = {Knuth, Donald E.},
  year   = {1986},
  title  = {The \TeX book},
}
\end{filecontents}

\begin{document}
This works, yeah! \cite[p.~83]{Knu86}

\bibliographystyle{alpha}
\bibliography{\jobname}
\end{document}

该宏的原始定义latex.ltx

\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}

#1引用标签和#2后记在哪里(以及\if@tempswa后记是否存在的测试)。

相关内容