How to repeat the same content in different tables?











up vote
3
down vote

favorite












I have a list of keywords and descriptions for those keywords. I would like to have tables for the different contexts in which these are used, containing only the relevant ones for the case. Some of these keywords repeat on the different contexts, so it would be ideal to write the description only once and then "reference" that description in each of my tables for ease of maintenance.



Example:



section{Runtype 1 description}
begin{table}
begin{center}
begin{tabular}{ l l }
runtype & Keyword to determine runtype. Can be 1 or 2. \
& I don't want to hardcode this description twice...\
param_1 & Keyword to determine the parameter of runtype = 1 \
end{tabular}
end{center}
end{table}

section{Runtype 2 description}
begin{table}
begin{center}
begin{tabular}{ l l }
runtype & Keyword to determine runtype. Can be 1 or 2. \
& I don't want to hardcode this description twice...\
param_2 & Keyword to determine the parameter of runtype = 2 \
end{tabular}
end{center}
end{table}









share|improve this question







New contributor




Nordico is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 1




    Welcome to TeX.SE!
    – Kurt
    7 hours ago










  • @Kurt Thank you!
    – Nordico
    7 hours ago















up vote
3
down vote

favorite












I have a list of keywords and descriptions for those keywords. I would like to have tables for the different contexts in which these are used, containing only the relevant ones for the case. Some of these keywords repeat on the different contexts, so it would be ideal to write the description only once and then "reference" that description in each of my tables for ease of maintenance.



Example:



section{Runtype 1 description}
begin{table}
begin{center}
begin{tabular}{ l l }
runtype & Keyword to determine runtype. Can be 1 or 2. \
& I don't want to hardcode this description twice...\
param_1 & Keyword to determine the parameter of runtype = 1 \
end{tabular}
end{center}
end{table}

section{Runtype 2 description}
begin{table}
begin{center}
begin{tabular}{ l l }
runtype & Keyword to determine runtype. Can be 1 or 2. \
& I don't want to hardcode this description twice...\
param_2 & Keyword to determine the parameter of runtype = 2 \
end{tabular}
end{center}
end{table}









share|improve this question







New contributor




Nordico is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 1




    Welcome to TeX.SE!
    – Kurt
    7 hours ago










  • @Kurt Thank you!
    – Nordico
    7 hours ago













up vote
3
down vote

favorite









up vote
3
down vote

favorite











I have a list of keywords and descriptions for those keywords. I would like to have tables for the different contexts in which these are used, containing only the relevant ones for the case. Some of these keywords repeat on the different contexts, so it would be ideal to write the description only once and then "reference" that description in each of my tables for ease of maintenance.



Example:



section{Runtype 1 description}
begin{table}
begin{center}
begin{tabular}{ l l }
runtype & Keyword to determine runtype. Can be 1 or 2. \
& I don't want to hardcode this description twice...\
param_1 & Keyword to determine the parameter of runtype = 1 \
end{tabular}
end{center}
end{table}

section{Runtype 2 description}
begin{table}
begin{center}
begin{tabular}{ l l }
runtype & Keyword to determine runtype. Can be 1 or 2. \
& I don't want to hardcode this description twice...\
param_2 & Keyword to determine the parameter of runtype = 2 \
end{tabular}
end{center}
end{table}









share|improve this question







New contributor




Nordico is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











I have a list of keywords and descriptions for those keywords. I would like to have tables for the different contexts in which these are used, containing only the relevant ones for the case. Some of these keywords repeat on the different contexts, so it would be ideal to write the description only once and then "reference" that description in each of my tables for ease of maintenance.



Example:



section{Runtype 1 description}
begin{table}
begin{center}
begin{tabular}{ l l }
runtype & Keyword to determine runtype. Can be 1 or 2. \
& I don't want to hardcode this description twice...\
param_1 & Keyword to determine the parameter of runtype = 1 \
end{tabular}
end{center}
end{table}

section{Runtype 2 description}
begin{table}
begin{center}
begin{tabular}{ l l }
runtype & Keyword to determine runtype. Can be 1 or 2. \
& I don't want to hardcode this description twice...\
param_2 & Keyword to determine the parameter of runtype = 2 \
end{tabular}
end{center}
end{table}






tables






share|improve this question







New contributor




Nordico is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question







New contributor




Nordico is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question






New contributor




Nordico is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 7 hours ago









Nordico

1183




1183




New contributor




Nordico is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Nordico is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Nordico is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 1




    Welcome to TeX.SE!
    – Kurt
    7 hours ago










  • @Kurt Thank you!
    – Nordico
    7 hours ago














  • 1




    Welcome to TeX.SE!
    – Kurt
    7 hours ago










  • @Kurt Thank you!
    – Nordico
    7 hours ago








1




1




Welcome to TeX.SE!
– Kurt
7 hours ago




Welcome to TeX.SE!
– Kurt
7 hours ago












@Kurt Thank you!
– Nordico
7 hours ago




@Kurt Thank you!
– Nordico
7 hours ago










3 Answers
3






active

oldest

votes

















up vote
1
down vote



accepted










documentclass[12pt]{article}
newcommandzzz{%
runtype & Keyword to determine runtype. Can be 1 or 2. \
& I don't want to hardcode this description twice...}
begin{document}
section{Runtype 1 description}
begin{table}[ht]
begin{center}
begin{tabular}{ l l }
zzz\
param_1 & Keyword to determine the parameter of runtype = 1 \
end{tabular}
end{center}
end{table}

section{Runtype 2 description}
begin{table}[ht]
begin{center}
begin{tabular}{ l l }
zzz\
param_2 & Keyword to determine the parameter of runtype = 2 \
end{tabular}
end{center}
end{table}
end{document}


enter image description here






share|improve this answer





















  • Ok, this works but feels like using a cannon to kill a fly. More precisely: I need to use this with around a hundred keywords, is defining a hundred newcommand to use as a "reference dictionary" advisable? How can I use descriptive names (tablekey_keyname) without using underscores?
    – Nordico
    7 hours ago










  • @Nordico As to how to use underscores in a command name, options are limited: 1) change catcode of _ (not recommended, as it breaks subscript math), or 2) csdef and csuse with the etoolbox package (recommended if you insist on underscore in name)
    – Steven B. Segletes
    7 hours ago












  • I mean, not necessarily an underscore, it can be other symbol ("tablekey.keyname") or a way of structuring the commands (like an equivalent to C++ namespaces, so I could do "tablekey::keyname"), anything that makes it more human readable/usable than just altogether "tablekeykeyname".
    – Nordico
    7 hours ago








  • 1




    @Nordico In my example, add catcode`:=11 as the first line after documentclass, This changes : to be a "letter". Then newcommandzz:z{...} can be defined and later used as zz:z. What I don't know is if this breaks anything (e.g., spacing, hyphenation), if you use : as a normal character.
    – Steven B. Segletes
    7 hours ago




















up vote
2
down vote













Below, I'm defining the following commands:





  • setkeyword{<keyword>}{<description>} can be used to declare a keyword.


  • getkeyword{<keyword>} retrieves the description you provided.


  • keywordtable{<key1>,<key2>,…} displays a table containing the descriptions corresponding to a comma-separated list of keywords.


(Note that keywords containing underscores are allowed.)



documentclass{article}

usepackage[T1]{fontenc} %% <- necessary for _ to be displayed correctly
usepackage{etoolbox} %% <- for csuse, csdef, ifcsdef and forcsvlist
usepackage{tabularx}

newcommand*keyname[1]{keyw@#1} %% <- just prepends key@

%% Define/retrieve a new keyword:
newcommandsetkeyword[2]{csdef{keyname{#1}}{#2}}
newcommand*getkeyword[1]{%
ifcsdef{keyname{#1}}{% %% <- if the key is defined...
csuse{keyname{#1}}% %% <- return the description
}{% %% <- otherwise...
errmessage{Undefined key: #1}% %% <- ERROR
}%
}

%% Display a table describing a list of keywords:
newcommand*keywordtable[1]{%
begin{tabularx}{linewidth}{lX}
forcsvlist{tableentry}{#1} %% <- apply tableentry to each value in #1
end{tabularx}%
}
newcommand*tableentry[1]{%
formattableentry{detokenize{#1}}{getkeyword{#1}}%
}
newcommandformattableentry[2]{ #1 & #2 \ }

% %% Declaration of keywords:
setkeyword{runtype}{Keyword to determine runtype. Can be 1 or 2. par
I don't want to hardcode this description twiceldots}
setkeyword{param_1}{Keyword to determine the parameter of runtype = 1}
setkeyword{param_2}{Keyword to determine the parameter of runtype = 2}

begin{document}

section{Runtype 1 description}
keywordtable{runtype,param_1}

section{Runtype 2 description}
keywordtable{runtype,param_2}

end{document}


output





Some remarks





  • setkeyword{<keyword>}{<description>} effectively defines keyw@<keyword> for you, so that it expands to <definition>. You can't use this macro directly because its name contains an @.


  • getkeyword{<keyword>} just calls keyw@<keyword>.

  • I'm using the e-TeX primitive detokenize to print the keyword. This command strips all tokens in its argument of their special meaning (by changing their catcodes), so you can for instance use detokenize{param_1} safely.

  • Without usepackage[T1]{fontenc}, underscores are displayed as " ̇", rather than as "_". You'll probably want to use this package anyway because of the reasons outlined here.

  • I'm using tabularx to create a table that has the same width as the current line width. You can replace linewidth by some other value if you want a different width (or just use tabular, in which case you should replace the X column type by something else).






share|improve this answer






























    up vote
    1
    down vote













    It depends on where you want to first key the description you want to repeat.



    Probably the best place is in the document preamble or in an external file that you can input.



    documentclass{article}
    usepackage{xparse}

    % a few line of code for setting up the system
    ExplSyntaxOn

    NewDocumentCommand{newdesc}{mm}
    {% #1 is a key, #2 is the description
    prop_gput:Nnn g_nordico_descriptions_plist { #1 } { #2 }
    }

    NewDocumentCommand{getdesc}{m}
    {% #1 is a key
    prop_if_in:NnTF g_nordico_descriptions_plist { #1 }
    { prop_item:Nn g_nordico_descriptions_plist { #1 } }
    { ???~non~existent~description~??? }
    }

    prop_new:N g_nordico_descriptions_plist

    ExplSyntaxOff

    % the descriptions (they can go in an external file
    % say desc.tex and here you'd do input{desc}

    newdesc{A}{I don't want to hardcode this description twice...}

    begin{document}

    section{Runtype 1 description}
    begin{center}
    begin{tabular}{ l l }
    runtype & Keyword to determine runtype. Can be 1 or 2. \
    & getdesc{A} \
    param_1 & Keyword to determine the parameter of runtype = 1 \
    end{tabular}
    end{center}

    section{Runtype 2 description}
    begin{center}
    begin{tabular}{ l l }
    runtype & Keyword to determine runtype. Can be 1 or 2. \
    & getdesc{A} \
    param_2 & Keyword to determine the parameter of runtype = 2 \
    end{tabular}
    end{center}

    end{document}


    Note that it is not at all necessary to place a tabular in a floating table environment (which might make the tabular go to another page).



    enter image description here






    share|improve this answer





















      Your Answer








      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "85"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      convertImagesToLinks: false,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: null,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });






      Nordico is a new contributor. Be nice, and check out our Code of Conduct.










       

      draft saved


      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f462072%2fhow-to-repeat-the-same-content-in-different-tables%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      3 Answers
      3






      active

      oldest

      votes








      3 Answers
      3






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes








      up vote
      1
      down vote



      accepted










      documentclass[12pt]{article}
      newcommandzzz{%
      runtype & Keyword to determine runtype. Can be 1 or 2. \
      & I don't want to hardcode this description twice...}
      begin{document}
      section{Runtype 1 description}
      begin{table}[ht]
      begin{center}
      begin{tabular}{ l l }
      zzz\
      param_1 & Keyword to determine the parameter of runtype = 1 \
      end{tabular}
      end{center}
      end{table}

      section{Runtype 2 description}
      begin{table}[ht]
      begin{center}
      begin{tabular}{ l l }
      zzz\
      param_2 & Keyword to determine the parameter of runtype = 2 \
      end{tabular}
      end{center}
      end{table}
      end{document}


      enter image description here






      share|improve this answer





















      • Ok, this works but feels like using a cannon to kill a fly. More precisely: I need to use this with around a hundred keywords, is defining a hundred newcommand to use as a "reference dictionary" advisable? How can I use descriptive names (tablekey_keyname) without using underscores?
        – Nordico
        7 hours ago










      • @Nordico As to how to use underscores in a command name, options are limited: 1) change catcode of _ (not recommended, as it breaks subscript math), or 2) csdef and csuse with the etoolbox package (recommended if you insist on underscore in name)
        – Steven B. Segletes
        7 hours ago












      • I mean, not necessarily an underscore, it can be other symbol ("tablekey.keyname") or a way of structuring the commands (like an equivalent to C++ namespaces, so I could do "tablekey::keyname"), anything that makes it more human readable/usable than just altogether "tablekeykeyname".
        – Nordico
        7 hours ago








      • 1




        @Nordico In my example, add catcode`:=11 as the first line after documentclass, This changes : to be a "letter". Then newcommandzz:z{...} can be defined and later used as zz:z. What I don't know is if this breaks anything (e.g., spacing, hyphenation), if you use : as a normal character.
        – Steven B. Segletes
        7 hours ago

















      up vote
      1
      down vote



      accepted










      documentclass[12pt]{article}
      newcommandzzz{%
      runtype & Keyword to determine runtype. Can be 1 or 2. \
      & I don't want to hardcode this description twice...}
      begin{document}
      section{Runtype 1 description}
      begin{table}[ht]
      begin{center}
      begin{tabular}{ l l }
      zzz\
      param_1 & Keyword to determine the parameter of runtype = 1 \
      end{tabular}
      end{center}
      end{table}

      section{Runtype 2 description}
      begin{table}[ht]
      begin{center}
      begin{tabular}{ l l }
      zzz\
      param_2 & Keyword to determine the parameter of runtype = 2 \
      end{tabular}
      end{center}
      end{table}
      end{document}


      enter image description here






      share|improve this answer





















      • Ok, this works but feels like using a cannon to kill a fly. More precisely: I need to use this with around a hundred keywords, is defining a hundred newcommand to use as a "reference dictionary" advisable? How can I use descriptive names (tablekey_keyname) without using underscores?
        – Nordico
        7 hours ago










      • @Nordico As to how to use underscores in a command name, options are limited: 1) change catcode of _ (not recommended, as it breaks subscript math), or 2) csdef and csuse with the etoolbox package (recommended if you insist on underscore in name)
        – Steven B. Segletes
        7 hours ago












      • I mean, not necessarily an underscore, it can be other symbol ("tablekey.keyname") or a way of structuring the commands (like an equivalent to C++ namespaces, so I could do "tablekey::keyname"), anything that makes it more human readable/usable than just altogether "tablekeykeyname".
        – Nordico
        7 hours ago








      • 1




        @Nordico In my example, add catcode`:=11 as the first line after documentclass, This changes : to be a "letter". Then newcommandzz:z{...} can be defined and later used as zz:z. What I don't know is if this breaks anything (e.g., spacing, hyphenation), if you use : as a normal character.
        – Steven B. Segletes
        7 hours ago















      up vote
      1
      down vote



      accepted







      up vote
      1
      down vote



      accepted






      documentclass[12pt]{article}
      newcommandzzz{%
      runtype & Keyword to determine runtype. Can be 1 or 2. \
      & I don't want to hardcode this description twice...}
      begin{document}
      section{Runtype 1 description}
      begin{table}[ht]
      begin{center}
      begin{tabular}{ l l }
      zzz\
      param_1 & Keyword to determine the parameter of runtype = 1 \
      end{tabular}
      end{center}
      end{table}

      section{Runtype 2 description}
      begin{table}[ht]
      begin{center}
      begin{tabular}{ l l }
      zzz\
      param_2 & Keyword to determine the parameter of runtype = 2 \
      end{tabular}
      end{center}
      end{table}
      end{document}


      enter image description here






      share|improve this answer












      documentclass[12pt]{article}
      newcommandzzz{%
      runtype & Keyword to determine runtype. Can be 1 or 2. \
      & I don't want to hardcode this description twice...}
      begin{document}
      section{Runtype 1 description}
      begin{table}[ht]
      begin{center}
      begin{tabular}{ l l }
      zzz\
      param_1 & Keyword to determine the parameter of runtype = 1 \
      end{tabular}
      end{center}
      end{table}

      section{Runtype 2 description}
      begin{table}[ht]
      begin{center}
      begin{tabular}{ l l }
      zzz\
      param_2 & Keyword to determine the parameter of runtype = 2 \
      end{tabular}
      end{center}
      end{table}
      end{document}


      enter image description here







      share|improve this answer












      share|improve this answer



      share|improve this answer










      answered 7 hours ago









      Steven B. Segletes

      151k9191398




      151k9191398












      • Ok, this works but feels like using a cannon to kill a fly. More precisely: I need to use this with around a hundred keywords, is defining a hundred newcommand to use as a "reference dictionary" advisable? How can I use descriptive names (tablekey_keyname) without using underscores?
        – Nordico
        7 hours ago










      • @Nordico As to how to use underscores in a command name, options are limited: 1) change catcode of _ (not recommended, as it breaks subscript math), or 2) csdef and csuse with the etoolbox package (recommended if you insist on underscore in name)
        – Steven B. Segletes
        7 hours ago












      • I mean, not necessarily an underscore, it can be other symbol ("tablekey.keyname") or a way of structuring the commands (like an equivalent to C++ namespaces, so I could do "tablekey::keyname"), anything that makes it more human readable/usable than just altogether "tablekeykeyname".
        – Nordico
        7 hours ago








      • 1




        @Nordico In my example, add catcode`:=11 as the first line after documentclass, This changes : to be a "letter". Then newcommandzz:z{...} can be defined and later used as zz:z. What I don't know is if this breaks anything (e.g., spacing, hyphenation), if you use : as a normal character.
        – Steven B. Segletes
        7 hours ago




















      • Ok, this works but feels like using a cannon to kill a fly. More precisely: I need to use this with around a hundred keywords, is defining a hundred newcommand to use as a "reference dictionary" advisable? How can I use descriptive names (tablekey_keyname) without using underscores?
        – Nordico
        7 hours ago










      • @Nordico As to how to use underscores in a command name, options are limited: 1) change catcode of _ (not recommended, as it breaks subscript math), or 2) csdef and csuse with the etoolbox package (recommended if you insist on underscore in name)
        – Steven B. Segletes
        7 hours ago












      • I mean, not necessarily an underscore, it can be other symbol ("tablekey.keyname") or a way of structuring the commands (like an equivalent to C++ namespaces, so I could do "tablekey::keyname"), anything that makes it more human readable/usable than just altogether "tablekeykeyname".
        – Nordico
        7 hours ago








      • 1




        @Nordico In my example, add catcode`:=11 as the first line after documentclass, This changes : to be a "letter". Then newcommandzz:z{...} can be defined and later used as zz:z. What I don't know is if this breaks anything (e.g., spacing, hyphenation), if you use : as a normal character.
        – Steven B. Segletes
        7 hours ago


















      Ok, this works but feels like using a cannon to kill a fly. More precisely: I need to use this with around a hundred keywords, is defining a hundred newcommand to use as a "reference dictionary" advisable? How can I use descriptive names (tablekey_keyname) without using underscores?
      – Nordico
      7 hours ago




      Ok, this works but feels like using a cannon to kill a fly. More precisely: I need to use this with around a hundred keywords, is defining a hundred newcommand to use as a "reference dictionary" advisable? How can I use descriptive names (tablekey_keyname) without using underscores?
      – Nordico
      7 hours ago












      @Nordico As to how to use underscores in a command name, options are limited: 1) change catcode of _ (not recommended, as it breaks subscript math), or 2) csdef and csuse with the etoolbox package (recommended if you insist on underscore in name)
      – Steven B. Segletes
      7 hours ago






      @Nordico As to how to use underscores in a command name, options are limited: 1) change catcode of _ (not recommended, as it breaks subscript math), or 2) csdef and csuse with the etoolbox package (recommended if you insist on underscore in name)
      – Steven B. Segletes
      7 hours ago














      I mean, not necessarily an underscore, it can be other symbol ("tablekey.keyname") or a way of structuring the commands (like an equivalent to C++ namespaces, so I could do "tablekey::keyname"), anything that makes it more human readable/usable than just altogether "tablekeykeyname".
      – Nordico
      7 hours ago






      I mean, not necessarily an underscore, it can be other symbol ("tablekey.keyname") or a way of structuring the commands (like an equivalent to C++ namespaces, so I could do "tablekey::keyname"), anything that makes it more human readable/usable than just altogether "tablekeykeyname".
      – Nordico
      7 hours ago






      1




      1




      @Nordico In my example, add catcode`:=11 as the first line after documentclass, This changes : to be a "letter". Then newcommandzz:z{...} can be defined and later used as zz:z. What I don't know is if this breaks anything (e.g., spacing, hyphenation), if you use : as a normal character.
      – Steven B. Segletes
      7 hours ago






      @Nordico In my example, add catcode`:=11 as the first line after documentclass, This changes : to be a "letter". Then newcommandzz:z{...} can be defined and later used as zz:z. What I don't know is if this breaks anything (e.g., spacing, hyphenation), if you use : as a normal character.
      – Steven B. Segletes
      7 hours ago












      up vote
      2
      down vote













      Below, I'm defining the following commands:





      • setkeyword{<keyword>}{<description>} can be used to declare a keyword.


      • getkeyword{<keyword>} retrieves the description you provided.


      • keywordtable{<key1>,<key2>,…} displays a table containing the descriptions corresponding to a comma-separated list of keywords.


      (Note that keywords containing underscores are allowed.)



      documentclass{article}

      usepackage[T1]{fontenc} %% <- necessary for _ to be displayed correctly
      usepackage{etoolbox} %% <- for csuse, csdef, ifcsdef and forcsvlist
      usepackage{tabularx}

      newcommand*keyname[1]{keyw@#1} %% <- just prepends key@

      %% Define/retrieve a new keyword:
      newcommandsetkeyword[2]{csdef{keyname{#1}}{#2}}
      newcommand*getkeyword[1]{%
      ifcsdef{keyname{#1}}{% %% <- if the key is defined...
      csuse{keyname{#1}}% %% <- return the description
      }{% %% <- otherwise...
      errmessage{Undefined key: #1}% %% <- ERROR
      }%
      }

      %% Display a table describing a list of keywords:
      newcommand*keywordtable[1]{%
      begin{tabularx}{linewidth}{lX}
      forcsvlist{tableentry}{#1} %% <- apply tableentry to each value in #1
      end{tabularx}%
      }
      newcommand*tableentry[1]{%
      formattableentry{detokenize{#1}}{getkeyword{#1}}%
      }
      newcommandformattableentry[2]{ #1 & #2 \ }

      % %% Declaration of keywords:
      setkeyword{runtype}{Keyword to determine runtype. Can be 1 or 2. par
      I don't want to hardcode this description twiceldots}
      setkeyword{param_1}{Keyword to determine the parameter of runtype = 1}
      setkeyword{param_2}{Keyword to determine the parameter of runtype = 2}

      begin{document}

      section{Runtype 1 description}
      keywordtable{runtype,param_1}

      section{Runtype 2 description}
      keywordtable{runtype,param_2}

      end{document}


      output





      Some remarks





      • setkeyword{<keyword>}{<description>} effectively defines keyw@<keyword> for you, so that it expands to <definition>. You can't use this macro directly because its name contains an @.


      • getkeyword{<keyword>} just calls keyw@<keyword>.

      • I'm using the e-TeX primitive detokenize to print the keyword. This command strips all tokens in its argument of their special meaning (by changing their catcodes), so you can for instance use detokenize{param_1} safely.

      • Without usepackage[T1]{fontenc}, underscores are displayed as " ̇", rather than as "_". You'll probably want to use this package anyway because of the reasons outlined here.

      • I'm using tabularx to create a table that has the same width as the current line width. You can replace linewidth by some other value if you want a different width (or just use tabular, in which case you should replace the X column type by something else).






      share|improve this answer



























        up vote
        2
        down vote













        Below, I'm defining the following commands:





        • setkeyword{<keyword>}{<description>} can be used to declare a keyword.


        • getkeyword{<keyword>} retrieves the description you provided.


        • keywordtable{<key1>,<key2>,…} displays a table containing the descriptions corresponding to a comma-separated list of keywords.


        (Note that keywords containing underscores are allowed.)



        documentclass{article}

        usepackage[T1]{fontenc} %% <- necessary for _ to be displayed correctly
        usepackage{etoolbox} %% <- for csuse, csdef, ifcsdef and forcsvlist
        usepackage{tabularx}

        newcommand*keyname[1]{keyw@#1} %% <- just prepends key@

        %% Define/retrieve a new keyword:
        newcommandsetkeyword[2]{csdef{keyname{#1}}{#2}}
        newcommand*getkeyword[1]{%
        ifcsdef{keyname{#1}}{% %% <- if the key is defined...
        csuse{keyname{#1}}% %% <- return the description
        }{% %% <- otherwise...
        errmessage{Undefined key: #1}% %% <- ERROR
        }%
        }

        %% Display a table describing a list of keywords:
        newcommand*keywordtable[1]{%
        begin{tabularx}{linewidth}{lX}
        forcsvlist{tableentry}{#1} %% <- apply tableentry to each value in #1
        end{tabularx}%
        }
        newcommand*tableentry[1]{%
        formattableentry{detokenize{#1}}{getkeyword{#1}}%
        }
        newcommandformattableentry[2]{ #1 & #2 \ }

        % %% Declaration of keywords:
        setkeyword{runtype}{Keyword to determine runtype. Can be 1 or 2. par
        I don't want to hardcode this description twiceldots}
        setkeyword{param_1}{Keyword to determine the parameter of runtype = 1}
        setkeyword{param_2}{Keyword to determine the parameter of runtype = 2}

        begin{document}

        section{Runtype 1 description}
        keywordtable{runtype,param_1}

        section{Runtype 2 description}
        keywordtable{runtype,param_2}

        end{document}


        output





        Some remarks





        • setkeyword{<keyword>}{<description>} effectively defines keyw@<keyword> for you, so that it expands to <definition>. You can't use this macro directly because its name contains an @.


        • getkeyword{<keyword>} just calls keyw@<keyword>.

        • I'm using the e-TeX primitive detokenize to print the keyword. This command strips all tokens in its argument of their special meaning (by changing their catcodes), so you can for instance use detokenize{param_1} safely.

        • Without usepackage[T1]{fontenc}, underscores are displayed as " ̇", rather than as "_". You'll probably want to use this package anyway because of the reasons outlined here.

        • I'm using tabularx to create a table that has the same width as the current line width. You can replace linewidth by some other value if you want a different width (or just use tabular, in which case you should replace the X column type by something else).






        share|improve this answer

























          up vote
          2
          down vote










          up vote
          2
          down vote









          Below, I'm defining the following commands:





          • setkeyword{<keyword>}{<description>} can be used to declare a keyword.


          • getkeyword{<keyword>} retrieves the description you provided.


          • keywordtable{<key1>,<key2>,…} displays a table containing the descriptions corresponding to a comma-separated list of keywords.


          (Note that keywords containing underscores are allowed.)



          documentclass{article}

          usepackage[T1]{fontenc} %% <- necessary for _ to be displayed correctly
          usepackage{etoolbox} %% <- for csuse, csdef, ifcsdef and forcsvlist
          usepackage{tabularx}

          newcommand*keyname[1]{keyw@#1} %% <- just prepends key@

          %% Define/retrieve a new keyword:
          newcommandsetkeyword[2]{csdef{keyname{#1}}{#2}}
          newcommand*getkeyword[1]{%
          ifcsdef{keyname{#1}}{% %% <- if the key is defined...
          csuse{keyname{#1}}% %% <- return the description
          }{% %% <- otherwise...
          errmessage{Undefined key: #1}% %% <- ERROR
          }%
          }

          %% Display a table describing a list of keywords:
          newcommand*keywordtable[1]{%
          begin{tabularx}{linewidth}{lX}
          forcsvlist{tableentry}{#1} %% <- apply tableentry to each value in #1
          end{tabularx}%
          }
          newcommand*tableentry[1]{%
          formattableentry{detokenize{#1}}{getkeyword{#1}}%
          }
          newcommandformattableentry[2]{ #1 & #2 \ }

          % %% Declaration of keywords:
          setkeyword{runtype}{Keyword to determine runtype. Can be 1 or 2. par
          I don't want to hardcode this description twiceldots}
          setkeyword{param_1}{Keyword to determine the parameter of runtype = 1}
          setkeyword{param_2}{Keyword to determine the parameter of runtype = 2}

          begin{document}

          section{Runtype 1 description}
          keywordtable{runtype,param_1}

          section{Runtype 2 description}
          keywordtable{runtype,param_2}

          end{document}


          output





          Some remarks





          • setkeyword{<keyword>}{<description>} effectively defines keyw@<keyword> for you, so that it expands to <definition>. You can't use this macro directly because its name contains an @.


          • getkeyword{<keyword>} just calls keyw@<keyword>.

          • I'm using the e-TeX primitive detokenize to print the keyword. This command strips all tokens in its argument of their special meaning (by changing their catcodes), so you can for instance use detokenize{param_1} safely.

          • Without usepackage[T1]{fontenc}, underscores are displayed as " ̇", rather than as "_". You'll probably want to use this package anyway because of the reasons outlined here.

          • I'm using tabularx to create a table that has the same width as the current line width. You can replace linewidth by some other value if you want a different width (or just use tabular, in which case you should replace the X column type by something else).






          share|improve this answer














          Below, I'm defining the following commands:





          • setkeyword{<keyword>}{<description>} can be used to declare a keyword.


          • getkeyword{<keyword>} retrieves the description you provided.


          • keywordtable{<key1>,<key2>,…} displays a table containing the descriptions corresponding to a comma-separated list of keywords.


          (Note that keywords containing underscores are allowed.)



          documentclass{article}

          usepackage[T1]{fontenc} %% <- necessary for _ to be displayed correctly
          usepackage{etoolbox} %% <- for csuse, csdef, ifcsdef and forcsvlist
          usepackage{tabularx}

          newcommand*keyname[1]{keyw@#1} %% <- just prepends key@

          %% Define/retrieve a new keyword:
          newcommandsetkeyword[2]{csdef{keyname{#1}}{#2}}
          newcommand*getkeyword[1]{%
          ifcsdef{keyname{#1}}{% %% <- if the key is defined...
          csuse{keyname{#1}}% %% <- return the description
          }{% %% <- otherwise...
          errmessage{Undefined key: #1}% %% <- ERROR
          }%
          }

          %% Display a table describing a list of keywords:
          newcommand*keywordtable[1]{%
          begin{tabularx}{linewidth}{lX}
          forcsvlist{tableentry}{#1} %% <- apply tableentry to each value in #1
          end{tabularx}%
          }
          newcommand*tableentry[1]{%
          formattableentry{detokenize{#1}}{getkeyword{#1}}%
          }
          newcommandformattableentry[2]{ #1 & #2 \ }

          % %% Declaration of keywords:
          setkeyword{runtype}{Keyword to determine runtype. Can be 1 or 2. par
          I don't want to hardcode this description twiceldots}
          setkeyword{param_1}{Keyword to determine the parameter of runtype = 1}
          setkeyword{param_2}{Keyword to determine the parameter of runtype = 2}

          begin{document}

          section{Runtype 1 description}
          keywordtable{runtype,param_1}

          section{Runtype 2 description}
          keywordtable{runtype,param_2}

          end{document}


          output





          Some remarks





          • setkeyword{<keyword>}{<description>} effectively defines keyw@<keyword> for you, so that it expands to <definition>. You can't use this macro directly because its name contains an @.


          • getkeyword{<keyword>} just calls keyw@<keyword>.

          • I'm using the e-TeX primitive detokenize to print the keyword. This command strips all tokens in its argument of their special meaning (by changing their catcodes), so you can for instance use detokenize{param_1} safely.

          • Without usepackage[T1]{fontenc}, underscores are displayed as " ̇", rather than as "_". You'll probably want to use this package anyway because of the reasons outlined here.

          • I'm using tabularx to create a table that has the same width as the current line width. You can replace linewidth by some other value if you want a different width (or just use tabular, in which case you should replace the X column type by something else).







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 5 hours ago









          Werner

          432k609511632




          432k609511632










          answered 5 hours ago









          Circumscribe

          2,9171325




          2,9171325






















              up vote
              1
              down vote













              It depends on where you want to first key the description you want to repeat.



              Probably the best place is in the document preamble or in an external file that you can input.



              documentclass{article}
              usepackage{xparse}

              % a few line of code for setting up the system
              ExplSyntaxOn

              NewDocumentCommand{newdesc}{mm}
              {% #1 is a key, #2 is the description
              prop_gput:Nnn g_nordico_descriptions_plist { #1 } { #2 }
              }

              NewDocumentCommand{getdesc}{m}
              {% #1 is a key
              prop_if_in:NnTF g_nordico_descriptions_plist { #1 }
              { prop_item:Nn g_nordico_descriptions_plist { #1 } }
              { ???~non~existent~description~??? }
              }

              prop_new:N g_nordico_descriptions_plist

              ExplSyntaxOff

              % the descriptions (they can go in an external file
              % say desc.tex and here you'd do input{desc}

              newdesc{A}{I don't want to hardcode this description twice...}

              begin{document}

              section{Runtype 1 description}
              begin{center}
              begin{tabular}{ l l }
              runtype & Keyword to determine runtype. Can be 1 or 2. \
              & getdesc{A} \
              param_1 & Keyword to determine the parameter of runtype = 1 \
              end{tabular}
              end{center}

              section{Runtype 2 description}
              begin{center}
              begin{tabular}{ l l }
              runtype & Keyword to determine runtype. Can be 1 or 2. \
              & getdesc{A} \
              param_2 & Keyword to determine the parameter of runtype = 2 \
              end{tabular}
              end{center}

              end{document}


              Note that it is not at all necessary to place a tabular in a floating table environment (which might make the tabular go to another page).



              enter image description here






              share|improve this answer

























                up vote
                1
                down vote













                It depends on where you want to first key the description you want to repeat.



                Probably the best place is in the document preamble or in an external file that you can input.



                documentclass{article}
                usepackage{xparse}

                % a few line of code for setting up the system
                ExplSyntaxOn

                NewDocumentCommand{newdesc}{mm}
                {% #1 is a key, #2 is the description
                prop_gput:Nnn g_nordico_descriptions_plist { #1 } { #2 }
                }

                NewDocumentCommand{getdesc}{m}
                {% #1 is a key
                prop_if_in:NnTF g_nordico_descriptions_plist { #1 }
                { prop_item:Nn g_nordico_descriptions_plist { #1 } }
                { ???~non~existent~description~??? }
                }

                prop_new:N g_nordico_descriptions_plist

                ExplSyntaxOff

                % the descriptions (they can go in an external file
                % say desc.tex and here you'd do input{desc}

                newdesc{A}{I don't want to hardcode this description twice...}

                begin{document}

                section{Runtype 1 description}
                begin{center}
                begin{tabular}{ l l }
                runtype & Keyword to determine runtype. Can be 1 or 2. \
                & getdesc{A} \
                param_1 & Keyword to determine the parameter of runtype = 1 \
                end{tabular}
                end{center}

                section{Runtype 2 description}
                begin{center}
                begin{tabular}{ l l }
                runtype & Keyword to determine runtype. Can be 1 or 2. \
                & getdesc{A} \
                param_2 & Keyword to determine the parameter of runtype = 2 \
                end{tabular}
                end{center}

                end{document}


                Note that it is not at all necessary to place a tabular in a floating table environment (which might make the tabular go to another page).



                enter image description here






                share|improve this answer























                  up vote
                  1
                  down vote










                  up vote
                  1
                  down vote









                  It depends on where you want to first key the description you want to repeat.



                  Probably the best place is in the document preamble or in an external file that you can input.



                  documentclass{article}
                  usepackage{xparse}

                  % a few line of code for setting up the system
                  ExplSyntaxOn

                  NewDocumentCommand{newdesc}{mm}
                  {% #1 is a key, #2 is the description
                  prop_gput:Nnn g_nordico_descriptions_plist { #1 } { #2 }
                  }

                  NewDocumentCommand{getdesc}{m}
                  {% #1 is a key
                  prop_if_in:NnTF g_nordico_descriptions_plist { #1 }
                  { prop_item:Nn g_nordico_descriptions_plist { #1 } }
                  { ???~non~existent~description~??? }
                  }

                  prop_new:N g_nordico_descriptions_plist

                  ExplSyntaxOff

                  % the descriptions (they can go in an external file
                  % say desc.tex and here you'd do input{desc}

                  newdesc{A}{I don't want to hardcode this description twice...}

                  begin{document}

                  section{Runtype 1 description}
                  begin{center}
                  begin{tabular}{ l l }
                  runtype & Keyword to determine runtype. Can be 1 or 2. \
                  & getdesc{A} \
                  param_1 & Keyword to determine the parameter of runtype = 1 \
                  end{tabular}
                  end{center}

                  section{Runtype 2 description}
                  begin{center}
                  begin{tabular}{ l l }
                  runtype & Keyword to determine runtype. Can be 1 or 2. \
                  & getdesc{A} \
                  param_2 & Keyword to determine the parameter of runtype = 2 \
                  end{tabular}
                  end{center}

                  end{document}


                  Note that it is not at all necessary to place a tabular in a floating table environment (which might make the tabular go to another page).



                  enter image description here






                  share|improve this answer












                  It depends on where you want to first key the description you want to repeat.



                  Probably the best place is in the document preamble or in an external file that you can input.



                  documentclass{article}
                  usepackage{xparse}

                  % a few line of code for setting up the system
                  ExplSyntaxOn

                  NewDocumentCommand{newdesc}{mm}
                  {% #1 is a key, #2 is the description
                  prop_gput:Nnn g_nordico_descriptions_plist { #1 } { #2 }
                  }

                  NewDocumentCommand{getdesc}{m}
                  {% #1 is a key
                  prop_if_in:NnTF g_nordico_descriptions_plist { #1 }
                  { prop_item:Nn g_nordico_descriptions_plist { #1 } }
                  { ???~non~existent~description~??? }
                  }

                  prop_new:N g_nordico_descriptions_plist

                  ExplSyntaxOff

                  % the descriptions (they can go in an external file
                  % say desc.tex and here you'd do input{desc}

                  newdesc{A}{I don't want to hardcode this description twice...}

                  begin{document}

                  section{Runtype 1 description}
                  begin{center}
                  begin{tabular}{ l l }
                  runtype & Keyword to determine runtype. Can be 1 or 2. \
                  & getdesc{A} \
                  param_1 & Keyword to determine the parameter of runtype = 1 \
                  end{tabular}
                  end{center}

                  section{Runtype 2 description}
                  begin{center}
                  begin{tabular}{ l l }
                  runtype & Keyword to determine runtype. Can be 1 or 2. \
                  & getdesc{A} \
                  param_2 & Keyword to determine the parameter of runtype = 2 \
                  end{tabular}
                  end{center}

                  end{document}


                  Note that it is not at all necessary to place a tabular in a floating table environment (which might make the tabular go to another page).



                  enter image description here







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 4 hours ago









                  egreg

                  700k8518633138




                  700k8518633138






















                      Nordico is a new contributor. Be nice, and check out our Code of Conduct.










                       

                      draft saved


                      draft discarded


















                      Nordico is a new contributor. Be nice, and check out our Code of Conduct.













                      Nordico is a new contributor. Be nice, and check out our Code of Conduct.












                      Nordico is a new contributor. Be nice, and check out our Code of Conduct.















                       


                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f462072%2fhow-to-repeat-the-same-content-in-different-tables%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      數位音樂下載

                      格利澤436b

                      When can things happen in Etherscan, such as the picture below?