出于风格原因,我想确保括号在每个嵌套级别中使用不同的字符:
([{}])。
我希望这能够在正文中得到维护(以及引用、脚注等),除非被列表、逐字记录、数学模式等推翻。
对于大部分内容,我自己可以做到,但是例如在引用中,我不能 - 除非为此专门定义一个命令(我只是尝试了定义命令的最基础部分)。
谢谢。
答案1
嵌套括号的简单实现很容易写出来
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\makeatletter
\newcount\kart@flu@parenlevel
\newcommand*{\kart@flu@paren@toodeep}{%
\rule[0.25ex]{1.25ex}{1.25ex}%
}
\newcommand*{\kart@flu@paren@open}{%
\advance\kart@flu@parenlevel\@ne
\ifnum\kart@flu@parenlevel=\@ne
(%
\else
\ifnum\kart@flu@parenlevel=\tw@
[%
\else
\ifnum\kart@flu@parenlevel=\thr@@
\{%
\else
\PackageWarning{myparens}{%
Too deeply nested parentheses}%
\kart@flu@paren@toodeep
\fi
\fi
\fi
}
\newcommand*{\kart@flu@paren@close}{%
\ifnum\kart@flu@parenlevel=\@ne
)%
\else
\ifnum\kart@flu@parenlevel=\tw@
]%
\else
\ifnum\kart@flu@parenlevel=\thr@@
\}%
\else
\PackageWarning{myparens}{%
Too deeply nested parentheses}%
\kart@flu@paren@toodeep
\fi
\fi
\fi
\advance\kart@flu@parenlevel\m@ne
}
\newcommand*{\kartparen}[1]{%
\kart@flu@paren@open#1\kart@flu@paren@close}
\newcommand*{\kartparenopen}{\kart@flu@paren@open}
\newcommand*{\kartparenclose}{\kart@flu@paren@close}
\makeatother
\begin{document}
\kartparen{Lorem \kartparen{ipsum} dolor}
\kartparen{Lorem \kartparen{ipsum \kartparen{dolor} sit} amet}
\kartparen{Lorem \kartparen{ipsum \kartparen{dolor \kartparen{sit} amet} concectur} donec}
\kartparen{Lorem\footnote{\kartparen{ipsum}} dolor}
\end{document}
再多做一些工作就可以改变这个命令,使得括号嵌套深度无限(括号类型将由模运算确定)。
困难的部分是让它与可能从其他命令和超出您手动控制范围的来源添加的所有其他类型的括号进行交互。这个问题没有通用的解决方案,您想要使用的每个命令可能都需要手动修补。
由于您明确提到了引用,biblatex
因此有命令\mkbibparens
和\mkbibrackets
以及一些用于此作业的低级命令。这些命令在外部biblatex
也可用,并且可以按预期进行交互。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\mkbibparens{Lorem \mkbibparens{ipsum} dolor}
\mkbibparens{Lorem \mkbibparens{ipsum \mkbibparens{dolor} sit} amet}
\mkbibparens{Lorem\footnote{\mkbibparens{ipsum}} dolor}
\mkbibparens{Lorem \parencite{sigfridsson}}
\parencite{sigfridsson}
\mkbibbrackets{Lorem \mkbibparens{ipsum} dolor}
\mkbibbrackets{Lorem \mkbibbrackets{ipsum} dolor}
\end{document}