在单词中绘制斜体框作为占位符(围绕单个字母)

在单词中绘制斜体框作为占位符(围绕单个字母)

我正在比较许多不同的案例,它们都遵循预定义的命名方案。现在我想用一个框替换名称中的一个字符,以指示此参数已针对比较的案例进行了更改。

这是我目前找到的解决方案,但我并不满意。

\documentclass[a4paper, 12pt]{article} 
\usepackage{xcolor}


\begin{document}
    1818{\color{red}\framebox{X}}cBb-1day    

    \textit{1818{\color{red}\framebox{X}}cBb-1day }

    \emph{1818{\color{red}\framebox{X}}cBb-1day }

\end{document}

在此处输入图片描述

X第一行相当不错,但我希望框的宽度与(我将在最终文档中将其设为白色)一样宽。

对于接下来的几行,我还有一个额外的问题,那就是我想将框调整为与文本风格相适应的风格(例如斜体或者我以后可能使用的任何风格)。

答案1

这利用了两个非常好的答案。Joseph Wright 在检测当前正在使用哪种文本“模式”(正常、斜体、粗体等)?告诉如何确定当前的字体形状,我用它来确定是否是斜体。

布鲁诺剪切变换一个“盒子”展示如何倾斜一个盒子。

同时,我使用 Bruno 的方法\slantbox倾斜盒子,同时保留字母的斜体形状,而使用 Joseph 的方法确定我是否为斜体形状。

我要做的是确定适合此字体的倾斜度,我确定为 0.24。我还将 设置为\fboxsep-\fboxrule以便方框字母占用的水平空间与底层字母完全相同。

编辑倾斜的框,同时保留框内的斜体部分,如f框内的示例所示。

在 MWE 的最后,我展示了新宏的结果\itbox{}

\documentclass[a4paper, 12pt]{article} 
\usepackage{xcolor}
% FROM BRUNO's ANSWER AT 
% https://tex.stackexchange.com/questions/63179/shear-transform-a-box/63188#63188
\newsavebox{\foobox}
\newcommand{\slantbox}[2][.5]{\mbox{%
        \sbox{\foobox}{#2}%
        \hskip\wd\foobox
        \pdfsave
        \pdfsetmatrix{1 0 #1 1}%
        \llap{\usebox{\foobox}}%
        \pdfrestore
}}
% FROM JOSEPH'S ANSWER AT
% https://tex.stackexchange.com/questions/31649/detect-which-text-mode-normal-italic-bold-etc-is-currently-in-use
\makeatletter
\newcommand*{\IfItalicTF}{%
  \ifx\f@shape\my@test@it
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\newcommand*{\my@test@it}{it}
\makeatother
%
\def\myfbox#1{\edef\tmp{\the\fboxsep}\fboxsep=-\fboxrule\relax%
  \textcolor{red}{\IfItalicTF{\itbox{#1}}{\fbox{#1}}}%
  \fboxsep=\tmp\relax%
}
\def\itslant{.24}
\def\itbox#1{\slantbox[\itslant]{\fbox{\slantbox[-\itslant]{\itshape#1}}}}
\parindent 0pt
\begin{document}
1818\myfbox{X}cBb-1day \par
\textit{1818\myfbox{X}cBb-1day }\par
\emph{1818\myfbox{X}cBb-1day }\par
\emph{1818f\myfbox{f}cBb-1day }\par
\itbox{this box should be italic} 
\end{document}

在此处输入图片描述

一个简化的定义,可以自动计算当前字体的倾斜因子(存储在中\fontdimen1\font);使用组我们可以确保颜色不会溢出并且\fboxsep不需要恢复:

\makeatletter
\newcommand{\myfbox}[1]{%
  \leavevmode % for \color
  \begingroup
  \fboxsep=-\fboxrule
  \color{red}
  \edef\computed@slant{\strip@pt\fontdimen1\font}%
  \ifdim\computed@slant pt=\z@
    % no slant, just do a simple \fbox
    \fbox{#1}%
  \else
    \slantbox[\computed@slant]{\fbox{\slantbox[-\computed@slant]{#1}}}%
  \fi
  \endgroup
}
\makeatother

完整的示例,还显示宽度是正确的(ff当然,示例中的连字符需要被打破)。

\documentclass[a4paper,12pt]{article}
\usepackage{xcolor}
% FROM BRUNO's ANSWER AT 
% https://tex.stackexchange.com/questions/63179/shear-transform-a-box/63188#63188
\newsavebox{\foobox}
\newcommand{\slantbox}[2][.5]{\mbox{%
        \sbox{\foobox}{#2}%
        \hskip\wd\foobox
        \pdfsave
        \pdfsetmatrix{1 0 #1 1}%
        \llap{\usebox{\foobox}}%
        \pdfrestore
}}

\makeatletter
\newcommand{\myfbox}[1]{%
  \leavevmode % for \color
  \begingroup
  \fboxsep=-\fboxrule
  \color{red}
  \edef\computed@slant{\strip@pt\fontdimen1\font}%
  \ifdim\computed@slant pt=\z@
    % no slant, just do a simple \fbox
    \fbox{#1}%
  \else
    \slantbox[\computed@slant]{\fbox{\slantbox[-\computed@slant]{#1}}}%
  \fi
  \endgroup
}
\makeatother

\newcommand{\test}[1]{%
  \sbox0{#1}#1 -- \the\wd0
}

\begin{document}

\test{1818XcBb-1day}\par
\test{1818\myfbox{X}cBb-1day}

\test{\textit{1818XcBb-1day}}\par
\test{\textit{1818\myfbox{X}cBb-1day}}

\test{\emph{1818XcBb-1day}}\par
\test{\emph{1818\myfbox{X}cBb-1day}}

\test{\emph{1818f{}fcBb-1day}}\par
\test{\emph{1818f\myfbox{f}cBb-1day}}

\end{document}

在此处输入图片描述

答案2

这是一个小的解决方案,但是看起来不太好 ;-)

\documentclass[a4paper, 12pt]{article} 
\usepackage{xcolor}

\setlength{\fboxsep}{0pt}

\begin{document}
1818{\color{red}\framebox{X}}cBb-1day    

\textit{1818{\color{red}\framebox{X}}cBb-1day }

\emph{1818{\color{red}\framebox{X}}cBb-1day }

\end{document}

一些针对倾斜框(和文本,但不是所要求的斜体)的改进版本

\documentclass[a4paper, 12pt]{article} 
\usepackage{xcolor}
\usepackage{xparse}
\usepackage{tikz}

\NewDocumentCommand{\namingscheme}{D<>{}O{white}mO{X}}{%
  \begingroup
  \setlength{\fboxsep}{0pt}
  \tikz\node[#1] {1818\textcolor{#2}{\fbox{#4}}#3};
  \endgroup
}


\begin{document}
1818{\color{red}\framebox{X}}cBb-1day    

\textit{1818{\color{red}\framebox{X}}cBb-1day }

\emph{1818{\color{red}\framebox{X}}cBb-1day }

\textit{\namingscheme<xslant=0.15>[red]{cBb-1day}}

\end{document}

在此处输入图片描述

免责声明:我偷了来自 Gonzalo Medina 对我的一个问题的回答的倾斜文字的代码:不同视口中的文本

答案3

这是一个仅针对非斜体文本的简单解决方案。我认为斜体文本看起来也不错,但你可能不同意。

\documentclass{article}
\usepackage{amssymb}
\begin{document}
sample$\Box{}$text

\textit{sample$\Box{}$text}
\end{document}

在此处输入图片描述

相关内容