我对图形有以下构造。背景是,当\submit
定义时,只包含标题,但不包含图形。否则包含图形。
问题是我有两个地方需要放置相同的标题。保持同步很麻烦。我希望有一种简单的方法可以将文本保存为一个值,并将其输入到两个地方。我有多个这样的图形,所以我想以尽可能通用的方式执行此操作。因此,如果我有 n 个图形,我希望一个命令或函数(而不是 n 个)来完成这项工作。此外,这是针对不喜欢额外软件包的期刊,所以我需要一个不需要特殊软件包的解决方案。我还对使用不同方法的解决方案感兴趣。
\newcommand{\figlegend}{% figure legend
\refstepcounter{figure}% Increment counter for correct referencing
}
\ifdefined\submit \figlegend
Caption text
\label{schema}
\else
\par \mbox{}
\par
\begin{figure}[tp]
\begin{center}
\tikzsetnextfilename{Figure1-schema}
\input{SCHEMA}
\caption{%
Caption text
}
\label{schema}
\end{center}
\end{figure}
\fi
编辑:我编辑了标题以更准确地反映我在这里尝试做的事情。@Mike Renfro 认为可以通过不包括\submit
活动图来解决问题。因此,我已将代码更改为我实际使用的代码。\input{SCHEMA}
输入SCHEMA.tex
包含 TikZ/PGF 代码的文件。
EDIT2:再次编辑标题。不同寻常的是,我接受了一个没有回答我原始问题的答案。@麦克伦弗洛令人信服地证明了我问错了问题。我认为他对我没有问的问题给出了更好的答案,即如何抽象出我的条件构造。谢谢 Mike!
答案1
这听起来像这个问题,至少对于这个特定的应用程序来说是这样。在这种情况下,类似这样的内容:
\documentclass{article}
\usepackage[demo]{graphicx} % demo option only useful for demonstration purposes
%\newcommand{\submit}{1}
\ifdefined\submit
\relax
\else
\renewcommand{\includegraphics}[2][]{\fbox{}}
\fi
\begin{document}
Here's some text.
\begin{figure}[tp]
\centering
\includegraphics[width=0.5\textwidth]{foo}
\caption{Some text}
\label{schema}
\end{figure}
\end{document}
返回
如果提交定义被注释(即单独的草稿模式),并且
如果它是活动的(即准备提交)。如果对额外包的限制不是绝对的,您也可以使用 documentclass 的现有草稿模式,并使用草案包裹。
编辑——修改后的版本逻辑相反(\submit
意味着省略图形),当图形被隐藏时,除了标题外没有输出。将上面的\ifdefined
...\fi
块替换为:
\ifdefined\submit
\renewcommand{\includegraphics}[2][]{\relax}
\else
\relax
\fi
第二次编辑--为了使这项工作不简单地重新定义\includegraphics
:
定义提交:
无需提交定义:
\documentclass{article}
\usepackage{tikz} \usetikzlibrary{external} \tikzexternalize
\newcommand{\figlegend}{% figure legend
\refstepcounter{figure}% Increment counter for correct referencing
}
\newcommand{\submit}{1}
\ifdefined\submit
\newcommand{\makefigure}[3]{\figlegend #2 \label{#1}}
\else
\newcommand{\makefigure}[3]{%
\par
\mbox{}
\par
\begin{figure}[tp]
\centering
\tikzsetnextfilename{figure-#3} \input{#3}
\caption{#2}
\label{#1}
\end{figure}
}
\fi
\begin{document}
Here's some text.
\makefigure{schema}{The Caption}{basic}
\end{document}
如果由于某种原因您需要对生成的图形进行额外的控制,请向定义添加额外的参数\makefigure
并#
相应地插入占位符。
答案2
答案3
(基于@0x06d64 的回答。)我猜最“类似 LaTeX”的做法是使用 来\newcommand
保存文本(下面的第一行),但该定义将仅限于\savestring
出现的环境。如果您希望能够\savestring
在环境内部使用,而#1
仍在外部定义,则需要进行全局分配,例如使用\gdef
。由于这是 TeX 原语,\gdef{#1}{#2}
因此不起作用。
%\newcommand{\savestring}[2]{\newcommand{#1}{#2}}
\newcommand{\savestring}[2]{\gdef#1{#2}}
用作\savestring\stringA{Some text to save} ... \stringA
。
其实,我们可以直接使用\gdef\stringA{Some text to save}
。不知道我在想什么。