I want to have a rounded box with black border lines and a backgroundcolor, f.e. yellow just around the text, not around the whole line, so the sentence should just continue on the same line. I found many threads regarding similar questions but the answer was always around a whole line or a whole paragraph but not about just one word.
[Tex/LaTex] Colored box just around the text
borderboxescolor
Related Solutions
You can use TikZ
with the overlay
option and a correct anchor. That would look like this:
\documentclass{article}
\usepackage{tikz}
\newcommand\mybox[2][]{\tikz[overlay]\node[fill=blue!20,inner sep=2pt, anchor=text, rectangle, rounded corners=1mm,#1] {#2};\phantom{#2}}
\begin{document}
\noindent
this is some text \mybox[fill=blue!20]{box} text\\
this is some text box text
\end{document}
You can specify extra options (like I have done here for the color). By using the overlay
option and the text
anchor we ensure correct placement and no influence on spacing. The phantom
is added to get the normal spacing for the content of the box. This is the result of the example code:
Edit: To show that the vertical spacing is not affected either, consider the following:
\documentclass{article}
\usepackage{tikz}
\newcommand\mybox[2][]{\tikz[overlay]\node[fill=blue!20,inner sep=2pt, anchor=text, rectangle, rounded corners=1mm,#1] {#2};\phantom{#2}}
\begin{document}
\begin{minipage}{0.4\textwidth}
\noindent
this is some text \mybox[fill=blue!20]{box} text\\
this is some text box text
\end{minipage}
\begin{minipage}{0.4\textwidth}
\noindent
this is some text box text\\
this is some text box text
\end{minipage}
\end{document}
Which results in:
Update.
Improved version:
\tikzmark
is used to set marks at the beginning and end of the text that will be boxed. The main command is
\BoxedText[<options>]{<start-mark>}{<end-mark>}
The optional argument can be used to pass options to the \draw
command used internally (by default, just a frame is drawn, but you can fill it, or change the line width, or apply any other desired valid modification):
\documentclass{article}
\usepackage{tikzpagenodes}
\usetikzlibrary{calc}
\makeatletter
\tikzset{%
remember picture with id/.style={%
remember picture,
overlay,
save picture id=#1,
},
save picture id/.code={%
\edef\pgf@temp{#1}%
\immediate\write\pgfutil@auxout{%
\noexpand\savepointas{\pgf@temp}{\pgfpictureid}}%
},
if picture id/.code args={#1#2#3}{%
\@ifundefined{save@pt@#1}{%
\pgfkeysalso{#3}%
}{
\pgfkeysalso{#2}%
}
}
}
\def\savepointas#1#2{%
\expandafter\gdef\csname save@pt@#1\endcsname{#2}%
}
\def\tmk@labeldef#1,#2\@nil{%
\def\tmk@label{#1}%
\def\tmk@def{#2}%
}
\tikzdeclarecoordinatesystem{pic}{%
\pgfutil@in@,{#1}%
\ifpgfutil@in@%
\tmk@labeldef#1\@nil
\else
\tmk@labeldef#1,(0pt,0pt)\@nil
\fi
\@ifundefined{save@pt@\tmk@label}{%
\tikz@scan@one@point\pgfutil@firstofone\tmk@def
}{%
\pgfsys@getposition{\csname save@pt@\tmk@label\endcsname}\save@orig@pic%
\pgfsys@getposition{\pgfpictureid}\save@this@pic%
\pgf@process{\pgfpointorigin\save@this@pic}%
\pgf@xa=\pgf@x
\pgf@ya=\pgf@y
\pgf@process{\pgfpointorigin\save@orig@pic}%
\advance\pgf@x by -\pgf@xa
\advance\pgf@y by -\pgf@ya
}%
}
\newcommand\tikzmark[2][]{%
\tikz[remember picture with id=#2] #1;}
\makeatother
\newcommand\BoxedText[3][]{%
\begin{tikzpicture}[remember picture,overlay]
\draw[#1]
let \p1=(pic cs:#2), \p2=(pic cs:#3) in
([yshift=-0.8ex]\p1) --
([yshift=2ex]\p1) --
([xshift=3pt,yshift=2ex]\p1-|current page text area.east) --
([xshift=3pt,yshift=2ex]\p2-|current page text area.east) --
([yshift=2ex]\p2) --
([yshift=-0.8ex]\p2) --
([xshift=-3pt,yshift=-0.8ex]\p2-|current page text area.west) --
([xshift=-3pt,yshift=-0.8ex]\p1-|current page text area.west) --
cycle
;
\end{tikzpicture}%
}
\begin{document}
\BoxedText{start1}{end1}
\BoxedText[draw=orange!70!black,right color=orange!10,left color=orange!50]{start2}{end2}
\BoxedText[draw=cyan!70!black,fill=cyan!30,ultra thick]{start3}{end3}
Some text goes here.\tikzmark{start1} Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here.\tikzmark{end1} Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here.
Some text goes here. Some text goes here. Some text goes here. Some text goes here.Some text goes here.\tikzmark{start3} Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text Some text goes here.\tikzmark{end3}
Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here.Some text goes here. Some text goes here. Some text goes here. Some text goes here.Some text goes here.\tikzmark{start2} Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here.\tikzmark{end2} Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here. Some text goes here.
\end{document}
The code must be run three times.
Best Answer
Based on this answer by Roelof Spijker, just add
draw=black
to achieve the black border: