替换参数字符串中的字符

替换参数字符串中的字符

我正在尝试创建一个 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}

相关内容