我对 LaTeX 还不太熟悉,不知道它的内部工作原理,但我想排版一个带双划线括号的表达式。我在包中找到了这样的符号(\llbracket
和\rrbracket
)stmaryrd
,但它似乎没有给两侧留出很好的间距。我尝试了两种方法(模仿第二种变体中类似问题的一些答案),但似乎不起作用。
\documentclass{article}
\usepackage{amsmath}
\usepackage{stmaryrd}
\newcommand{\repA}[1]{\left\llbracket #1 \right\rrbracket}
\newcommand{\repB}[1]{\left\llbracket\! #1 \,\right\rrbracket}
\begin{document}
\Large
\begin{align*}
\repA{\vec{v}}\\
\repB{\vec{v}}
\end{align*}
\end{document}
我不知道如何在这里上传图片,无论如何,第一个版本中的符号太靠近右括号,第二个版本中的符号太靠近左括号。定义一个处理间距并正确执行的命令的正确方法是什么?提前非常感谢。
答案1
问题在于\vec
,它会产生一个可以延伸到下方字形右侧的箭头。
\vec
这里我建议重新定义一下,根据与“w”宽度的差异,在构造后增加一些空间。
我还使用\DeclarePairedDelimiter
它来提供一种调整分隔符大小的简单方法。
\documentclass{article}
\usepackage{amsmath,mathtools}
\usepackage{stmaryrd}
\DeclarePairedDelimiter{\rep}{\llbracket}{\rrbracket}
\makeatletter
\AtBeginDocument{%
\let\latex@vec\vec
\renewcommand\vec[1]{{\latex@vec{#1}\mathpalette\@vec{#1}}}%
}
\newcommand\@vec[2]{%
\sbox\z@{$\m@th#1w$}%
\sbox\tw@{$\m@th#1#2$}%
\ifdim\wd\tw@<\wd\z@
\kern0.2\dimexpr\wd\z@-\wd\tw@\relax
\fi
}
\makeatother
\begin{document}
\begin{gather*}
\vec{v}+\vec{w}\\
\rep{\vec{x}}+\rep{\vec{v}}+\rep{\vec{w}}\\
\rep{\vec{v}}+\rep[\big]{\vec{v}}+
\rep[\Big]{\vec{v}}+\rep*{\frac{1}{2}\vec{v}}
\end{gather*}
\end{document}
答案2
答案3
mathtools
您可以使用和其\DeclareMathDelimiterX
命令获得具有正确间距的宏。您将获得一个\left … \togt
在其星号版本中隐含一对的宏,或者可以使用可选参数(\big
、\Big
、等)来微调分隔符大小。我还建议您使用\vv
来自 的命令esvect
,它的箭头提示比\vec
(8 种提示!)更漂亮:
\documentclass{article}
\usepackage{mathtools}
\usepackage{stmaryrd}
\usepackage[b]{esvect}
\DeclarePairedDelimiterX\repC[1]\llbracket\rrbracket{#1\mkern1.2mu}
\begin{document}
\Large
\begin{gather*}
\repC[\big]{\vec{v}}\quad\repC{\vec{v}}\\
\repC[\big]{\vv{v}}\quad\repC{\vv{v}}
\end{gather*}
\end{document}