我有以下代码:
\documentclass[a4paper]{article}
%% Language and font encodings
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[a4paper,top=3cm,bottom=2cm,left=3cm,right=3cm,marginparwidth=1.75cm]{geometry}
%% Useful packages
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{tikz} % For graphics
\usepackage{pgfplots}
\usepackage{xcolor}
\usetikzlibrary{matrix,arrows,calc,positioning,shapes,decorations.pathreplacing}
\usepackage{graphicx}
\usepackage{tikz-uml}
\title{Your Paper}
\author{You}
\begin{document}
\maketitle
\section{Introduction}
Diagram below:
\small\begin{tikzpicture}
\begin{umlseqdiag}
\umlactor{User}
\umlobject{Proxy}
\umlobject[x=7]{Entry station}
\umlobject[x=10]{Dst station}
\begin{umlcall}[op=retrieve(token),return=pkt-info]{User}{Proxy}
\begin{umlcall}[op=RReq,return=success]{Proxy}{Entry station}
\end{umlcall}
\begin{umlcall}[op=RReq,return=success]{Entry station}{Dst station}
\end{umlcall}
\begin{umlcallself}[op=lookup,return=pkt-info]{Dst station}
\end{umlcallself}
\begin{umlcall}[op=RRes,return=success]{Dst station}{Entry station}
\end{umlcall}
\begin{umlcall}[op=RRes,return=success]{Entry station}{Proxy}
\end{umlcall}
\end{umlcall}
\begin{umlfragment}[type=loop, label=$\forall p_k$, inner ysep=1]
\begin{umlcall}[dt=7, op=retrieve(token $p_k$),return=fragment $p_k$]{User}{Proxy}
\umlcreatecall[x=7]{Proxy}{Station}
\begin{umlcall}[op=RRes,return=success]{Proxy}{Station}
\end{umlcall}
\end{umlcall}
\end{umlfragment}
\begin{umlcallself}[dt=5, op=aggregate($p_k$), return=packet $p$]{User}
\end{umlcallself}
\end{umlseqdiag}
\end{tikzpicture}
\end{document}
问题出在 object 上Station
。我实际上不想进行 create 调用。我只想将该通道放置在那里供 objectStation
使用,仅此而已。我不希望create
发生该调用。
如果不可能的话,我至少怎样才能更改标签,使其不显示create
其他内容?
答案1
该节点的文本直接写在包的代码中(最新版本的第 4622 行),它不由某些可以重新定义的宏来表示。
但是,您可以借助 来xpatch
修补 的定义,例如用 替换\umlcreatecall
,您可以根据需要定义和重新定义 宏。下面我最初将其定义为,然后在图中用重新定义它。{create}
{\CreateTxt}
\newcommand{\CreateTxt}{create}
\renewcommand
无关注释:您加载了graphicx
两次,这实际上不是必需的。并且graphicx
和xcolor
都由加载tikz
,因此明确添加它们并不是绝对必要的。tikz
反过来,由pgfplots
和加载tikz-uml
,因此只要有一个存在,您就明白了。
\documentclass[a4paper]{article}
%% Language and font encodings
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[a4paper,top=3cm,bottom=2cm,left=3cm,right=3cm,marginparwidth=1.75cm]{geometry}
%% Useful packages
\usepackage{amsmath}
\usepackage{tikz-uml}
\usepackage{xpatch}
\newcommand\CreateTxt{create}
% in the macro \umlcreatecall, replace "{create}" with "{\CreateTxt}":
\xpatchcmd{\umlcreatecall}{{create}}{{\CreateTxt}}{}{}
\begin{document}
\begin{tikzpicture}
\small
\begin{umlseqdiag}
\umlactor{User}
\umlobject{Proxy}
\umlobject[x=7]{Entry station}
\umlobject[x=10]{Dst station}
\begin{umlcall}[op=retrieve(token),return=pkt-info]{User}{Proxy}
\begin{umlcall}[op=RReq,return=success]{Proxy}{Entry station}
\end{umlcall}
\begin{umlcall}[op=RReq,return=success]{Entry station}{Dst station}
\end{umlcall}
\begin{umlcallself}[op=lookup,return=pkt-info]{Dst station}
\end{umlcallself}
\begin{umlcall}[op=RRes,return=success]{Dst station}{Entry station}
\end{umlcall}
\begin{umlcall}[op=RRes,return=success]{Entry station}{Proxy}
\end{umlcall}
\end{umlcall}
\begin{umlfragment}[type=loop, label=$\forall p_k$, inner ysep=1]
\begin{umlcall}[dt=7, op=retrieve(token $p_k$),return=fragment $p_k$]{User}{Proxy}
% redefine \CreateTxt to be empty
\renewcommand\CreateTxt{}
\umlcreatecall[x=7]{Proxy}{Station}
\begin{umlcall}[op=RRes,return=success]{Proxy}{Station}
\end{umlcall}
\end{umlcall}
\end{umlfragment}
\begin{umlcallself}[dt=5, op=aggregate($p_k$), return=packet $p$]{User}
\end{umlcallself}
\end{umlseqdiag}
\end{tikzpicture}
\end{document}