我尝试反讽标点符号在 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}