如何在不使用括号的情况下引用选定的 linguex 示例编号?编辑希望我不要在文本中放在括号内的示例编号周围使用括号。就像以下示例一样:
\documentclass{minimal}
\usepackage{linguex}
%\renewcommand{\theExLBr}{} %removes the left bracket in examples
%\renewcommand{\theExRBr}{} %removes the right bracket in examples
\begin{document}
\ex. example A\label{A}
\ex. example B\label{B}
\textbf{Required:} example in \ref{A} (and example in 2).\\
\textbf{Unacceptable:} example in \ref{A} (and example in \ref{B}).
\end{document}
使用 \theExLBr & \theExRBr 命令(未在上面的 MWE 中选择)对其进行全局定义,并仅在 MWE 中为 (1) 等示例添加括号,这是一个非常不舒服的选择(手稿中有数百个像 (1) 这样的示例和几个像 2 这样的示例)。所以,我在考虑一种在选定示例周围抑制 () 的方法。我是否可以以某种方式对单个示例使用 \theExLBr & \theExRBr 命令(这基本上会给出所需的结果)或类似效果?该文件必须使用 XeLaTeX 生成。
答案1
由于 TeX 无法知道您是否在括号内,因此您需要一个新的命令来引用括号内的引用,该命令将“删除”多余的括号。我们将此命令称为\pref
类似于\ref
但不会在数字周围加上括号的命令。但由于添加东西比删除东西更容易,我们将重新定义\ExNoLBr
和\ExNoRBr
有条件地添加括号。由于标签已写入文件.aux
,我们需要保护这些命令不在那里扩展,以便条件可以在解析引用时发挥其魔力。
\documentclass{article}
\usepackage{linguex}
\newif\ifparens\parensfalse
\makeatletter
\renewcommand{\theExNo}{\protect\theExLBr\arabic{ExNo}\protect\theExRBr}
\renewcommand{\theSubExNo}{%
\hbox{\if@noftnote\protect\theExLBr\Exarabic{ExNo}\firstrefdash
\Exalph{SubExNo}\protect\theExRBr
\else
\protect\theFnExLBr\Exroman{FnExNo}\firstrefdash%
\Exalph{SubExNo}\protect\theFnExRBr
\fi}}
\renewcommand{\theSubSubExNo}{%
\hbox{\if@noftnote\protect\theExLBr%
\Exarabic{ExNo}\firstrefdash\Exalph{SubExNo}\secondrefdash
\Exroman{SubSubExNo}\protect\theExRBr%
\else\protect\theFnExLBr\Exroman{FnExNo}\firstrefdash
\Exalph{SubExNo}\secondrefdash\Exarabic{SubSubExNo}\protect\theFnExRBr\fi}}%
\makeatother
\renewcommand\theExLBr{\ifparens\else(\fi}
\renewcommand\theExRBr{\ifparens\else)\fi}
\newcommand\pref[1]{{\parenstrue\ref{#1}}}
\begin{document}
\ex. example A\label{A}
\ex. example B\label{B}
\textbf{Required:} example in \ref{A} (and example in 2).\\
\textbf{Now acceptable:} example in \ref{A} (and example in \pref{B}). Subexamples \ref{A:sub} (like this one \pref{A:sub}) also work.
\end{document}