Асимметричная верхняя распорка

Асимметричная верхняя распорка

Этот вопрос привел к новому пакету:
abraces

Как можно контролировать положение шипа накладной распорки?

например, я хочу:

/------^----------------------\

aksdj ajksdnkajs ajsdknakjsnd jaknd

В отличие от:

/-------------^--------------\

aksdj ajksdnkajs ajsdknakjsnd jaknd

решение1

\overbraceи \underbraceсостоят из 5 частей:

  1. левый конец;
  2. (слева) горизонтальная линейка;
  3. наконечник (вверх/вниз);
  4. (справа) горизонтальная линейка;
  5. правый конец.

Поскольку обе горизонтальные линии являются лидерами, их достаточно легко модифицировать, используя подход «совместного использования». То есть вы можете изменить долю левого лидера по сравнению с правым, тем самым перемещая наконечник влево или вправо. Например, разделение левого/правого лидера в соотношении 1:2 поместит наконечник на 1/3 пути внутрь, тогда как соотношение 3:2 поместит наконечник на 60% пути внутрь. По умолчанию будет соотношение по центру/1:1.

введите описание изображения здесь

\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage{multido}% http://ctan.org/pkg/multido

\makeatletter
\def\@@bfil{\leaders \vrule \@height \ht\z@ \@depth \z@ \hfill}% default brace filler
\def\@bLfil{\@@bfil}% left leader filler
\def\@bRfil{\@@bfil}% right leader filler
\def\resetbraceratio{\gdef\@bLfil{\@@bfil}\gdef\@bRfil{\@@bfil}}% reset to default braces
\def\setbraceratio#1#2{% \setbraceratio{<left>}{<right>}
  \let\@bLfil\relax% clear left filler
  \multido{\iA=1+1}{#1}{\gappto\@bLfil{\@@bfil}}% increase left ratio
  \let\@bRfil\relax% clear right filler
  \multido{\iA=1+1}{#2}{\gappto\@bRfil{\@@bfil}}% increase right ratio
}
\def\upbracefill{$\m@th\setbox\z@\hbox{$\braceld$}\bracelu\@bLfil\bracerd\braceld\@bRfil\braceru$}
\def\downbracefill{$\m@th\setbox\z@\hbox{$\braceld$}\braceld\@bLfil\braceru\bracelu\@bRfil\bracerd$}
\makeatother

\begin{document}

\setbraceratio{3}{1}% 3:1 ratio
$\underbrace{\textrm{The quick brown fox jumped over the lazy dog}}$ \par
\setbraceratio{1}{5}% 1:5 ratio
$\underbrace{\textrm{The quick brown fox jumped over the lazy dog}}$ \par
\setbraceratio{7}{2}% 7:2 ratio
$\overbrace{\textrm{The quick brown fox jumped over the lazy dog}}$ \par

\end{document}

\setbraceratio{<left>}{<right>}устанавливает соотношение между левой и правой частью фигурных скобок, при этом \resetbraceratioвосстанавливает значение по умолчанию (или 1:1).

Проблема с этим подходом в том, что горизонтальный центр может отличаться от места, где находится кончик. Таким образом, добавление текста в качестве надстрочного/подстрочного индекса должно быть перемещено в соответствующее положение. Можно было бы расширить это решение для работы с длинами, а не с отношениями. Однако это потребовало бы некоторого тестирования, чтобы убедиться, что вы не превышаете ширину блока — отношения позаботятся об этом естественным образом.


Theabracesупаковкатеперь предоставляет интерфейс для создания скобок с помощью клавиш-символов. Некоторые примеры издокументация:

введите описание изображения здесь

Конструкция скобок основана на комбинациях символов:

введите описание изображения здесь

решение2

Другой вариант — использовать печально известный \tikzmark, и использовать украшение в виде скобки с , чтобы aspect=<percent>контролировать местоположение шипа. Вот версия, адаптированная изФигурная скобка для вставки чего-либо в уравнение? Как перевернутая нижняя скобкачто дает вам всю присущую гибкость tikz:

введите описание изображения здесь

Передаются следующие параметры \InsertUnderBrace:

  • [#1]варианты розыгрыша тикз,

  • [#2]варианты брекетов tikz,

  • {#3}имя слева \tikzmark,

  • {#4}название права \tikzmark,

  • {#5}текст, который следует поместить под фигурную скобку.

Примечания:

  • Для этого требуется два захода. Первый — для определения локаций, второй — для рисования.

Использованная литература:

Код:

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.pathreplacing}

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}

% Tweak these as necessary
\newcommand*{\BraceAmplitude}{0.4em}%
\newcommand*{\BraceAspect}{0.5}% 
\newcommand*{\VerticalOffset}{0.4ex}%  
\newcommand*{\HorizontalOffset}{0.0em}% 


\NewDocumentCommand{\InsertUnderBrace}{%
    O{} % #1 = draw options
    O{} % #2 = optional brace options
    m   % #3 = left tikzmark
    m   % #4 = right tikzmark
    m   % #5 = text to place underbrace
}{%
    \begin{tikzpicture}[overlay,remember picture]
\draw [decoration={brace, amplitude=\BraceAmplitude, aspect=\BraceAspect, #2}, decorate, thick, draw=blue, text=black, #1]
        ($(#4)+(\HorizontalOffset,-\VerticalOffset)$) -- 
        ($(#3)+(-\HorizontalOffset,-\VerticalOffset)$)
        node [below=\VerticalOffset, midway] {#5};
    \end{tikzpicture}%
}%


\begin{document}
\[
    \tikzmark{StartBraceA} \sin^2 \alpha + \cos^2 \theta \tikzmark{EndBraceA}
    \qquad
    \tikzmark{StartBraceB} \sin^2 \alpha + \cos^2 \theta \tikzmark{EndBraceB}
    \qquad
    \tikzmark{StartBraceC} \sin^2 \alpha + \cos^2 \theta \tikzmark{EndBraceC}
\]

\InsertUnderBrace[draw=red,text=blue]{StartBraceA}{EndBraceA}{default}

\InsertUnderBrace[draw=violet,text=blue][aspect=0.25]{StartBraceB}{EndBraceB}{$\mathrm{aspect} = 0.25$}

\InsertUnderBrace[draw=brown,text=blue, densely dotted][aspect=0.75]{StartBraceC}{EndBraceC}{$\mathrm{aspect} = 0.75$}

\end{document}

Связанный контент