我的论文审稿人建议我始终将括号()
和引用括号[]
(我只使用生成的方括号biblatex
)保持直立。
这确实是同一个问题斜体文本中的直立括号和如何在整个文档中获得直立的括号?。
但解决方案(拥抱) 并不完全令人满意。首先,它会产生错误\emph{\(math\) not work!}
;其次,它不适用于theorem
环境中的斜体文本。
由于这是一个样式问题,因此我希望不需要手动修改主文件的代码。
答案1
那这个呢:
\def\adef#1{\catcode`#1=13 \bgroup \lccode`\~=`#1\lowercase{\egroup\def~}}
\let\emphOri=\emph
\def\emph{\bgroup\adef({\ifmmode(\else{\rm(}\fi}\adef){\ifmmode)\else{\/\rm)}\fi}\emphA}
\def\emphA#1{\emphOri{#1}\egroup}
\emph{text (text) $\bigl( f(x) + y\bigr)$ text}
如果您也需要重新定义\ithsape
,请添加以下行:
\long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
\addto\itshape{\adef({\ifmmode(\else{\rm(}\fi}\adef){\ifmmode)\else{\/\rm)}\fi}}
{\itshape text (text) $\bigl( f(x) + y\bigr)$ text}
我的意思是,这段代码比更紧凑、更易读embrac.sty
。
编辑:如果您需要赋予另一个大括号(例如方括号)相同的行为,您可以尝试以下操作:
\def\adef#1{\catcode`#1=13 \bgroup \lccode`\~=`#1\lowercase{\egroup\def~}}
\long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
\def\activebraces#1#2{\adef#1{\ifmmode#1\else{\rm#1}\fi}\adef#2{\ifmmode#2\else{\/\rm#2}\fi}}
\let\emphOri=\emph
\def\emph{\bgroup\activebraces()\activebraces[]\emphA}
\def\emphA#1{\emphOri{#1}\egroup}
\addto\itshape{\activebraces()\activebraces[]}
但我警告:这可能不适用于自动生成的括号(即来自 biblatex 的括号),因为这些括号已经在宏中被标记化了。我没有尝试过,但我假设这种行为。您需要在包中找到括号并按\rm
版本替换它们,或者使用一些包选项(用于设置括号的类型)。我不知道,抱歉,我不是 LaTeX 专家。
答案2
答案3
可以使用以下包修复引用中的 [] 括号cite
:
\usepackage{cite}
\def\citeleft{\begingroup\rm[}
\def\citeright{]\endgroup}
这对文档中剩余的括号 () 没有帮助。FWIW,我总是将其置于数学模式。