# \tikzmarknode lines with hooks

I'm trying to get a line produced by tikzmarknodes to start and end with little hooks, i.e., horizontal thinner lines protruding from the ends, more or less to resemble a bracket. I couldn't figure out how to manipulate the node code.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}

This is some text and \tikzmarknode{a}this is some text.

This is some text and \tikzmarknode{b}this is some text.
\begin{tikzpicture}[remember picture]  \draw[overlay,semithick] (a.west) -- (b.west); \end{tikzpicture}

This is some text and \begin{tikzpicture}\draw[overlay,very thin] (0.05,0.1) -- (0,0.1); \draw[overlay,semithick] (0,0.1) -- (0,-0.35); \draw[overlay,very thin] (0,-0.35) -- (0.05,-0.35); \end{tikzpicture}~this is some text.

This is some text and ~this is some text.

\end{document}


The code of the two last lines produce more or less what I am envisioning:

Any help here from the tikz masters?

One possible way.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}

This is some text and \tikzmarknode{a}{~this} is some text.

This is some text and \tikzmarknode{b}{~this} is some text.
\begin{tikzpicture}[overlay,remember picture]  \draw[very thin]
([xshift=0.2em]a.west) -- ([xshift=-0.3pt]a.west)
([xshift=0.2em]b.west) -- ([xshift=-0.3pt]b.west);
\draw[semithick] (a.west) -- (b.west); \end{tikzpicture}

This is some text and \begin{tikzpicture}\draw[overlay,thin] (0.05,0.1) -- (0,0.1); \draw[overlay,semithick] (0,0.1) -- (0,-0.35); \draw[overlay,thin] (0,-0.35) -- (0.05,-0.35); \end{tikzpicture}~this is some text.

This is some text and ~this is some text.
\end{document}


ADDENDUM: For more general settings, you may want to work with styles and fill.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\tikzset{brace me/.style n args={2}{insert path={([xshift=0.2em,yshift=0.1pt]#1.west) --
([xshift=-0.3pt,yshift=0.1pt]#1.west) --
([xshift=-0.3pt,yshift=-0.1pt]#2.west) --
([xshift=0.2em,yshift=-0.1pt]#2.west) --
([xshift=0.2em,yshift=0.1pt]#2.west) --
([xshift=0.3pt,yshift=0.1pt]#2.west) --
([xshift=0.3pt,yshift=-0.1pt]#1.west) --
([xshift=0.2em,yshift=-0.1pt]#1.west) --
cycle}}}
\begin{document}

This is some text and \tikzmarknode{a}{~this} is some text.

This is some text and \tikzmarknode{b}{~this} is some text.
\begin{tikzpicture}[overlay,remember picture]
\fill[brace me={a}{b}] ;
\end{tikzpicture}

This is some text and \tikzmarknode{a'}{~this} is some text.

This is some text ~and \tikzmarknode{b'}{~this} is some text.
\begin{tikzpicture}[overlay,remember picture]
\fill[brace me={a'}{b'}] ;
\end{tikzpicture}
\end{document}


• Almost ;) Is there a way to have the hooks very thin?
– jan
Apr 5 '19 at 17:51
• @jan only the hooks or the full bracket?
– user121799
Apr 5 '19 at 17:53
• Only the hooks, like in the code below the vertical line was semithick and the horizontal lines very thin
– jan
Apr 5 '19 at 17:54
• @jan I added something. (If you want to make sure that the line is always vertical regardless of whether or not the nodes are precisely on top of each other, this also possible but requires more work and more input in the form of a prescription of what is to be done in that case.)
– user121799
Apr 5 '19 at 17:57
• The hooks should always be horizontal, even if the line ends up not being. So that's ok. But one more thing: Now given the different thicknesses, they thin lines don't connect nicely at the ends (I had the same problem with the bad solution below.) Is there a way to get them to connect fully to the vertical line, i.e., the thing being treated as one drawing? I guess that might be a more general question: Can I change the thickness in a draw command on the go?
– jan
Apr 5 '19 at 18:02