![替换参数字符串中的字符](https://linux22.com/image/243037/%E6%9B%BF%E6%8D%A2%E5%8F%82%E6%95%B0%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6.png)
我正在尝试创建一个 LaTeX 命令,以便我能够轻松插入预定义表格。这还允许我全局更改表格的整体格式(例如上方或下方的标题),而无需修改每个实例。
理想情况下,我正在考虑类似 的内容\includetable{label}{caption}
,其中label
对应于浮动标签(用于链接目的),caption
对应于显示在表格上方(或下方)的标题。我还想使用label
来作为文件名,例如表格内容将在 中定义label.tex
。
我遇到的问题是,我在标签中使用冒号来以一致的方式区分表格、图形和部分。例如,与结构质量预算相关的表格将具有类似这样的标签t:structure:mass
;在 Windows 中,文件名中不能有冒号,因此我希望函数\includetable
在调用时用连字符替换冒号\input
。
我在 Stack Overflow 上找到的最接近的答案是https://stackoverflow.com/questions/95824/replace-a-character-with-a-string-in-latex,但我无法用冒号代替逗号来解决这个问题。有什么建议吗?
答案1
\usepackage{xstring}
\newcommand{\includetable}[2]{%
\begin{table}
\centering
\caption{#2}\label{#1}
\StrSubstitute{#1}{:}{-}[\temp]%
\input{\temp}
\end{table}}
可能存在一些变化。例如,可以考虑使用键值语法来决定标题的位置并提供简短的标题。
答案2
使用 luaTeX 进行编译。
\documentclass{article}
\begin{filecontents*}{t-mysection-mytable.tab}
\begin{tabular}{c|c}
10 & 20 \\
20 & 40
\end{tabular}
\end{filecontents*}
\def\includetable#1#2{%
\begin{table}
\centering
\input{%
\directlua{%
local s, _ = string.gsub("#1",":","-")
tex.sprint(s)}.tab}%
\caption{#2}\label{#1}
\end{table}}
\begin{document}
\includetable{t:mysection:mytable}{My table}
\end{document}