如何从 \cite[optional string]{key} 中隐藏“可选字符串”

如何从 \cite[optional string]{key} 中隐藏“可选字符串”

如何在\cite[optional string]{key}不删除“可选字符串”的情况下隐藏它?是否有一个全局开关可以禁用打印“可选字符串”?

\documentclass{article}

\begin{document}

\cite[page 1]{lamport94}

\begin{thebibliography}{9}
    \bibitem{lamport94}
    Leslie Lamport,
    \emph{\LaTeX: a document preparation system},
    Addison Wesley, Massachusetts,
    2nd edition,
    1994.
\end{thebibliography}

\end{document}

其结果是:

在此处输入图片描述

但我想要:

在此处输入图片描述

答案1

\cite后面跟着时[,它会执行\@tempswatrue,否则它会执行\@tempswafalse。当\if@tempswa返回 true 时,表示应该排版可选参数。

因此改为\@tempswatrue即可\@tempswafalse

\documentclass{article}

\usepackage{xpatch}
\makeatletter
\xpatchcmd{\cite}{\@tempswatrue}{\@tempswafalse}{}{}
\makeatother

\begin{document}

\cite[page 1]{lamport94}

\begin{thebibliography}{9}
    \bibitem{lamport94}
    Leslie Lamport,
    \emph{\LaTeX: a document preparation system},
    Addison Wesley, Massachusetts,
    2nd edition,
    1994.
\end{thebibliography}

\end{document}

在此处输入图片描述

答案2

这是另一种选择。这里的想法是重新定义\@cite以拒绝排版注释。定义了两个命令:\Rejectcitenote,用于丢弃可选参数,以及\Alllowcitenote,好吧,允许排版可选参数。这些命令可以随意使用:

\documentclass{article}

\makeatletter
\newcommand\Rejectcitenote{\def\@cite##1##2{[{##1}]}}
\newcommand\Allowcitenote{\def\@cite##1##2{[{##1\if@tempswa , ##2\fi}]}}
\makeatother

\begin{document}

\Rejectcitenote
\cite[page 1]{lamport94}
\Allowcitenote
\cite[page 1]{lamport94}

\begin{thebibliography}{9}
    \bibitem{lamport94}
    Leslie Lamport,
    \emph{\LaTeX: a document preparation system},
    Addison Wesley, Massachusetts,
    2nd edition,
    1994.
\end{thebibliography}

\end{document}

在此处输入图片描述

相关内容