У меня есть несколько графиков, которые включают пунктирные линии. В PDF все выглядит именно так, как и должно быть. Однако при печати пунктирная линия полностью исчезает. Что мне сделать, чтобы этого не произошло?
\begin{tikzpicture}
\node (a) at (0,1) [vertex] {};
\node (b) at (0.7,1.7) [vertex] {};
\node (c) at (1.7,1.7) [vertex] {};
\node (d) at (2.4,1) [vertex] {};
\node (e) at (1.7,0.3) [vertex] {};
\node (f) at (0.7,0.3) [vertex] {};
\draw (a) -- (b);
\draw (b) -- (c);
\draw (c) -- (d);
\draw (d) -- (e);
\draw (e) -- (f);
\draw [dashed] (f) -- (a);
\end{tikzpicture}
решение1
Моя работа связана с отправкой большого количества PDF-файлов по электронной почте для распечатки, поэтому решение «обновите драйвер принтера» мне не особо помогает.
Но я обнаружил, что хотя пунктирные или штриховые линиилинииотказываются печатать, пунктир или штрихпунктирсинусоидыотображаются нормально, даже если амплитуда равна нулю. Поэтому я поместил следующее в начало моего документа:
\usetikzlibrary{snakes}
\tikzstyle{printersafe}=[snake=snake,segment amplitude=0 pt]
Затем добавьте [printersafe] в качестве стиля к каждой пунктирной линии в коде, например:
\draw [densely dotted,printersafe] (0,-6) -- (10,-6);
Эти линии отображаются нормально, даже если их распечатывают технические специалисты, которые столкнулись с первоначальной проблемой.
решение2
Итак, я недавно столкнулся с этой проблемой и нашел решение @Jonah. Дело в том, что оно не очень-то работает с тем, как сейчас ведет себя tikz, поэтому я внес следующие изменения, которые должны сделать этот код более актуальным:
\usetikzlibrary{decorations.pathmorphing}
\tikzstyle{printersafe}=[decoration={snake,amplitude=0pt}]
С этим вы также можете использовать printersafe в средах tikz-cd. Надеюсь, это поможет!
решение3
Использование нового принтера решило проблему, так что, по всей видимости, проблема БЫЛА в драйвере, как и предположил Пол.
решение4
Другое решение: нарисовать собственные пунктирные линии
Кажется, Tikz не всегда делает то, что мы от него ожидаем. Особенно в сочетании с такими вещами, как edge[transform canvas={xshift=4}]
или пользовательские функции, такие как закругленные стрелки, которые можно найти вэта почта. В таких случаях принтер иногда просто не печатает нормальные пунктирные линии. Вот почему нам нужно использовать обходной путь.
Другой ответ спринтербезопасныйне сработало у меня. Кроме того, я хочу отправить pdf другим людям, чтобы не обновлять их принтеры. Мне нужно было решение, которое всегда работало.
Я нашел обходной путь, который имитирует пунктирную линию с помощью foreach
цикла с обычными линиями:
\documentclass[a4paper]{article}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{figure}[h!]
\begin{tikzpicture}[every path/.style={>=latex}]
% Normal dashed line
\draw[->,thick,black,dashed] (0,1) -- (4,1) node[anchor=west] {Normal dashed line};
% Specify dashed line starting coordinate and length
\def\x{0}; \def\y{0}; \def\length{4} \def\N{19};
% Draw dashed line using normal lines
\pgfmathsetmacro{\step}{(0.5+1/(4*\N))*\length/\N}; \pgfmathparse{\N-1};
\foreach \i in {0,...,\pgfmathresult} {\draw[thick,black] (\x+2*\i*\step,\y) -- (\x+2*\i*\step+\step,\y);};
\draw[->,thick,black] (\x+\length,\y) -- (\x+\length+0.01,\y) node[anchor=west] {Custom dashed line};
\end{tikzpicture}
\end{figure}
\end{document}
Это просто имитирует обычную пунктирную линию, рисуя несколько линий друг за другом. Параметры — \x
для начальной x-координаты, \y
для y-уровня линии, \length
для длины в координатах линии и \N
для количества полос.
В представленном примере рисуются только горизонтальные линии слева направо, но код можно легко изменить для рисования других пунктирных линий (например, вертикальных линий, справа налево и т. д.).
Это решение по-прежнему позволит вам печатать пунктирные линии, если ваш принтерделаетпечатает обычные линии, но пунктирные линии не отображаются (по какой-то причине).