가운데에 두 개의 작은 표시가 있는 수평선인 동일선을 그리고 싶습니다.
내 첫 번째 시도는 \dittoLatex
문자와 규칙이 포함된 상자를 사용하는 것이었지만 솔직히 보기 흉했습니다.
두 번째 시도는 \dittotikzA
훨씬 좋아 보이지만 인수에서 너비를 자동으로 계산하지 않습니다.
세 번째 시도는 \dittotikzB
너비를 계산하는 데 동일한 방법을 사용하려고 시도했지만 \dittoLatex
작동하지 않습니다. 단위가 일치하지 않는 문제인 것 같은데 해결 방법을 모르겠습니다.
MWE:
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{xparse}
\makeatletter
\usepackage{tikz}
\usetikzlibrary{math}
\newcommand\dittotikzA[1][3em]{%
\def\x{#1/4}%
%\show\x%
\def\y{#1*.01}%
\begin{tikzpicture}[x=1ex,y=1ex,baseline=-.5ex,cap=round]
\draw (0,0) sin (1*\x,\y) cos (2*\x,0) sin (3*\x,-\y) cos (4*\x,0);
\draw[xshift=-.2ex, bend right=20] (2*\x-.5,-.5) edge (2*\x+.5,.5);
\draw[xshift=.2ex, bend right=20] (2*\x-.5,-.5) edge (2*\x+.5,.5);
\end{tikzpicture}%
}
\newlength{\ditto@width}
\NewDocumentCommand\dittotikzB{ s O{1em} m }{%
% #1 = starred means horizontal line along entire width, unstarred means no line (only ditto marks)
% #2 = minimum width
% #3 = string to use for calculating width
\settowidth{\ditto@width}{#3}%
%\show\ditto@width%
\edef\w{\ifdim#2<\ditto@width\the\ditto@width\else#2\fi}
%\show\w%
\begin{tikzpicture}[x=1ex,y=1ex,baseline=-.5ex,cap=round]
\tikzmath{
\xfactor = \w / 4 * 1pt/1ex;
\yfactor = .175;
};
%\show\xfactor;
%\show\yfactor;
\IfBooleanT{#1}{% starred
\draw (0,0) sin (1\xfactor, \yfactor) cos (2\xfactor, 0) sin (3\xfactor, -\yfactor) cos (4\xfactor, 0);
};
\draw[xshift=-.2ex, bend right=20] (2\xfactor - .5, -.5) edge (2\xfactor + .5, .5);
\draw[xshift=.2ex, bend right=20] (2\xfactor - .5, -.5) edge (2\xfactor + .5, .5);
\end{tikzpicture}%
}
\usepackage{xhfill}
\newcommand\ditto@symbol{%
||%
}
\NewDocumentCommand\dittoLatex{ s O{1em} m }{%
% #1 = starred means horizontal line along entire width, unstarred means no line (only ditto marks)
% #2 = minimum width
% #3 = string to use for calculating width
\settowidth{\ditto@width}{#3}%
\makebox[{\ifdim#2<\ditto@width\ditto@width\else#2\fi}]{%
\IfBooleanTF{#1}{% starred
\xrfill[.5ex]{.4pt}%
\ditto@symbol%
\xrfill[.5ex]{.4pt}%
}{%
\ditto@symbol%
}%
}%
}
\makeatother
\begin{document}
\let\ditto=\dittotikzA
\noindent
blah blah \ditto{} blah blah\\
blah blah \ditto[10em]{} blah blah\\
\let\ditto=\dittotikzB
\noindent
blah blah Test blah blah\\
blah blah \ditto{Test} blah blah\\
blah blah \ditto*{Test} blah blah\\
blah blah Testing testing blah blah\\
blah blah \ditto{Testing testing} blah blah\\
blah blah \ditto*{Testing testing} blah blah\\
blah blah \ditto{} blah blah\\
blah blah \ditto*{} blah blah\\
blah blah \ditto[10em]{Test} blah blah\\
blah blah \ditto*[10em]{Test} blah blah\\
blah blah \ditto[10em]{Testing testing} blah blah\\
blah blah \ditto*[10em]{Testing testing} blah blah\\
blah blah \ditto[10em]{} blah blah\\
blah blah \ditto*[10em]{} blah blah\\
\let\ditto=\dittoLatex
\noindent
blah blah Test blah blah\\
blah blah \ditto{Test} blah blah\\
blah blah \ditto*{Test} blah blah\\
blah blah Testing testing blah blah\\
blah blah \ditto{Testing testing} blah blah\\
blah blah \ditto*{Testing testing} blah blah\\
blah blah \ditto{} blah blah\\
blah blah \ditto*{} blah blah\\
blah blah \ditto[10em]{Test} blah blah\\
blah blah \ditto*[10em]{Test} blah blah\\
blah blah \ditto[10em]{Testing testing} blah blah\\
blah blah \ditto*[10em]{Testing testing} blah blah\\
blah blah \ditto[10em]{} blah blah\\
blah blah \ditto*[10em]{} blah blah\\
\end{document}
몇 가지 관련 질문:
답변1
곱셈 기호를 잊어버렸습니다. 4\xfactor는 4*\xfactor가 아닙니다.
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{xparse}
\makeatletter
\usepackage{tikz}
\usetikzlibrary{math}
\newcommand\w{}
\newlength{\ditto@width}
\NewDocumentCommand\dittotikzB{ s O{1em} m }{%
% #1 = starred means horizontal line along entire width, unstarred means no line (only ditto marks)
% #2 = minimum width
% #3 = string to use for calculating width
\settowidth{\ditto@width}{#3}%
%\show\ditto@width%
\edef\w{\ifdim#2<\ditto@width\the\ditto@width\else\dimexpr#2\relax\fi}
%\show\w%
\begin{tikzpicture}[x=1ex,y=1ex,baseline=-.5ex,cap=round]
\tikzmath{
\xfactor = \w / 4 * 1pt/1ex;
\yfactor = .175;
};
%\show\xfactor;
%\show\yfactor;
\IfBooleanT{#1}{% starred
\draw (0,0) sin (1*\xfactor, \yfactor) cos (2*\xfactor, 0) sin (3*\xfactor, -\yfactor) cos (4*\xfactor, 0);
};
\draw[xshift=-.2ex, bend right=20] (2*\xfactor - .5, -.5) edge (2*\xfactor + .5, .5);
\draw[xshift=.2ex, bend right=20] (2*\xfactor - .5, -.5) edge (2*\xfactor + .5, .5);
\end{tikzpicture}%
}
\makeatother
\begin{document}
\let\ditto=\dittotikzB
\noindent
blah blah Test blah blah\\
blah blah \ditto{Test} blah blah\\
blah blah \ditto*{Test} blah blah\\
blah blah Testing testing blah blah\\
blah blah \ditto{Testing testing} blah blah\\
blah blah \ditto*{Testing testing} blah blah\\
blah blah \ditto{} blah blah\\
blah blah \ditto*{} blah blah\\
blah blah \ditto[10em]{Test} blah blah\\
blah blah \ditto*[10em]{Test} blah blah\\
blah blah \ditto[10em]{Testing testing} blah blah\\
blah blah \ditto*[10em]{Testing testing} blah blah\\
blah blah \ditto[10em]{} blah blah\\
blah blah \ditto*[10em]{} blah blah\\
\end{document}