![用剪刀符号插入水平切割线的最佳方法](https://linux22.com/image/255197/%E7%94%A8%E5%89%AA%E5%88%80%E7%AC%A6%E5%8F%B7%E6%8F%92%E5%85%A5%E6%B0%B4%E5%B9%B3%E5%88%87%E5%89%B2%E7%BA%BF%E7%9A%84%E6%9C%80%E4%BD%B3%E6%96%B9%E6%B3%95.png)
插入一条带有剪刀符号的水平虚线以指示应沿着这条线用剪刀剪纸的最佳方法是什么?
如果您有多种布局方案且不需要太多代码,请发布。
答案1
或者,您可以使用包中的 Dingbats 符号pifont
。如果您不坚持使用虚线,TikZ
可以使用 来避免\dotfill
。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{pifont}
\usepackage{lipsum}
\begin{document}
\lipsum[11]
\noindent\dotfill
\ding{33}\dotfill
\raisebox{-0.25\baselineskip}{\ding{34}}\dotfill
\raisebox{-0.50\baselineskip}{\ding{35}}\dotfill
\lipsum[11]
\end{document}
请注意,刻度点的大小与字体大小有关。如果要删除\dotfill
剪刀符号后面的跳跃,可以使用 删除。我个人喜欢以下内容:\unskip
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{pifont}
\usepackage{lipsum}
\newcommand{\cuthere}{%
\noindent
\raisebox{-2.8pt}[0pt][0.75\baselineskip]{\small\ding{34}}
\unskip{\tiny\dotfill}
}
\begin{document}
\lipsum[11]
\cuthere
\lipsum[11]
\end{document}
剪刀符号与虚线规则的对齐以及切割线完成后的间距手动的。另一方面,这种方法确实很简单。
编辑(2012/09/10)
调整\dotfill
宏以获得虚线而不是点线。这里我只是将连字符用作破折号:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{pifont}
\usepackage{lipsum}
\makeatletter
\newcommand{\dashfill}{%
\leavevmode \cleaders \hb@xt@ .50em{\hss -\hss }\hfill \kern \z@
% original \dotfill macro:
% \leavevmode \cleaders \hb@xt@ .44em{\hss .\hss }\hfill \kern \z@
}
\makeatother
\newcommand{\cutheredashed}{%
\noindent
\raisebox{-0.5ex}[0pt][0.6\baselineskip]{\small\ding{34}}
\unskip{\tiny\dashfill}
}
\begin{document}
\lipsum[11]
\cutheredashed
\lipsum[11]
\end{document}
但现在这有点太老套了。如果你愿意花这么多精力在最终会被删掉的一行上,Heiko 的解决方案可能更简洁。
答案2
此处的切割线由包的符号设置marvosym
。由于切割线字符已包含三个破折号和固定空格,因此使用起来\(c,x)leaders
有些棘手。在切割线内的切割线符号前后不应有额外的空格。
由于线宽不是切割线符号的倍数,因此第一条线会在切割线左右两侧添加剩余空间。
第二行允许切割线稍微超出文本宽度。
第三个使用包的其他符号集marvosym
。
第四个示例水平缩放中间的剪切符号以精确填充可用空间。
\documentclass{article}
\usepackage{lipsum}
\usepackage{marvosym}
\usepackage{zref-savepos}
\usepackage{graphics}
\begin{document}
\noindent\lipsum[2]
\noindent
\zsaveposx{cut-a}%
\begingroup
\hsize=\numexpr\zposx{cut-b}-\zposx{cut-a}\relax sp\relax
\ifnum\hsize>0 %
\rlap{%
\sbox0{\Cutline}%
\sbox2{\Cutright\null\Cutleft}%
\linewidth=\dimexpr
\numexpr(\hsize-\wd2-\dimexpr.5\wd0\relax)/\wd0\relax\wd0 %
+\wd2\relax
\hbox to \hsize{%
\hfill
\hbox to \linewidth{%
\Cutright\cleaders\copy0\hfill\Cutleft
}%
\hfill
}%
}%
\fi
\hfill
\endgroup
\zsaveposx{cut-b}%
\noindent\lipsum[3]
noindent
\zsaveposx{Cut-a}%
\begingroup
\hsize=\numexpr\zposx{Cut-b}-\zposx{Cut-a}\relax sp\relax
\ifnum\hsize>0 %
\rlap{%
\sbox0{\Cutline}%
\sbox2{\Cutright\null\Cutleft}%
\linewidth=\dimexpr\numexpr(\hsize-\wd2)/\wd0\relax\wd0+\wd2\relax
\hbox to \hsize{%
\hss
\hbox to \linewidth{%
\Cutright\cleaders\copy0\hfill\Cutleft
}%
\hss
}%
}%
\fi
\hfill
\endgroup
\zsaveposx{Cut-b}%
\noindent\lipsum[4]
\noindent
\LeftScissors\cleaders\hbox{\CuttingLine}\hfill\RightScissors
\noindent\lipsum[5]
\newsavebox\kutbox
\noindent
\LeftScissors
\zsaveposx{kut-a}%
\begingroup
\hsize=\numexpr\zposx{kut-b}-\zposx{kut-a}\relax sp\relax
\ifnum\hsize>0 %
\rlap{%
\sbox\kutbox{\CuttingLine}%
\linewidth=\numexpr\hsize/\wd\kutbox\relax\wd\kutbox
\resizebox{\hsize}{\height}{%
\hbox to \linewidth{\cleaders\copy\kutbox\hfill}%
}%
}%
\fi
\endgroup
\hfill
\zsaveposx{kut-b}%
\RightScissors
\noindent\lipsum[5]
\end{document}
答案3
我以前做过一次。我做的是类似下面的内容。还有一些带有 的剪刀符号The Comprehensive LaTeX Symbol List
。效果不是很好,但只要稍微调整一下就可以了。
\documentclass{article}
\usepackage{bbding}
\usepackage{lipsum}
\usepackage{tikz}
\begin{document}
\lipsum[1]
\noindent \ScissorHollowRight \hfill \tikz \draw [dashed] (0,0) -- (11.6,0);
\lipsum[2]
\end{document}
从输出中提取:
更新@alexurba 用他的\dotfill
命令给了我一个想法。我们可以定义一个命令,\dashfill
这样你仍然可以得到虚线而不是点作为切割线。下面是我的尝试。
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{bbding}
\usepackage{lipsum}
\usepackage{tikz}
\newcommand*{\dashfill}{\leavevmode\cleaders\hbox{-}\hfill\kern0pt}
\newcommand{\cutline}{%
\noindent
\raisebox{-2.8pt}[0pt][0.5\baselineskip]{\ScissorHollowRight}\unskip{\dashfill}
}
\newcommand*{\Dashfill}{\tikz \draw [dashed] (0,0) -- (0.97\textwidth,0);}
\newcommand{\Cutline}{%
\noindent
\raisebox{-4pt}[0pt][0.5\baselineskip]{\small\ScissorHollowRight}\unskip{\Dashfill}
}
\begin{document}
\lipsum[1]
\cutline
\lipsum[2]
\Cutline
\lipsum[3]
\end{document}
输出如下:
showframe
我在包中添加了geometry
显示虚线停止位置的选项。目前,我还不知道该如何说。如果有人有想法,也许可以改进\tikz \draw [dashed] (0,0) -- (end of text width,0);
命令。\Cutline
更新(2012 年 9 月 11 日)我只是添加了以下代码来解决TikZ
这个问题。我在这里放了两个。
\documentclass{article}
\usepackage[showframe,margin=1in]{geometry}
\usepackage{bbding}
\usepackage{lipsum}
\usepackage{tikz}
\newlength{\sometext}
\settowidth{\sometext}{{\small\ScissorHollowRight} }
\newcommand{\Cutline}{%
\noindent
\raisebox{-4pt}[0pt][0.5\baselineskip]{\ScissorHollowRight}\unskip{\tikz \draw[dashed](0,0)--({\linewidth-\sometext},0);}
}
\begin{document}
\lipsum[1]
\Cutline
\lipsum[2]
\end{document}
下面是另一个。您需要运行latex
两次才能将其设置正确。
\documentclass{article}
\usepackage[showframe,margin=0.8in]{geometry}
\usepackage{bbding}
\usepackage{tikz}
\usepackage{lipsum}
\newcounter{dashlinecnt}
\renewcommand*{\thedashlinecnt}{%
dashline-\the\value{dashlinecnt}%
}
\newcommand*{\dashedlinefill}{%
\leavevmode
\stepcounter{dashlinecnt}%
\tikz[remember picture,overlay,inner sep=0pt]\node(\thedashlinecnt){};%
\hfill
\tikz[remember picture,overlay,inner sep=0pt]\draw[dashed](\thedashlinecnt) -- (0,0);%
}
\newcommand{\Cutline}{%
\noindent
\raisebox{-4pt}[0pt][0.5\baselineskip]{\ScissorHollowRight}\unskip{\dashedlinefill}
}
\begin{document}
\lipsum[1]
\Cutline
\lipsum[2]
\end{document}
致谢最后两段代码来自我帖子中 Kanappan Sampath 和 Heiko 的回答让 TikZ 计算边距的 x 坐标。
最后,我完全同意 alexurba 的说法,关于虚线无论如何都必须被剪断,这引起了很多麻烦。今天早上这让我笑个不停。我宁愿随时使用我的第一个解决方案,以便在几秒钟内解决问题。但 alexurba 的第一个解决方案是最不黑客的,并且非常令人满意地完成了工作。我只想说,这个企业让我学到了很多关于 TeX 的知识。