强调环境中的 reflectbox

强调环境中的 reflectbox

我尝试反讽标点符号在 LaTeX 中使用 CMU 字体。此符号在 Unicode 中为:⸮ ( U+U+2E2E)

于是我寻找一种方法来用 CMU 正确渲染这个符号。但问题在于反讽符号的强调渲染。

由于讽刺标点只是一个镜像问号,我使用\reflectbox来自的命令graphicx,就像在这个 MWE 中一样:

\documentclass{minimal}
\usepackage{graphicx}


\newcommand\irony{\,\reflectbox{?}}

\begin{document}

Roman : Lorem ipsum dolor\irony

Emphasis : \emph{Lorem ipsum dolor\irony}

Bold :  \textbf{Lorem ipsum dolor\irony}

\end{document}

但问题在于强调渲染:

在此处输入图片描述

当文本向右倾斜时,反讽标记的强调形式会向左倾斜。

当理想形式是带有以下验证复选标记的形式时:

在此处输入图片描述

\irony那么,当命令处于强调环境或命令时,是否可以获得这种渲染?

答案1

含钛Z 您拥有引擎独立性。

\documentclass{article}
\usepackage{fontspec}
\usepackage{newunicodechar}
\usepackage{graphicx}
\usepackage{tikz}

\setmainfont{CMU Serif}
\newfontfamily{\dejavu}{DejaVu Serif}

\makeatletter
\newunicodechar{⸮}{%
  \iffontchar\font`⸮
    ⸮%
  \else
    \ifdim\fontdimen1\font=\z@
      \tikz[baseline=(?.base),inner sep=0pt,outer sep=0pt]\node[xscale=-1] (?) {?};%
    \else
      \tikz[baseline=(?.base),inner sep=0pt,outer sep=0pt]\node[xscale=-1,xslant=-0.5] (?) {?};%
      \kern-0.35em
    \fi
  \fi
}
\makeatother

\begin{document}
\setlength{\fboxsep}{0pt} % for showing the bounding boxes

dolor⸮?

\textit{dolor⸮?} \fbox{\itshape     ⸮} \fbox{\itshape ?}

\dejavu
dolor⸮?

\textit{dolor⸮?}

\end{document}

如果可用则使用真实字符。

在此处输入图片描述

答案2

问题是斜体(或倾斜)会使文本向右倾斜,而当您反映时,文本向左倾斜。但您已经弄清楚了这一点。

Bruno Le Floch 设计了一个简洁的\slantbox命令对给定对象应用剪切变换,这样您就可以制作“反向斜体”,然后反映讽刺标记:

在此处输入图片描述

\documentclass{article}

\usepackage{graphicx}

\makeatletter
\newcommand{\slantbox}[2][.5]
  {%
    \mbox
      {%
        \sbox{\@tempboxa}{#2}%
        \hskip\wd\@tempboxa
        \pdfsave
        \pdfsetmatrix{1 0 #1 1}%
        \llap{\usebox{\@tempboxa}}%
        \pdfrestore
      }%
  }

\newcommand\irony{%
  \,%
  \ifdim\the\fontdimen\@ne\font>\z@
%                         ↓--↓ Manually tuned
    \reflectbox{\slantbox[-0.6]{?}}%
  \else
    \reflectbox{?}%
  \fi
}
\makeatother

\begin{document}

\makeatletter

Roman : Lorem ipsum dolor\irony

Emphasis : \emph{Lorem ipsum dolor\irony}

Bold : \textbf{Lorem ipsum dolor\irony}

\end{document}

我还添加了一个条件来检查当前字体形状是否为斜体。

不幸的是,这不适用于 XeTeX,因为该\slantbox命令使用了 pdfTeX 原语。但它适用于 LuaTeX :)

答案3

您可以使用自定义版本的 reflectbox,它也会应用一些倾斜度以适应当前字体:

\documentclass{minimal}

\makeatletter
\newcommand\REflectwithslant{%
  \hskip\wd0
  \wd0=0pt
  \pdfsave
  \pdfsetmatrix{%
    -1 0 
    \strip@pt\dimexpr2\fontdimen1\font\relax\space 1%
  }%
  \box0
  \pdfrestore
  \endgroup
}
\newcommand\Reflectwithslant{\aftergroup\REflectwithslant}
\newcommand\reflectwithslant{\begingroup\afterassignment\Reflectwithslant\setbox0\hbox}
\makeatother

\newcommand\irony{\,\reflectwithslant{?}}

\begin{document}

Roman : Lorem ipsum dolor\irony

Emphasis : \emph{Lorem ipsum dolor\irony}

Bold :  \textbf{Lorem ipsum dolor\irony}

\end{document}

在此处输入图片描述

相关内容