剪切变换一个“盒子”

剪切变换一个“盒子”

使用该graphicx包,我可以使用命令旋转任意盒子\rotatebox{...}{...}。 是否有任何包中有类似的命令可以让我剪切盒子,即产生一种一般倾斜?

答案1

使用比 David 的答案略新的 pdfTeX,您可以更直接地使用 进行仿射变换\pdfsetmatrix。我并不声称对此有所了解,但这里大致是 graphicx 在后台所做的事情\rotatebox(当然,使用不同的矩阵)。

\documentclass{article}
\newsavebox{\foobox}
\newcommand{\slantbox}[2][.5]
  {%
    \mbox
      {%
        \sbox{\foobox}{#2}%
        \hskip\wd\foobox
        \pdfsave
        \pdfsetmatrix{1 0 #1 1}%
        \llap{\usebox{\foobox}}%
        \pdfrestore
      }%
  }
\begin{document}
\slantbox{Hello, world!}

\slantbox[-2]{Hello, world!}
\slantbox[-1]{Hello, world!}
\slantbox[-.8]{Hello, world!}
\slantbox[-.6]{Hello, world!}
\slantbox[-.4]{Hello, world!}
\slantbox[-.2]{Hello, world!}

\slantbox[.2]{Hello, world!}
\slantbox[.4]{Hello, world!}
\slantbox[.6]{Hello, world!}
\slantbox[.8]{Hello, world!}
\slantbox[1]{Hello, world!}
\slantbox[2]{Hello, world!}

\end{document}

上述代码的结果:文本倾斜了不同程度

编辑:正如 quark67 指出的那样,要将此代码与 LuaLaTeX 一起使用,您只需首先加载包luatex85,它提供命令\pdfsave、、(请参阅手册第 2.5 节)。\pdfsetmatrix\pdfrestore

答案2

啊哈,TikZability 机会!

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\begin{scope}[cm={1,0,1,1,(0,0)}] % Sets the coordinate trafo matrix entries.
\node[transform shape] at (0,0) {ABC};
\end{scope}
\begin{scope}[cm={1,0,-1,1,(0,0)}]
\node[transform shape] at (3,0) {Hello};
\end{scope}
\begin{scope}[cm={1,0,-1,-1,(0,0)}]
\node[transform shape] at (2,2) {World};
\end{scope}
\begin{scope}[cm={1,0,1,-1,(0,0)}]
\node[transform shape] at (1,2) {FOObar?};
\end{scope}
\end{tikzpicture}
\end{document}

您可以将其放入节点而不是盒子(风险更小:P)。

在此处输入图片描述

答案3

在此处输入图片描述

您可以弄乱坐标矩阵,但风险自负......

\documentclass{article}

\begin{document}


ABC\pdfliteral{ q 2 0.1 0.6 .4 0 0 cm}\rlap{XYZ}\pdfliteral{ Q}


\end{document}

答案4

剪切变换可以分解为缩放和旋转。

% \hshearbox{vertical_prescale_times_shearfactor}{one_divide_by_shearfactor}{content}
% an initial vertical downscale is often necessary for a 3d projection
\newcommand{\hshearbox}[3]{\scalebox{0.866025}[#2]{\rotatebox{210}%
{\scalebox{1.73205}[-0.57735]{\rotatebox{60}{\scalebox{-1.1547}[#1]{#3}}}}}}
% \vshearbox{horizontal_prescale_times_shearfactor}{one_divide_by_shearfactor}{content}
% an initial horizontal downscale is often necessary for a 3d projection
\newcommand{\vshearbox}[3]{\scalebox{#2}[0.866025]{\rotatebox{210}%
{\scalebox{-0.57735}[1.73205]{\rotatebox{60}{\scalebox{#1}[-1.1547]{#3}}}}}}

相关内容