
Ich habe mich gefragt, wie man die kreisförmige Anordnung einrichten könnte, die man siehtHierin Abbildung „(2)“ – also in einer Reihe gerader Linien, die von einem zentralen Punkt ausgehen.
Das Nützlichste, was ich bisher finden konnte, istEinen Buchstaben drehen(mehr oder weniger ein richtiges Tutorial) auf dem Paket. Ich bin sicher, dass es mit einer entmutigend mühsamen Kombination aus und und Befehlen graphicx
machbar wäre , aber ich hatte gehofft, dass jemand eine elegantere Lösung kennt.graphicx
hspace
vspace
(Ich wollte nach dem anderen Typ mit den kreisförmigen Grundlinien fragen, aberWie kann ich die Drehung von Text entlang eines Kreispfads feinabstimmen?scheint das ziemlich ausführlich zu klären.)
AKTUALISIEREN:Vielen Dank anAbonnierendafür, dass Sie mir dabei geholfen haben, das meiste aus der Sache herauszuholen, und dass Sie sich die Mühe gemacht haben, es mit hebräischen Buchstaben zu machen! Ich wollte nur alle anderen, die vielleicht noch weitere Ideen einbringen möchten, wissen lassen, dass in weiteren Beispielen lateinische Buchstaben ausreichen.
Antwort1
Bei Sprachen, die von rechts nach links geschrieben werden, sind Dekorationen nicht so vielseitig, aber im Folgenden wird eine Vorgehensweise gezeigt. Sie erfordert die Kompilierung mit lualatex
. Möglicherweise PSTricks
ließe sich das besser machen.
Außerdem verwende ich die Schriftart freesans
, die auf Ihrem System möglicherweise nicht verfügbar ist.
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.text}
\usepackage{fontspec}
\newfontfamily\hebrewfont[Script=Hebrew]{freesans}
\tikzset{
decorate path with hebrew/.style={
decoration={
text along path,
text={|\luatextextdir TRT\hebrewfont|#1},
},
decorate,
},
hebrew text/.style={
font=\hebrewfont,
execute at begin node={\luatextextdir TRT}
}
}
\begin{document}
\begin{tikzpicture}
\path [decorate path with hebrew={מלון אבוקדו מישמש תפוח אבוקדו אבטיח אשכולית גזר}]
circle [radius=1.25cm];
\foreach \w [count=\i from 0] in {מלון,אבוקדו,מישמש,תפוח,אבוקדו,אבטיח,אשכולית,גזר}
\node [hebrew text, anchor=west,shift=(\i*45:1.25cm), rotate=\i*45] {\w};
\end{tikzpicture}
\end{document}
Um die Grundlinie auf der Innenseite zu erhalten, reverse path
kann der Schlüssel mit der Dekoration verwendet werden. Beachten Sie, dass die erfolgreiche Verwendung dieses Schlüssels davon abhängt, wie der Pfad intern für den Kreis gezeichnet wird (d. h. im Uhrzeigersinn). Wenn der Kreis manuell mit vier Bögen gegen den Uhrzeigersinn gezeichnet würde, reverse path
wäre der Schlüssel unnötig (wenn der Autor der Dekorations-Engine schlau genug wäre, würde er natürlich einen Weg finden, die Richtung des Pfads automatisch zu bestimmen ;-)
Die einzige Möglichkeit, die mir einfällt, um die Buchstaben zu stapeln, besteht darin, grob über jeden Buchstaben des Wortes zu iterieren, was ich mit dem Makro getan habe \stackletters
. Beachten Sie, dass der align
Schlüsselmussin den Optionen verwendet werden, \node
damit das Stapeln funktioniert. Beachten Sie auch die Änderung in anchor
und Drehung.
Um in die andere Richtung (also nach innen) zu stapeln, ändern Sie anchor
in south
und verwenden Sie rotate=\i*45-90
. Dies könnte in einen Stil eingebunden werden.
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.text}
\usepackage{fontspec}
\newfontfamily\hebrewfont[Script=Hebrew]{freesans}
\tikzset{
decorate path with hebrew outside/.style={
postaction={
decoration={
text along path,
text={|\luatextextdir TRT\hebrewfont|#1},
reverse path, % Make decoration go the other way
},
decorate
}
},
hebrew text/.style={
font=\hebrewfont,
execute at begin node={\luatextextdir TRT}
}
}
\def\stackletters#1{\let\flag=\relax\expandafter\dostackletters#1;}
\def\dostackletters#1{%
\ifx#1;%
\else%
\ifx\flag\relax%
#1%
\let\flag=\stackletters%
\else%
\\[-0.25\baselineskip]#1%
\fi%
\expandafter\dostackletters%
\fi}
\begin{document}
\begin{tikzpicture}
\path [decorate path with hebrew outside={מלון אבוקדו מישמש תפוח אבוקדו אבטיח אשכולית גזר}]
circle [radius=1cm];
\foreach \w [count=\i from 0] in {מלון,אבוקדו,מישמש,תפוח,אבוקדו,אבטיח,אשכולית,גזר}
\node [hebrew text, align=center, anchor=north, shift=(\i*45:1.25cm), rotate=\i*45+90] {\stackletters{\w}};
\end{tikzpicture}
\end{document}
Also, wie gewünscht, gibt es eine Version mit lateinischen Buchstaben, die kein erfordert lualatex
. Der Code zum Stapeln der Knoteninhalte wurde etwas geändert.
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.text}
\tikzset{
decorate path with text outside/.style={
postaction={
decoration={
text along path,
text={#1},
reverse path, % Make decoration go the other way
},
decorate
}
},
}
\def\stacknodecontents#1\ignorespaces{%
% #1 contains a whole load of internal TikZ code
% which terminates with an \ignorespaces
% (just before the node text begins)
#1\ignorespaces%
\let\stacknext=\relax%
% \expandafter in case the node text is a macro.
\expandafter\dostacknodecontentslet}
\def\dostacknodecontentslet{%
\afterassignment\dostacknodecontentstypeset%
% Need global.
\global\let\stacktoken=}
\def\dostacknodecontentstypeset{%
\ifx\stacktoken\egroup% <- the } at the end of the node.
\let\stacknext=\stacktoken%
\else%
% If \stacknext is \relax then \stacktoken is the first
% token, and does not require a new line.
\ifx\stacknext\dostacknodecontentslet%
\\[-0.25\baselineskip]% Should parameterise this.
\fi%
\stacktoken%
\let\stacknext=\dostacknodecontentslet%
\fi%
\stacknext}
\tikzset{
stack node text/.style={
align=center,
execute at begin node=\stacknodecontents%
}
}
\begin{document}
\begin{tikzpicture}
\path [decorate path with text outside={apple banana celary date egg fig grape honey}]
circle [radius=1.1212cm];
\foreach \w [count=\i from 0] in {apple, banana, celary, date, egg, fig, grape, honey}
\node [stack node text, anchor=north, shift=(\i*45:1.3636cm), rotate=\i*45+90] {\w};
\end{tikzpicture}
\end{document}